summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiubo Li <xiubli@redhat.com>2023-02-09 12:49:43 +0800
committerNikolaus Rath <Nikolaus@rath.org>2023-02-09 10:22:15 +0000
commit418b7efca9bfa56802732ecde75651071315c9bd (patch)
treeff8fbdd822a30d76c890449425d8d548a83fa168
parentd7560cc9916b086bfe5d86459cc9f04033edd904 (diff)
downloadfuse-418b7efca9bfa56802732ecde75651071315c9bd.tar.gz
fuse_lowlevel.h: add more setattr flags
Such as for the xfstest-dev's generic/684 test case it will clear suid and sgid if the fallocate request is commited by an unprivileged user. The kernel fuse passed the ATTR_KILL_SUID/ATTR_KILL_SGID flags to userspace but it will be dropped. Signed-off-by: Xiubo Li <xiubli@redhat.com>
-rw-r--r--include/fuse_lowlevel.h8
-rw-r--r--lib/fuse_lowlevel.c2
2 files changed, 10 insertions, 0 deletions
diff --git a/include/fuse_lowlevel.h b/include/fuse_lowlevel.h
index 9099e45..31eb452 100644
--- a/include/fuse_lowlevel.h
+++ b/include/fuse_lowlevel.h
@@ -156,7 +156,15 @@ enum fuse_expire_flags {
#define FUSE_SET_ATTR_MTIME (1 << 5)
#define FUSE_SET_ATTR_ATIME_NOW (1 << 7)
#define FUSE_SET_ATTR_MTIME_NOW (1 << 8)
+#define FUSE_SET_ATTR_FORCE (1 << 9)
#define FUSE_SET_ATTR_CTIME (1 << 10)
+#define FUSE_SET_ATTR_KILL_SUID (1 << 11)
+#define FUSE_SET_ATTR_KILL_SGID (1 << 12)
+#define FUSE_SET_ATTR_FILE (1 << 13)
+#define FUSE_SET_ATTR_KILL_PRIV (1 << 14)
+#define FUSE_SET_ATTR_OPEN (1 << 15)
+#define FUSE_SET_ATTR_TIMES_SET (1 << 16)
+#define FUSE_SET_ATTR_TOUCH (1 << 17)
/* ----------------------------------------------------------- *
* Request methods and replies *
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index fcc2108..a0f8f00 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -1186,6 +1186,8 @@ static void do_setattr(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
FUSE_SET_ATTR_SIZE |
FUSE_SET_ATTR_ATIME |
FUSE_SET_ATTR_MTIME |
+ FUSE_SET_ATTR_KILL_SUID |
+ FUSE_SET_ATTR_KILL_SGID |
FUSE_SET_ATTR_ATIME_NOW |
FUSE_SET_ATTR_MTIME_NOW |
FUSE_SET_ATTR_CTIME;