• Miklos Szeredi's avatar
    fuse: add FUSE_WRITE_KILL_PRIV · 4a2abf99
    Miklos Szeredi authored
    In the FOPEN_DIRECT_IO case the write path doesn't call file_remove_privs()
    and that means setuid bit is not cleared if unpriviliged user writes to a
    file with setuid bit set.
    
    pjdfstest chmod test 12.t tests this and fails.
    
    Fix this by adding a flag to the FUSE_WRITE message that requests clearing
    privileges on the given file.  This needs 
    
    This better than just calling fuse_remove_privs(), because the attributes
    may not be up to date, so in that case a write may miss clearing the
    privileges.
    
    Test case:
    
      $ passthrough_ll /mnt/pasthrough-mnt -o default_permissions,allow_other,cache=never
      $ mkdir /mnt/pasthrough-mnt/testdir
      $ cd /mnt/pasthrough-mnt/testdir
      $ prove -rv pjdfstests/tests/chmod/12.t
    Reported-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    Tested-by: default avatarVivek Goyal <vgoyal@redhat.com>
    4a2abf99
file.c 79.2 KB