public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [tests/selinux] main: kernel/overlayfs-mmap-bugs: test for execmem regression
@ 2026-06-17 19:36 Ondrej Mosnacek
0 siblings, 0 replies; only message in thread
From: Ondrej Mosnacek @ 2026-06-17 19:36 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : tests/selinux
Branch : main
Commit : bcf00d44c6262a160a2ba67805542dfe260a7119
Author : Ondrej Mosnacek <omosnace@redhat.com>
Date : 2026-06-16T13:44:16+02:00
Stats : +36/-16 in 4 file(s)
URL : https://src.fedoraproject.org/tests/selinux/c/bcf00d44c6262a160a2ba67805542dfe260a7119?branch=main
Log:
kernel/overlayfs-mmap-bugs: test for execmem regression
The original CVE fix has a bug in that it incorrectly checks execmem
permission for the mounter domain. Test for the regression in the test
so that we can verify its fix.
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---
diff --git a/kernel/overlayfs-mmap-bugs/main.fmf b/kernel/overlayfs-mmap-bugs/main.fmf
index dddb9db..8ff2402 100644
--- a/kernel/overlayfs-mmap-bugs/main.fmf
+++ b/kernel/overlayfs-mmap-bugs/main.fmf
@@ -1,7 +1,7 @@
summary: Regression test for overlayfs mmap/mprotect bugs
description: |
- Tests various scenarios with overlayfs and mmap/mprotect syscalls.
- This also covers CVE-2026-46054.
+ Tests various scenarios with overlayfs and mmap/mprotect syscalls.
+ This also covers CVE-2026-46054.
contact: Ondrej Mosnacek <omosnace@redhat.com>
component:
- kernel
@@ -13,10 +13,15 @@ duration: 5m
tier: 2
enabled: true
link:
- - verifies: https://issues.redhat.com/browse/RHEL-127505
+ - verifies: https://redhat.atlassian.net/browse/RHEL-127505
- verifies: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2026-46054
+ - verifies: https://redhat.atlassian.net/browse/RHEL-185115
+ - verifies: https://redhat.atlassian.net/browse/RHEL-185117
+ - verifies: https://redhat.atlassian.net/browse/RHEL-185118
environment:
- AVC_ERROR: +no_avc_check
+ AVC_ERROR: +no_avc_check
check:
- how: avc
result: xfail
+extra-nitrate: TC#0620043
+id: 2ee56bc8-01f3-4b77-8cdb-494ad9a12451
diff --git a/kernel/overlayfs-mmap-bugs/map_access.c b/kernel/overlayfs-mmap-bugs/map_access.c
index 9300365..0bd4530 100644
--- a/kernel/overlayfs-mmap-bugs/map_access.c
+++ b/kernel/overlayfs-mmap-bugs/map_access.c
@@ -11,16 +11,22 @@ int main(int argc, const char **argv)
{
const char *file, *context;
void *ptr;
- int rdonly, fd, ctxfd, ret;
+ int rdonly, execmem, flags, prot, fd, ctxfd, ret;
- if (argc < 3 || argc > 4 || (strcmp(argv[2], "RDONLY") && strcmp(argv[2], "RDWR"))) {
+ if (argc < 4 || argc > 5 ||
+ (strcmp(argv[2], "RDONLY") && strcmp(argv[2], "RDWR")) ||
+ (strcmp(argv[3], "SHARED") && strcmp(argv[3], "PRIVATE"))
+ ) {
fprintf(stderr, "Usage %s <file> RDONLY|RDWR\n", argv[0]);
return EINVAL;
}
file = argv[1];
rdonly = strcmp(argv[2], "RDONLY") == 0;
- context = argc >= 4 ? argv[3] : NULL;
+ execmem = strcmp(argv[3], "PRIVATE") == 0;
+ flags = strcmp(argv[3], "PRIVATE") == 0 ? MAP_PRIVATE : MAP_SHARED;
+ prot = PROT_READ | (!rdonly || execmem ? PROT_WRITE : 0) | (execmem ? PROT_EXEC : 0);
+ context = argc >= 5 ? argv[4] : NULL;
fd = open(file, rdonly ? O_RDONLY : O_RDWR);
if (fd == -1) {
@@ -29,8 +35,7 @@ int main(int argc, const char **argv)
}
/* try direct mmap */
- ptr = mmap(NULL, 1, rdonly ? PROT_READ : PROT_READ|PROT_WRITE,
- MAP_SHARED, fd, 0);
+ ptr = mmap(NULL, 1, prot, flags, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
return 3;
@@ -38,7 +43,7 @@ int main(int argc, const char **argv)
munmap(ptr, 1);
/* try mmap with PROT_NONE followed by mprotect with full access */
- ptr = mmap(NULL, 1, PROT_NONE, MAP_SHARED, fd, 0);
+ ptr = mmap(NULL, 1, PROT_NONE, flags, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap PROT_NONE");
return 4;
@@ -58,7 +63,7 @@ int main(int argc, const char **argv)
close(ctxfd);
}
- ret = mprotect(ptr, 1, rdonly ? PROT_READ : PROT_READ|PROT_WRITE);
+ ret = mprotect(ptr, 1, prot);
if (ret == -1) {
perror("mprotect");
return 5;
diff --git a/kernel/overlayfs-mmap-bugs/runtest.sh b/kernel/overlayfs-mmap-bugs/runtest.sh
index 3d15777..1cb3ab0 100755
--- a/kernel/overlayfs-mmap-bugs/runtest.sh
+++ b/kernel/overlayfs-mmap-bugs/runtest.sh
@@ -41,28 +41,32 @@ rlJournalStart
"Clear the audit log"
rlPhaseEnd
- rlPhaseStartTest
+ rlPhaseStartTest "CVE-2026-46054"
# Bug 1
# Should get below AVC:
# avc: denied { map } for scontext=...test_mounter_t... tcontext=...test_lowerfile_no_map_t... tclass=file
- rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_no_map RDONLY" 3 "Test Bug 1"
+ rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_no_map RDONLY SHARED" 3 "Test Bug 1"
# Bug 2, result 1
# Shouldn't get below AVC:
# avc: denied { use } for scontext=...test_access_full_t... tcontext=...test_mounter_t... tclass=fd
rlRun "setsebool domain_fd_use 0"
- rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY" 0 "Test Bug 2, result 1"
+ rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY SHARED" 0 "Test Bug 2, result 1"
rlRun "setsebool domain_fd_use 1"
# Bug 2, result 2
# Shouldn't get below AVC:
# avc: denied { read } for scontext=...test_access_full_t... tcontext=...test_lowerfile_t... tclass=file
- rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY" 0 "Test Bug 2, result 2"
+ rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY SHARED" 0 "Test Bug 2, result 2"
# Bug 2, result 3
# Should get below AVC:
# avc: denied { read } for scontext=...test_access_exploit_t... tcontext=...test_mountedfile_t... tclass=file
- rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY $DYNTRANSCON" 5 "Test Bug 2, result 3"
+ rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY SHARED $DYNTRANSCON" 5 "Test Bug 2, result 3"
+ rlPhaseEnd
+
+ rlPhaseStartTest "execmem regression"
+ rlRun "runcon -t test_access_full_t ./map_access ./mountpoint/file_ok RDONLY PRIVATE" 0 "Verify no execmem denied"
rlPhaseEnd
rlPhaseStartCleanup
diff --git a/kernel/overlayfs-mmap-bugs/test_policy.te b/kernel/overlayfs-mmap-bugs/test_policy.te
index 5260f28..73f05cc 100644
--- a/kernel/overlayfs-mmap-bugs/test_policy.te
+++ b/kernel/overlayfs-mmap-bugs/test_policy.te
@@ -25,6 +25,8 @@ manage_dirs_pattern(test_mounter_t, test_lowerfile_t, test_lowerfile_t)
manage_files_pattern(test_mounter_t, test_lowerfile_t, test_lowerfile_t)
manage_chr_files_pattern(test_mounter_t, test_lowerfile_t, test_lowerfile_t)
allow test_mounter_t test_lowerfile_t:file map;
+# extra permission for execmem regression test
+allow test_mounter_t test_lowerfile_t:file { execute };
# test_mounter_t can't map test_lowerfile_t
rw_files_pattern(test_mounter_t, test_lowerfile_no_map_t, test_lowerfile_no_map_t)
@@ -77,6 +79,10 @@ corecmd_bin_entry_type(test_access_exploit_t)
allow test_access_full_t self:process { setcurrent };
allow test_access_full_t test_access_exploit_t:process { dyntransition };
+# extra permissions for execmem regression test
+allow test_access_full_t test_mountedfile_t:file { execute };
+allow test_access_full_t self:process { execmem };
+
attribute test_domain;
typeattribute test_mounter_t test_domain;
typeattribute test_access_full_t test_domain;
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-06-17 19:36 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-17 19:36 [tests/selinux] main: kernel/overlayfs-mmap-bugs: test for execmem regression Ondrej Mosnacek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox