1*d3693fddSriastradh /* $NetBSD: t_backtrace_sandbox.c,v 1.2 2025/01/27 17:02:50 riastradh Exp $ */ 23532823eSchristos 33532823eSchristos /*- 43532823eSchristos * Copyright (c) 2025 Kyle Evans <kevans@FreeBSD.org> 53532823eSchristos * 63532823eSchristos * SPDX-License-Identifier: BSD-2-Clause 73532823eSchristos */ 83532823eSchristos #include <sys/cdefs.h> 9*d3693fddSriastradh __RCSID("$NetBSD: t_backtrace_sandbox.c,v 1.2 2025/01/27 17:02:50 riastradh Exp $"); 103532823eSchristos 113532823eSchristos #include <sys/param.h> 123532823eSchristos #ifdef __FreeBSD__ 133532823eSchristos #include <sys/capsicum.h> 143532823eSchristos #define __arraycount(a) nitems(a) 153532823eSchristos #endif 163532823eSchristos 173532823eSchristos #include <execinfo.h> 183532823eSchristos #include <signal.h> 193532823eSchristos #include <stdio.h> 203532823eSchristos #include <string.h> 213532823eSchristos #include <unistd.h> 223532823eSchristos 233532823eSchristos #include <atf-c.h> 243532823eSchristos 253532823eSchristos #define BT_FUNCTIONS 10 263532823eSchristos 273532823eSchristos ATF_TC(backtrace_sandbox); 283532823eSchristos ATF_TC_HEAD(backtrace_sandbox, tc) 293532823eSchristos { 303532823eSchristos atf_tc_set_md_var(tc, "descr", 313532823eSchristos "Test backtrace_sandbox_init(3) in sandbox"); 323532823eSchristos #ifndef __FreeBSD__ 333532823eSchristos atf_tc_set_md_var(tc, "require.user", "root"); 343532823eSchristos #endif 353532823eSchristos } 363532823eSchristos 373532823eSchristos ATF_TC_BODY(backtrace_sandbox, tc) 383532823eSchristos { 393532823eSchristos void *addr[BT_FUNCTIONS]; 403532823eSchristos char **syms; 413532823eSchristos size_t frames; 423532823eSchristos 433532823eSchristos frames = backtrace(addr, __arraycount(addr)); 443532823eSchristos ATF_REQUIRE(frames > 0); 453532823eSchristos 463532823eSchristos syms = backtrace_symbols_fmt(addr, frames, "%n"); 473532823eSchristos ATF_REQUIRE(strcmp(syms[0], "atfu_backtrace_sandbox_body") == 0); 483532823eSchristos 493532823eSchristos backtrace_sandbox_init(); 503532823eSchristos #ifdef __FreeBSD__ 513532823eSchristos cap_enter(); 523532823eSchristos #else 533532823eSchristos ATF_REQUIRE(chroot("/tmp") == 0); 543532823eSchristos #endif 553532823eSchristos 563532823eSchristos syms = backtrace_symbols_fmt(addr, frames, "%n"); 573532823eSchristos ATF_REQUIRE(strcmp(syms[0], "atfu_backtrace_sandbox_body") == 0); 583532823eSchristos } 593532823eSchristos 603532823eSchristos ATF_TP_ADD_TCS(tp) 613532823eSchristos { 623532823eSchristos 633532823eSchristos ATF_TP_ADD_TC(tp, backtrace_sandbox); 643532823eSchristos 653532823eSchristos return atf_no_error(); 663532823eSchristos } 67