diff options
author | Al Smith <Al.Smith@aeschi.ch.eu.org> | 1999-05-27 12:04:18 +0000 |
---|---|---|
committer | Al Smith <Al.Smith@aeschi.ch.eu.org> | 1999-05-27 12:04:18 +0000 |
commit | b61a0946e6223fd330f45aaf9d4f2e6d9bc83adb (patch) | |
tree | 67e9349cf3c5b38a15c56c2f54f6ed375c9fb3aa /fs | |
parent | 6169897dfc815d9066084d84b7d6affab525686e (diff) |
EFS updated to 1.0b. See http://aeschi.ch.eu.org/efs/HISTORY
Diffstat (limited to 'fs')
-rw-r--r-- | fs/efs/dir.c | 7 | ||||
-rw-r--r-- | fs/efs/super.c | 6 |
2 files changed, 12 insertions, 1 deletions
diff --git a/fs/efs/dir.c b/fs/efs/dir.c index ea8efd2dd..ea484dab4 100644 --- a/fs/efs/dir.c +++ b/fs/efs/dir.c @@ -109,6 +109,13 @@ static int efs_readdir(struct file *filp, void *dirent, filldir_t filldir) { /* copy filename and data in dirslot */ filldir(dirent, nameptr, namelen, filp->f_pos, inodenum); + /* sanity check */ + if (nameptr - (char *) dirblock + namelen > EFS_DIRBSIZE) { + printk(KERN_WARNING "EFS: directory entry %d exceeds directory block\n", slot); + slot++; + continue; + } + /* store position of next slot */ if (++slot == dirblock->slots) { slot = 0; diff --git a/fs/efs/super.c b/fs/efs/super.c index 2e370493d..b6ebde3de 100644 --- a/fs/efs/super.c +++ b/fs/efs/super.c @@ -119,11 +119,13 @@ static efs_block_t efs_validate_vh(struct volume_header *vh) { if (slice == -1) { printk(KERN_NOTICE "EFS: partition table contained no EFS partitions\n"); +#ifdef DEBUG } else { printk(KERN_INFO "EFS: using slice %d (type %s, offset 0x%x)\n", slice, (pt_entry->pt_name) ? pt_entry->pt_name : "unknown", sblock); +#endif } return(sblock); } @@ -178,12 +180,14 @@ struct super_block *efs_read_super(struct super_block *s, void *d, int silent) { bh = bread(dev, sb->fs_start + EFS_SUPER, EFS_BLOCKSIZE); if (!bh) { - printk(KERN_ERR "EFS: unable to read superblock\n"); + printk(KERN_ERR "EFS: cannot read superblock\n"); goto out_no_fs_ul; } if (efs_validate_super(sb, (struct efs_super *) bh->b_data)) { +#ifdef DEBUG printk(KERN_WARNING "EFS: invalid superblock at block %u\n", sb->fs_start + EFS_SUPER); +#endif brelse(bh); goto out_no_fs_ul; } |