diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2026-02-16 10:04:26 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2026-02-16 17:57:52 +0000 |
| commit | 44843695bc4e36abd15835d627da7d38c06f2219 (patch) | |
| tree | 71dfde3bf697a0032566727a472119c3df9404d9 | |
| parent | d6bf2d14a941a88e27a82a3f91790353e134b8f6 (diff) | |
pdrfork(2) tests: catch runaway child for EFAULT test
Reported and tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D55306
| -rw-r--r-- | tests/sys/kern/pdrfork.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/tests/sys/kern/pdrfork.c b/tests/sys/kern/pdrfork.c index 1003ad9dc746..943e7fde835a 100644 --- a/tests/sys/kern/pdrfork.c +++ b/tests/sys/kern/pdrfork.c @@ -95,11 +95,21 @@ ATF_TC_WITHOUT_HEAD(efault); ATF_TC_BODY(efault, tc) { void *unmapped; + pid_t my_pid; unmapped = mmap(NULL, PAGE_SIZE, PROT_NONE, MAP_GUARD, -1, 0); ATF_REQUIRE(unmapped != MAP_FAILED); + my_pid = getpid(); ATF_REQUIRE_ERRNO(EFAULT, pdrfork(unmapped, 0, RFPROC | RFPROCDESC) < 0); + + /* + * EFAULT only means that the copyout of the procdesc failed. + * The runaway child was created anyway. Prevent + * double-destruction of the atf stuff. + */ + if (my_pid != getpid()) + _exit(0); } /* Invalid combinations of flags should return EINVAL */ |
