• Andrew Morton's avatar
    [PATCH] ext2: fix directory handling bug · b84ba662
    Andrew Morton authored
    Patch from Dave Miller.  Fixes a very long-standing bug.
    
    If a process has an fd open against a now-removed directory, lookups on that
    fd will end up calling ext2_find_entry() against a zero-length directory.
    
    When this happens ext2_find_entry() will, on the first pass through the loop,
    set `kaddr' to page_address(page) - 20.  Things get confused and the "zero
    length directory entry" warning triggers.
    
    This only happens on 64-bit machines, because ext2_last_byte() is returning
    an unsigned (32-bit) value, and the arithmetic works out OK for 32-bit
    machines.
    
    So we change ext2_find_entry() to bale out immediately if the directory is
    zero-length.  All other directory-walking functions do this, but
    ext2_find_entry() forgot to, due to the search-from-the-last-place
    optimisation.
    b84ba662
dir.c 16.2 KB