summaryrefslogtreecommitdiffstats
path: root/fs/efs
diff options
context:
space:
mode:
authorAl Smith <Al.Smith@aeschi.ch.eu.org>1999-05-27 12:04:18 +0000
committerAl Smith <Al.Smith@aeschi.ch.eu.org>1999-05-27 12:04:18 +0000
commitb61a0946e6223fd330f45aaf9d4f2e6d9bc83adb (patch)
tree67e9349cf3c5b38a15c56c2f54f6ed375c9fb3aa /fs/efs
parent6169897dfc815d9066084d84b7d6affab525686e (diff)
EFS updated to 1.0b. See http://aeschi.ch.eu.org/efs/HISTORY
Diffstat (limited to 'fs/efs')
-rw-r--r--fs/efs/dir.c7
-rw-r--r--fs/efs/super.c6
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;
}