aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux
diff options
context:
space:
mode:
authorChristian Brauner <christian.brauner@ubuntu.com>2021-01-28 11:39:42 +0100
committerDmitry Vyukov <dvyukov@google.com>2021-03-01 21:17:58 +0100
commit92ead2966b78ac6b2d6a0a464cc15c6ee6f853c6 (patch)
tree8941ee9691649995ce5ba7ca4cf4f741d8cd7442 /sys/linux
parent1cdecf8be3c8e4ddfae9982ea63e3ace43fc253b (diff)
sys/linux/filesystem: add mount_setattr() coverage
I've moved the idmapped mount patchset into my for-next branch and plan to send it for the v5.12 merge window in ~2.5 weeks. It comes with a large xfstest but I would also like to get some syzkaller coverage. With-help-from: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Diffstat (limited to 'sys/linux')
-rw-r--r--sys/linux/filesystem.txt13
-rw-r--r--sys/linux/filesystem.txt.const2
-rw-r--r--sys/linux/namespaces.txt2
3 files changed, 17 insertions, 0 deletions
diff --git a/sys/linux/filesystem.txt b/sys/linux/filesystem.txt
index b7debaaaf..49a3f794c 100644
--- a/sys/linux/filesystem.txt
+++ b/sys/linux/filesystem.txt
@@ -38,8 +38,21 @@ fsconfig$FSCONFIG_CMD_RECONFIGURE(fd fd_fscontext, cmd const[FSCONFIG_CMD_RECONF
fsmount(fs_fd fd_fscontext, flags flags[fsmount_flags], attr_flags flags[fsmount_attr_flags]) fd
move_mount(from_dfd fd_dir[opt], from_pathname ptr[in, filename], to_dfd fd_dir[opt], to_pathname ptr[in, filename], flags flags[move_mount_flags])
open_tree(dfd fd_dir[opt], filename ptr[in, filename], flags flags[open_tree_flags]) fd
+mount_setattr(dfd fd_dir[opt], filename ptr[in, filename], flags flags[mount_setattr_flags], args ptr[in, mount_attr], size bytesize[args])
open_tree_flags = AT_EMPTY_PATH, AT_NO_AUTOMOUNT, AT_RECURSIVE, AT_SYMLINK_NOFOLLOW, OPEN_TREE_CLONE, OPEN_TREE_CLOEXEC
+
+mount_setattr_flags = AT_EMPTY_PATH, AT_NO_AUTOMOUNT, AT_RECURSIVE, AT_SYMLINK_NOFOLLOW
+
+mount_attr {
+ attr_set flags[mount_attr_flags, int64]
+ attr_clr flags[mount_attr_flags, int64]
+ propagation flags[mount_attr_propagation_flags, int64]
+ userns_fd align64[fd_userns]
+}
+
+mount_attr_flags = MOUNT_ATTR_RDONLY, MOUNT_ATTR_NOSUID, MOUNT_ATTR_NODEV, MOUNT_ATTR_NOEXEC, MOUNT_ATTR__ATIME, MOUNT_ATTR_NODIRATIME, MOUNT_ATTR_IDMAP
+mount_attr_propagation_flags = MS_UNBINDABLE, MS_PRIVATE, MS_SLAVE, MS_SHARED
fsmount_flags = FSMOUNT_CLOEXEC
fsopen_flags = FSOPEN_CLOEXEC
fspick_flags = FSPICK_CLOEXEC
diff --git a/sys/linux/filesystem.txt.const b/sys/linux/filesystem.txt.const
index 5a96172be..7e0e4cb06 100644
--- a/sys/linux/filesystem.txt.const
+++ b/sys/linux/filesystem.txt.const
@@ -24,6 +24,7 @@ MOUNT_ATTR_NOEXEC = 8
MOUNT_ATTR_NOSUID = 2
MOUNT_ATTR_RDONLY = 1
MOUNT_ATTR__ATIME = 112
+MOUNT_ATTR_IDMAP = 1048576
MOVE_MOUNT_F_AUTOMOUNTS = 2
MOVE_MOUNT_F_EMPTY_PATH = 4
MOVE_MOUNT_F_SYMLINKS = 1
@@ -64,4 +65,5 @@ __NR_fspick = 433, mips64le:5433
__NR_mount = 21, amd64:165, arm64:riscv64:40, mips64le:5160
__NR_move_mount = 429, mips64le:5429
__NR_open_tree = 428, mips64le:5428
+__NR_mount_setattr = 442, mips64le:5442
__NR_umount2 = 52, amd64:166, arm64:riscv64:39, mips64le:5161
diff --git a/sys/linux/namespaces.txt b/sys/linux/namespaces.txt
index 5ae862c8f..63ded0e2c 100644
--- a/sys/linux/namespaces.txt
+++ b/sys/linux/namespaces.txt
@@ -5,11 +5,13 @@ include <uapi/linux/sched.h>
include <uapi/linux/nsfs.h>
resource fd_namespace[fd]
+resource fd_userns[fd_namespace]
unshare(flags flags[unshare_flags])
setns(fd fd_namespace, type flags[ns_type])
syz_open_procfs$namespace(pid pid, file ptr[in, string[procfs_namespace_file]]) fd_namespace
+syz_open_procfs$userns(pid pid, file ptr[in, string["ns/user"]]) fd_userns
ioctl$NS_GET_USERNS(fd fd_namespace, cmd const[NS_GET_USERNS], arg const[0])
ioctl$NS_GET_PARENT(fd fd_namespace, cmd const[NS_GET_PARENT], arg const[0]) fd_namespace