• Jeffrey Mitchell's avatar
    nfs: Fix security label length not being reset · badb7483
    Jeffrey Mitchell authored
    [ Upstream commit d33030e2
    
     ]
    
    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 ...
    badb7483
dir.c 66.1 KB