qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 20/25] virtiofsd: Parse flag FUSE_WRITE_KILL_PRIV


From: Dr. David Alan Gilbert (git)
Subject: [PATCH 20/25] virtiofsd: Parse flag FUSE_WRITE_KILL_PRIV
Date: Thu, 24 Oct 2019 12:27:13 +0100

From: Vivek Goyal <address@hidden>

Caller can set FUSE_WRITE_KILL_PRIV in write_flags. Parse it and pass it
to the filesystem.

Signed-off-by: Vivek Goyal <address@hidden>
---
 contrib/virtiofsd/fuse_common.h   | 5 ++++-
 contrib/virtiofsd/fuse_lowlevel.c | 4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/contrib/virtiofsd/fuse_common.h b/contrib/virtiofsd/fuse_common.h
index b5b6d270fe..63ef2390a1 100644
--- a/contrib/virtiofsd/fuse_common.h
+++ b/contrib/virtiofsd/fuse_common.h
@@ -83,8 +83,11 @@ struct fuse_file_info {
            nothing when set by open()). */
        unsigned int cache_readdir : 1;
 
+       /* Indicates that suid/sgid bits should be removed upon write */
+       unsigned int kill_priv : 1;
+
        /** Padding.  Reserved for future use*/
-       unsigned int padding : 25;
+       unsigned int padding : 24;
        unsigned int padding2 : 32;
 
        /** File handle id.  May be filled in by filesystem in create,
diff --git a/contrib/virtiofsd/fuse_lowlevel.c 
b/contrib/virtiofsd/fuse_lowlevel.c
index d032e411e1..8f9a59a34c 100644
--- a/contrib/virtiofsd/fuse_lowlevel.c
+++ b/contrib/virtiofsd/fuse_lowlevel.c
@@ -1151,6 +1151,7 @@ static void do_write(fuse_req_t req, fuse_ino_t nodeid,
        memset(&fi, 0, sizeof(fi));
        fi.fh = arg->fh;
        fi.writepage = (arg->write_flags & FUSE_WRITE_CACHE) != 0;
+       fi.kill_priv = !!(arg->write_flags & FUSE_WRITE_KILL_PRIV);
 
        if (!compat) {
                fi.lock_owner = arg->lock_owner;
@@ -1197,7 +1198,8 @@ static void do_write_buf(fuse_req_t req, fuse_ino_t 
nodeid,
        }
 
        fi.fh = arg->fh;
-       fi.writepage = arg->write_flags & FUSE_WRITE_CACHE;
+       fi.writepage = !!(arg->write_flags & FUSE_WRITE_CACHE);
+       fi.kill_priv = !!(arg->write_flags & FUSE_WRITE_KILL_PRIV);
 
        if (ibufv->count == 1) {
                assert(!(tmpbufv.buf[0].flags & FUSE_BUF_IS_FD));
-- 
2.23.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]