| From stable+bounces-165167-greg=kroah.com@vger.kernel.org Wed Jul 30 03:54:17 2025 |
| From: "Isaac J. Manjarres" <isaacmanjarres@google.com> |
| Date: Tue, 29 Jul 2025 18:52:43 -0700 |
| Subject: selftests/memfd: add test for mapping write-sealed memfd read-only |
| To: lorenzo.stoakes@oracle.com, gregkh@linuxfoundation.org, Shuah Khan <shuah@kernel.org> |
| Cc: aliceryhl@google.com, surenb@google.com, stable@vger.kernel.org, "Isaac J. Manjarres" <isaacmanjarres@google.com>, kernel-team@android.com, Jann Horn <jannh@google.com>, Julian Orth <ju.orth@gmail.com>, "Liam R. Howlett" <Liam.Howlett@Oracle.com>, Linus Torvalds <torvalds@linux-foundation.org>, Vlastimil Babka <vbabka@suse.cz>, Andrew Morton <akpm@linux-foundation.org>, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org |
| Message-ID: <20250730015247.30827-5-isaacmanjarres@google.com> |
| |
| From: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> |
| |
| [ Upstream commit ea0916e01d0b0f2cce1369ac1494239a79827270 ] |
| |
| Now we have reinstated the ability to map F_SEAL_WRITE mappings read-only, |
| assert that we are able to do this in a test to ensure that we do not |
| regress this again. |
| |
| Link: https://lkml.kernel.org/r/a6377ec470b14c0539b4600cf8fa24bf2e4858ae.1732804776.git.lorenzo.stoakes@oracle.com |
| Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> |
| Cc: Jann Horn <jannh@google.com> |
| Cc: Julian Orth <ju.orth@gmail.com> |
| Cc: Liam R. Howlett <Liam.Howlett@Oracle.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Shuah Khan <shuah@kernel.org> |
| Cc: Vlastimil Babka <vbabka@suse.cz> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Isaac J. Manjarres <isaacmanjarres@google.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/testing/selftests/memfd/memfd_test.c | 43 +++++++++++++++++++++++++++++ |
| 1 file changed, 43 insertions(+) |
| |
| --- a/tools/testing/selftests/memfd/memfd_test.c |
| +++ b/tools/testing/selftests/memfd/memfd_test.c |
| @@ -186,6 +186,24 @@ static void *mfd_assert_mmap_shared(int |
| return p; |
| } |
| |
| +static void *mfd_assert_mmap_read_shared(int fd) |
| +{ |
| + void *p; |
| + |
| + p = mmap(NULL, |
| + mfd_def_size, |
| + PROT_READ, |
| + MAP_SHARED, |
| + fd, |
| + 0); |
| + if (p == MAP_FAILED) { |
| + printf("mmap() failed: %m\n"); |
| + abort(); |
| + } |
| + |
| + return p; |
| +} |
| + |
| static void *mfd_assert_mmap_private(int fd) |
| { |
| void *p; |
| @@ -802,6 +820,30 @@ static void test_seal_future_write(void) |
| close(fd); |
| } |
| |
| +static void test_seal_write_map_read_shared(void) |
| +{ |
| + int fd; |
| + void *p; |
| + |
| + printf("%s SEAL-WRITE-MAP-READ\n", memfd_str); |
| + |
| + fd = mfd_assert_new("kern_memfd_seal_write_map_read", |
| + mfd_def_size, |
| + MFD_CLOEXEC | MFD_ALLOW_SEALING); |
| + |
| + mfd_assert_add_seals(fd, F_SEAL_WRITE); |
| + mfd_assert_has_seals(fd, F_SEAL_WRITE); |
| + |
| + p = mfd_assert_mmap_read_shared(fd); |
| + |
| + mfd_assert_read(fd); |
| + mfd_assert_read_shared(fd); |
| + mfd_fail_write(fd); |
| + |
| + munmap(p, mfd_def_size); |
| + close(fd); |
| +} |
| + |
| /* |
| * Test SEAL_SHRINK |
| * Test whether SEAL_SHRINK actually prevents shrinking |
| @@ -1056,6 +1098,7 @@ int main(int argc, char **argv) |
| |
| test_seal_write(); |
| test_seal_future_write(); |
| + test_seal_write_map_read_shared(); |
| test_seal_shrink(); |
| test_seal_grow(); |
| test_seal_resize(); |