• Vivek Goyal's avatar
    fuse: introduce the notion of FUSE_HANDLE_KILLPRIV_V2 · 63f9909f
    Vivek Goyal authored
    We already have FUSE_HANDLE_KILLPRIV flag that says that file server will
    remove suid/sgid/caps on truncate/chown/write. But that's little different
    from what Linux VFS implements.
    
    To be consistent with Linux VFS behavior what we want is.
    
    - caps are always cleared on chown/write/truncate
    - suid is always cleared on chown, while for truncate/write it is cleared
      only if caller does not have CAP_FSETID.
    - sgid is always cleared on chown, while for truncate/write it is cleared
      only if caller does not have CAP_FSETID as well as file has group execute
      permission.
    
    As previous flag did not provide above semantics. Implement a V2 of the
    protocol with above said constraints.
    
    Server does not know if caller has CAP_FSETID or not. So for the case
    of write()/truncate(), client will send information in special flag to
    indicate whether to kill priviliges or not. These changes are in subsequent
    patches.
    
    FUSE_HANDLE_KILLPRIV_V2 relies on WRITE being sent to server to clear
    suid/sgid/security.capability. But with ->writeback_cache, WRITES are
    cached in guest. So it is not recommended to use FUSE_HANDLE_KILLPRIV_V2
    and writeback_cache together. Though it probably might be good enough
    for lot of use cases.
    Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    63f9909f
inode.c 40.3 KB