• M
    aio: fix async fsync creds · 02184513
    Miklos Szeredi 提交于
    stable inclusion
    from linux-4.19.129
    commit e4df4140aceb68ac9fd0258e5a03300e0f35a246
    
    --------------------------------
    
    commit 530f32fc upstream.
    
    Avi Kivity reports that on fuse filesystems running in a user namespace
    asyncronous fsync fails with EOVERFLOW.
    
    The reason is that f_ops->fsync() is called with the creds of the kthread
    performing aio work instead of the creds of the process originally
    submitting IOCB_CMD_FSYNC.
    
    Fuse sends the creds of the caller in the request header and it needs to
    translate the uid and gid into the server's user namespace.  Since the
    kthread is running in init_user_ns, the translation will fail and the
    operation returns an error.
    
    It can be argued that fsync doesn't actually need any creds, but just
    zeroing out those fields in the header (as with requests that currently
    don't take creds) is a backward compatibility risk.
    
    Instead of working around this issue in fuse, solve the core of the problem
    by calling the filesystem with the proper creds.
    Reported-by: NAvi Kivity <avi@scylladb.com>
    Tested-by: NGiuseppe Scrivano <gscrivan@redhat.com>
    Fixes: c9582eb0 ("fuse: Fail all requests with invalid uids or gids")
    Cc: stable@vger.kernel.org  # 4.18+
    Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    02184513
aio.c 55.6 KB