Because the ioctl right is associated with the opened file, we expect that it will work with files which are opened by means other than open(2). Signed-off-by: Günther Noack <gnoack@xxxxxxxxxx> --- tools/testing/selftests/landlock/fs_test.c | 50 +++++++++++++++------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/landlock/fs_test.c b/tools/testing/selftests/landlock/fs_test.c index 456bd681091d..4eb989d5ff39 100644 --- a/tools/testing/selftests/landlock/fs_test.c +++ b/tools/testing/selftests/landlock/fs_test.c @@ -3716,22 +3716,6 @@ TEST_F_FORK(ftruncate, open_and_ftruncate_in_different_processes) ASSERT_EQ(0, close(socket_fds[1])); } -TEST(memfd_ftruncate) -{ - int fd; - - fd = memfd_create("name", MFD_CLOEXEC); - ASSERT_LE(0, fd); - - /* - * Checks that ftruncate is permitted on file descriptors that are - * created in ways other than open(2). - */ - EXPECT_EQ(0, test_ftruncate(fd)); - - ASSERT_EQ(0, close(fd)); -} - /* Invokes the FIOQSIZE ioctl(2) and returns its errno or 0. */ static int test_fioqsize_ioctl(int fd) { @@ -3742,6 +3726,40 @@ static int test_fioqsize_ioctl(int fd) return 0; } +TEST(memfd_ftruncate_and_ioctl) +{ + struct landlock_ruleset_attr attr = { + .handled_access_fs = ACCESS_ALL, + }; + int ruleset_fd, fd, i; + + /* + * We exercise the same test both with and without Landlock enabled, to + * ensure that it behaves the same in both cases. + */ + for (i = 0; i < 2; i++) { + /* Creates a new memfd. */ + fd = memfd_create("name", MFD_CLOEXEC); + ASSERT_LE(0, fd); + + /* + * Checks that operations associated with the opened file + * (ftruncate, ioctl) are permitted on file descriptors that are + * created in ways other than open(2). + */ + EXPECT_EQ(0, test_ftruncate(fd)); + EXPECT_EQ(0, test_fioqsize_ioctl(fd)); + + ASSERT_EQ(0, close(fd)); + + /* Enables Landlock. */ + ruleset_fd = landlock_create_ruleset(&attr, sizeof(attr), 0); + ASSERT_LE(0, ruleset_fd) + enforce_ruleset(_metadata, ruleset_fd); + ASSERT_EQ(0, close(ruleset_fd)); + } +} + /* * Attempt ioctls on regular files, with file descriptors opened before and * after landlocking. -- 2.41.0.694.ge786442a9b-goog