From: Vivek Goyal <vgoyal@redhat.com> To: Miklos Szeredi <miklos@szeredi.hu> Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-nvdimm@lists.01.org, stefanha@redhat.com, dgilbert@redhat.com, swhiteho@redhat.com Subject: Re: [PATCH v2 02/30] fuse: Clear setuid bit even in cache=never path Date: Tue, 21 May 2019 11:01:31 -0400 Message-ID: <20190521150131.GB29075@redhat.com> (raw) In-Reply-To: <20190520144137.GA24093@localhost.localdomain> On Mon, May 20, 2019 at 04:41:37PM +0200, Miklos Szeredi wrote: > On Wed, May 15, 2019 at 03:26:47PM -0400, Vivek Goyal wrote: > > If fuse daemon is started with cache=never, fuse falls back to direct IO. > > In that write path we don'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. > > I think better sulution is to tell the server if the suid bit needs to be > removed, so it can do so in a race free way. > > Here's the kernel patch, and I'll reply with the libfuse patch. Hi Miklos, I tested and it works for me. Vivek > > --- > fs/fuse2/file.c | 2 ++ > include/uapi/linux/fuse.h | 3 +++ > 2 files changed, 5 insertions(+) > > --- a/fs/fuse2/file.c > +++ b/fs/fuse2/file.c > @@ -363,6 +363,8 @@ static ssize_t fuse_send_write(struct fu > inarg->flags |= O_DSYNC; > if (iocb->ki_flags & IOCB_SYNC) > inarg->flags |= O_SYNC; > + if (!capable(CAP_FSETID)) > + inarg->write_flags |= FUSE_WRITE_KILL_PRIV; > req->inh.opcode = FUSE_WRITE; > req->inh.nodeid = ff->nodeid; > req->inh.len = req->inline_inlen + count; > --- a/include/uapi/linux/fuse.h > +++ b/include/uapi/linux/fuse.h > @@ -125,6 +125,7 @@ > * > * 7.29 > * - add FUSE_NO_OPENDIR_SUPPORT flag > + * - add FUSE_WRITE_KILL_PRIV flag > */ > > #ifndef _LINUX_FUSE_H > @@ -318,9 +319,11 @@ struct fuse_file_lock { > * > * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed > * FUSE_WRITE_LOCKOWNER: lock_owner field is valid > + * FUSE_WRITE_KILL_PRIV: kill suid and sgid bits > */ > #define FUSE_WRITE_CACHE (1 << 0) > #define FUSE_WRITE_LOCKOWNER (1 << 1) > +#define FUSE_WRITE_KILL_PRIV (1 << 2) > > /** > * Read flags > >
next prev parent reply index Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-15 19:26 [PATCH v2 00/30] [RFC] virtio-fs: shared file system for virtual machines Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 01/30] fuse: delete dentry if timeout is zero Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 02/30] fuse: Clear setuid bit even in cache=never path Vivek Goyal 2019-05-20 14:41 ` Miklos Szeredi 2019-05-20 14:44 ` Miklos Szeredi 2019-05-20 20:25 ` Nikolaus Rath 2019-05-21 15:01 ` Vivek Goyal [this message] 2019-05-15 19:26 ` [PATCH v2 03/30] fuse: Use default_file_splice_read for direct IO Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 04/30] fuse: export fuse_end_request() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 05/30] fuse: export fuse_len_args() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 06/30] fuse: Export fuse_send_init_request() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 07/30] fuse: export fuse_get_unique() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 08/30] fuse: extract fuse_fill_super_common() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 09/30] fuse: add fuse_iqueue_ops callbacks Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 10/30] fuse: Separate fuse device allocation and installation in fuse_conn Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 11/30] virtio_fs: add skeleton virtio_fs.ko module Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 12/30] dax: remove block device dependencies Vivek Goyal 2019-05-16 0:21 ` Dan Williams 2019-05-16 10:07 ` Stefan Hajnoczi 2019-05-16 14:23 ` Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 13/30] dax: Pass dax_dev to dax_writeback_mapping_range() Vivek Goyal 2019-05-15 19:26 ` [PATCH v2 14/30] virtio: Add get_shm_region method Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 15/30] virtio: Implement get_shm_region for PCI transport Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 16/30] virtio: Implement get_shm_region for MMIO transport Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 17/30] fuse, dax: add fuse_conn->dax_dev field Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 18/30] virtio_fs, dax: Set up virtio_fs dax_device Vivek Goyal 2019-07-17 17:27 ` Halil Pasic 2019-07-18 9:04 ` Cornelia Huck 2019-07-18 11:20 ` Halil Pasic 2019-07-18 14:47 ` Cornelia Huck 2019-07-18 13:15 ` Vivek Goyal 2019-07-18 14:30 ` Dan Williams 2019-07-22 10:51 ` Christian Borntraeger 2019-07-22 10:56 ` Dr. David Alan Gilbert 2019-07-22 11:20 ` Christian Borntraeger 2019-07-22 11:43 ` Cornelia Huck 2019-07-22 12:00 ` Christian Borntraeger 2019-07-22 12:08 ` David Hildenbrand 2019-07-29 13:20 ` Stefan Hajnoczi 2019-05-15 19:27 ` [PATCH v2 19/30] fuse: Keep a list of free dax memory ranges Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 20/30] fuse: Introduce setupmapping/removemapping commands Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 21/30] fuse, dax: Implement dax read/write operations Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 22/30] fuse, dax: add DAX mmap support Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 23/30] fuse: Define dax address space operations Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 24/30] fuse, dax: Take ->i_mmap_sem lock during dax page fault Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 25/30] fuse: Maintain a list of busy elements Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 26/30] fuse: Add logic to free up a memory range Vivek Goyal [not found] ` <CAN+Pk99SNKSf+GjSQUUWt_eu1fSjTy_ByUOEQUXHi8zNqXY1zA@mail.gmail.com> 2019-05-20 12:53 ` Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 27/30] fuse: Release file in process context Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 28/30] fuse: Reschedule dax free work if too many EAGAIN attempts Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 29/30] fuse: Take inode lock for dax inode truncation Vivek Goyal 2019-05-15 19:27 ` [PATCH v2 30/30] virtio-fs: Do not provide abort interface in fusectl Vivek Goyal
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190521150131.GB29075@redhat.com \ --to=vgoyal@redhat.com \ --cc=dgilbert@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=miklos@szeredi.hu \ --cc=stefanha@redhat.com \ --cc=swhiteho@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
KVM Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/kvm/0 kvm/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 kvm kvm/ https://lore.kernel.org/kvm \ kvm@vger.kernel.org public-inbox-index kvm Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.kvm AGPL code for this site: git clone https://public-inbox.org/public-inbox.git