On Tue, 10 Jun 2025 at 04:10, Chen Linxuan <chenlinx...@uniontech.com> wrote: > > This patch add a simple functional test for the "abort" file > in fusectlfs (/sys/fs/fuse/connections/ID/about). > > A simple fuse daemon is added for testing. > > Related discussion can be found in the link below. > > Link: > https://lore.kernel.org/all/CAOQ4uxjKFXOKQxPpxtS6G_nR0tpw95w0GiO68UcWg_OBhmSY=q...@mail.gmail.com/ > Signed-off-by: Chen Linxuan <chenlinx...@uniontech.com> > Acked-by: Shuah Khan <sk...@linuxfoundation.org> > Reviewed-by: Amir Goldstein <amir7...@gmail.com>
Thanks. I suggest setting up a userns environment, see attached patch (also fixes a EBUSY on umount/rmdir). Thanks, Miklos
diff --git a/tools/testing/selftests/filesystems/fuse/fusectl_test.c b/tools/testing/selftests/filesystems/fuse/fusectl_test.c index 7050fbe0970e..8d124d1cacb2 100644 --- a/tools/testing/selftests/filesystems/fuse/fusectl_test.c +++ b/tools/testing/selftests/filesystems/fuse/fusectl_test.c @@ -14,6 +14,7 @@ #include <sys/wait.h> #include <unistd.h> #include <dirent.h> +#include <sched.h> #include <linux/limits.h> #include "../../kselftest_harness.h" @@ -23,6 +24,17 @@ #define FUSE_DEVICE "/dev/fuse" #define FUSECTL_TEST_VALUE "1" +static void write_file(struct __test_metadata *const _metadata, + const char *path, const char *val) +{ + int fd = open(path, O_WRONLY); + size_t len = strlen(val); + + ASSERT_GE(fd, 0); + ASSERT_EQ(write(fd, val, len), len); + ASSERT_EQ(close(fd), 0); +} + FIXTURE(fusectl){ char fuse_mountpoint[sizeof(FUSE_MOUNTPOINT)]; int connection; @@ -33,6 +45,18 @@ FIXTURE_SETUP(fusectl) const char *fuse_mnt_prog = "./fuse_mnt"; int status, pid; struct stat statbuf; + uid_t uid = getuid(); + gid_t gid = getgid(); + char buf[32]; + + /* Setup userns */ + ASSERT_EQ(unshare(CLONE_NEWNS|CLONE_NEWUSER), 0); + sprintf(buf, "0 %d 1", uid); + write_file(_metadata, "/proc/self/uid_map", buf); + write_file(_metadata, "/proc/self/setgroups", "deny"); + sprintf(buf, "0 %d 1", gid); + write_file(_metadata, "/proc/self/gid_map", buf); + ASSERT_EQ(mount("", "/", NULL, MS_REC|MS_PRIVATE, NULL), 0); strcpy(self->fuse_mountpoint, FUSE_MOUNTPOINT); @@ -73,7 +97,7 @@ FIXTURE_SETUP(fusectl) FIXTURE_TEARDOWN(fusectl) { - umount(self->fuse_mountpoint); + umount2(self->fuse_mountpoint, MNT_DETACH); rmdir(self->fuse_mountpoint); }