• Al Viro's avatar
    [PATCH] Fix ext2 readdir f_pos re-validation logic · 6d4da662
    Al Viro authored
    
    
    This fixes not one, but _two_, silly (but admittedly hard to hit) bugs
    in the ext2 filesystem "readdir()" function.  It also cleans up the code
    to avoid the unnecessary goto mess.
    
    The bugs were related to re-valiating the f_pos value after somebody had
    either done an "lseek()" on the directory to an invalid offset, or when
    the offset had become invalid due to a file being unlinked in the
    directory.  The code would not only set the f_version too eagerly, it
    would also not update f_pos appropriately for when the offset fixup took
    place.
    
    When that happened, we'd occasionally subsequently fail the readdir()
    even when we shouldn't (no real harm done, but an ugly printk, and
    obviously you would end up not necessarily seeing all entries).
    
    Thanks to Masoud Sharbiani <masouds@google.com> who noticed the problem
    and had a test-case for it, and also fixed up a thinko in the first
    version of this patch.
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Acked-by: default avatarMasoud Sharbiani <masouds@google.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    6d4da662
dir.c 16.4 KB