/* * Test SEAL_FUTURE_WRITE * Test whether SEAL_FUTURE_WRITE actually prevents modifications. */ static void test_seal_future_write(void) { int fd, fd2; void *p; printf("%s SEAL-FUTURE-WRITE\n", memfd_str); fd = mfd_assert_new("kern_memfd_seal_future_write", mfd_def_size, MFD_CLOEXEC | MFD_ALLOW_SEALING); p = mfd_assert_mmap_shared(fd); mfd_assert_has_seals(fd, 0); mfd_assert_add_seals(fd, F_SEAL_FUTURE_WRITE); mfd_assert_has_seals(fd, F_SEAL_FUTURE_WRITE); /* read should pass, writes should fail */ mfd_assert_read(fd); mfd_assert_read_shared(fd); mfd_fail_write(fd); fd2 = mfd_assert_reopen_fd(fd); /* read should pass, writes should still fail */ mfd_assert_read(fd2); mfd_assert_read_shared(fd2); mfd_fail_write(fd2); munmap(p, mfd_def_size); close(fd2); close(fd); }
/* * Test SEAL_WRITE * Test whether SEAL_WRITE actually prevents modifications. */ static void test_seal_write(void) { int fd; fd = mfd_assert_new("kern_memfd_seal_write", MFD_DEF_SIZE, MFD_CLOEXEC | MFD_ALLOW_SEALING); mfd_assert_has_seals(fd, 0); mfd_assert_add_seals(fd, F_SEAL_WRITE); mfd_assert_has_seals(fd, F_SEAL_WRITE); mfd_assert_read(fd); mfd_fail_write(fd); mfd_assert_shrink(fd); mfd_assert_grow(fd); mfd_fail_grow_write(fd); close(fd); }
/* * Test SEAL_WRITE * Test whether SEAL_WRITE actually prevents modifications. */ static void test_seal_write(void) { int fd; printf("%s SEAL-WRITE\n", memfd_str); fd = mfd_assert_new("kern_memfd_seal_write", mfd_def_size, MFD_CLOEXEC | MFD_ALLOW_SEALING); mfd_assert_has_seals(fd, 0); mfd_assert_add_seals(fd, F_SEAL_WRITE); mfd_assert_has_seals(fd, F_SEAL_WRITE); mfd_assert_read(fd); mfd_fail_write(fd); mfd_assert_shrink(fd); mfd_assert_grow(fd); mfd_fail_grow_write(fd); close(fd); }