• Jiufei Xue's avatar
    ovl: check the capability before cred overridden · 98487de3
    Jiufei Xue authored
    We found that it return success when we set IMMUTABLE_FL flag to a file in
    docker even though the docker didn't have the capability
    CAP_LINUX_IMMUTABLE.
    
    The commit d1d04ef8 ("ovl: stack file ops") and dab5ca8f ("ovl: add
    lsattr/chattr support") implemented chattr operations on a regular overlay
    file. ovl_real_ioctl() overridden the current process's subjective
    credentials with ofs->creator_cred which have the capability
    CAP_LINUX_IMMUTABLE so that it will return success in
    vfs_ioctl()->cap_capable().
    
    Fix this by checking the capability before cred overridden. And here we
    only care about APPEND_FL and IMMUTABLE_FL, so get these information from
    inode.
    
    [SzM: move check and call to underlying fs inside inode locked region to
    prevent two such calls from racing with each other]
    Signed-off-by: default avatarJiufei Xue <jiufei.xue@linux.alibaba.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    98487de3
file.c 13.1 KB