• W
    ext4: fix setattr project check in fssetxattr ioctl · 0d0413e9
    Wang Shilong 提交于
    commit dc7ac6c4cae3b58724c2f1e21a7c05ce19ecd5a8 upstream.
    
    Currently, project quota could be changed by fssetxattr
    ioctl, and existed permission check inode_owner_or_capable()
    is obviously not enough, just think that common users could
    change project id of file, that could make users to
    break project quota easily.
    
    This patch try to follow same regular of xfs project
    quota:
    
    "Project Quota ID state is only allowed to change from
    within the init namespace. Enforce that restriction only
    if we are trying to change the quota ID state.
    Everything else is allowed in user namespaces."
    
    Besides that, check and set project id'state should
    be an atomic operation, protect whole operation with
    inode lock, ext4_ioctl_setproject() is only used for
    ioctl EXT4_IOC_FSSETXATTR, we have held mnt_want_write_file()
    before ext4_ioctl_setflags(), and ext4_ioctl_setproject()
    is called after ext4_ioctl_setflags(), we could share
    codes, so remove it inside ext4_ioctl_setproject().
    Signed-off-by: NWang Shilong <wshilong@ddn.com>
    Signed-off-by: NTheodore Ts'o <tytso@mit.edu>
    Reviewed-by: NAndreas Dilger <adilger@dilger.ca>
    Cc: stable@kernel.org
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0d0413e9
ioctl.c 27.9 KB