summaryrefslogtreecommitdiffstats
path: root/fs/efs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/efs/dir.c')
-rw-r--r--fs/efs/dir.c7
1 files changed, 7 insertions, 0 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;