• Jeffrey Mitchell's avatar
    nfs: Fix security label length not being reset · d33030e2
    Jeffrey Mitchell authored
    nfs_readdir_page_filler() iterates over entries in a directory, reusing
    the same security label buffer, but does not reset the buffer's length.
    This causes decode_attr_security_label() to return -ERANGE if an entry's
    security label is longer than the previous one's. This error, in
    nfs4_decode_dirent(), only gets passed up as -EAGAIN, which causes another
    failed attempt to copy into the buffer. The second error is ignored and
    the remaining entries do not show up in ls, specifically the getdents64()
    syscall.
    
    Reproduce by creating multiple files in NFS and giving one of the later
    files a longer security label. ls will not see that file nor any that are
    added afterwards, though they will exist on the backend.
    
    In nfs_readdir_page_filler(), reset security label buffer length before
    every reuse
    Signed-off-by: default avatarJeffrey Mitchell <jeffrey.mitchell@starlab.io>
    Fixes: b4487b93 ("nfs: Fix getxattr kernel panic and memory overflow")
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
    d33030e2
dir.c 70.7 KB