yaffs: Fix yaffs_readdir when dereferencing a symlink
authorCharles Manning <cdhmanning@gmail.com>
Thu, 21 May 2015 05:27:01 +0000 (17:27 +1200)
committerCharles Manning <cdhmanning@gmail.com>
Thu, 21 May 2015 05:31:26 +0000 (17:31 +1200)
If the directory is a symlink then follow the symlink.

eg
yaffs_mount("/nand/");
yaffs_symlink("x", "/nand/sym");
yaffs_mkdir("/nand/x",0666);

After that:

yaffs_opendir("/nand/sym/") works, but opendir("/nand/sym") fails because the
symlink itself is found. Fix by dereferencing the symlink in yaffs_opendir().

Thanks to Trent Lillehaugen for finding that.

Signed-off-by: Charles Manning <cdhmanning@gmail.com>
direct/yaffsfs.c

index dedd76c..cdde7ab 100644 (file)
@@ -3428,6 +3428,7 @@ static yaffs_DIR *yaffsfs_opendir_reldir_no_lock(struct yaffs_obj *reldir,
        }
 
        obj = yaffsfs_FindObject(reldir, dirname, 0, 1, NULL, &notDir, &loop);
+       obj = yaffsfs_FollowLink(obj, 0, &loop);
 
        if (!obj && notDir)
                yaffsfs_SetError(-ENOTDIR);