Module Name: src
Committed By: christos
Date: Thu Jan 30 16:13:51 UTC 2025
Modified Files:
src/tests/lib/libexecinfo: t_backtrace_sandbox.c
Log Message:
fork and don't use atf in the child (from martin@)
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libexecinfo/t_backtrace_sandbox.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/lib/libexecinfo/t_backtrace_sandbox.c
diff -u src/tests/lib/libexecinfo/t_backtrace_sandbox.c:1.2 src/tests/lib/libexecinfo/t_backtrace_sandbox.c:1.3
--- src/tests/lib/libexecinfo/t_backtrace_sandbox.c:1.2 Mon Jan 27 12:02:50 2025
+++ src/tests/lib/libexecinfo/t_backtrace_sandbox.c Thu Jan 30 11:13:51 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: t_backtrace_sandbox.c,v 1.2 2025/01/27 17:02:50 riastradh Exp $ */
+/* $NetBSD: t_backtrace_sandbox.c,v 1.3 2025/01/30 16:13:51 christos Exp $ */
/*-
* Copyright (c) 2025 Kyle Evans <[email protected]>
@@ -6,9 +6,10 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_backtrace_sandbox.c,v 1.2 2025/01/27 17:02:50 riastradh Exp $");
+__RCSID("$NetBSD: t_backtrace_sandbox.c,v 1.3 2025/01/30 16:13:51 christos Exp $");
#include <sys/param.h>
+#include <sys/wait.h>
#ifdef __FreeBSD__
#include <sys/capsicum.h>
#define __arraycount(a) nitems(a)
@@ -18,6 +19,7 @@ __RCSID("$NetBSD: t_backtrace_sandbox.c,
#include <signal.h>
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include <unistd.h>
#include <atf-c.h>
@@ -39,6 +41,8 @@ ATF_TC_BODY(backtrace_sandbox, tc)
void *addr[BT_FUNCTIONS];
char **syms;
size_t frames;
+ pid_t pid;
+ int status;
frames = backtrace(addr, __arraycount(addr));
ATF_REQUIRE(frames > 0);
@@ -46,15 +50,33 @@ ATF_TC_BODY(backtrace_sandbox, tc)
syms = backtrace_symbols_fmt(addr, frames, "%n");
ATF_REQUIRE(strcmp(syms[0], "atfu_backtrace_sandbox_body") == 0);
- backtrace_sandbox_init();
+ pid = fork();
+ ATF_REQUIRE(pid >= 0);
+
+ if (pid == 0) {
+
+ backtrace_sandbox_init();
#ifdef __FreeBSD__
- cap_enter();
+ cap_enter();
#else
- ATF_REQUIRE(chroot("/tmp") == 0);
+ if (chroot("/tmp") != 0)
+ _exit(EXIT_FAILURE);
#endif
- syms = backtrace_symbols_fmt(addr, frames, "%n");
- ATF_REQUIRE(strcmp(syms[0], "atfu_backtrace_sandbox_body") == 0);
+ syms = backtrace_symbols_fmt(addr, frames, "%n");
+ if (strcmp(syms[0], "atfu_backtrace_sandbox_body") != 0)
+ _exit(EXIT_FAILURE);
+
+ backtrace_sandbox_fini();
+
+ _exit(EXIT_SUCCESS);
+ }
+
+ (void)wait(&status);
+
+ if (!WIFEXITED(status) || WEXITSTATUS(status) != EXIT_SUCCESS)
+ atf_tc_fail("resolving symbols in chroot failed");
+
}
ATF_TP_ADD_TCS(tp)