Module Name: src Committed By: christos Date: Wed Sep 25 19:24:15 UTC 2024
Modified Files: src/tests/lib/libc/sys: t_clone.c Log Message: centralize stack allocation/freeing. The test that broke with the new jemalloc had broken stack allocation. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/tests/lib/libc/sys/t_clone.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/libc/sys/t_clone.c diff -u src/tests/lib/libc/sys/t_clone.c:1.4 src/tests/lib/libc/sys/t_clone.c:1.5 --- src/tests/lib/libc/sys/t_clone.c:1.4 Tue May 23 11:56:55 2017 +++ src/tests/lib/libc/sys/t_clone.c Wed Sep 25 15:24:15 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_clone.c,v 1.4 2017/05/23 15:56:55 christos Exp $ */ +/* $NetBSD: t_clone.c,v 1.5 2024/09/25 19:24:15 christos Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -32,11 +32,12 @@ #include <sys/cdefs.h> __COPYRIGHT("@(#) Copyright (c) 2008\ The NetBSD Foundation, inc. All rights reserved."); -__RCSID("$NetBSD: t_clone.c,v 1.4 2017/05/23 15:56:55 christos Exp $"); +__RCSID("$NetBSD: t_clone.c,v 1.5 2024/09/25 19:24:15 christos Exp $"); +#include <sys/param.h> +#include <sys/types.h> #include <sys/mman.h> #include <sys/resource.h> -#include <sys/types.h> #include <sys/wait.h> #include <errno.h> @@ -53,6 +54,27 @@ __RCSID("$NetBSD: t_clone.c,v 1.4 2017/0 #define FROBVAL 41973 #define CHILDEXIT 0xa5 +static void * +getstack(void) +{ + void *stack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE, + MAP_PRIVATE|MAP_ANON, -1, (off_t) 0); + ATF_REQUIRE_ERRNO(errno, stack != MAP_FAILED); +#ifndef __MACHINE_STACK_GROWS_UP + stack = (char *)stack + STACKSIZE; +#endif + return stack; +} + +static void +putstack(void *stack) +{ +#ifndef __MACHINE_STACK_GROWS_UP + stack = (char *)stack - STACKSIZE; +#endif + ATF_REQUIRE_ERRNO(errno, munmap(stack, STACKSIZE) != -1); +} + static int dummy(void *arg) { @@ -94,21 +116,11 @@ ATF_TC_HEAD(clone_basic, tc) ATF_TC_BODY(clone_basic, tc) { sigset_t mask; - void *allocstack, *stack; + void *stack = getstack(); pid_t pid; volatile long frobme[2]; int stat; - allocstack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE, - MAP_PRIVATE|MAP_ANON, -1, (off_t) 0); - - ATF_REQUIRE_ERRNO(errno, allocstack != MAP_FAILED); - - stack = allocstack; -#ifndef __MACHINE_STACK_GROWS_UP - stack = (char *)stack + STACKSIZE; -#endif - printf("parent: stack = %p, frobme = %p\n", stack, frobme); fflush(stdout); @@ -158,7 +170,7 @@ ATF_TC_BODY(clone_basic, tc) /*NOTREACHED*/ } - ATF_REQUIRE_ERRNO(errno, munmap(allocstack, STACKSIZE) != -1); + putstack(stack); } ATF_TC(clone_null_stack); @@ -190,16 +202,9 @@ ATF_TC_HEAD(clone_null_func, tc) ATF_TC_BODY(clone_null_func, tc) { - void *allocstack, *stack; + void *stack = getstack(); int rv; - allocstack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE, - MAP_PRIVATE|MAP_ANON, -1, (off_t) 0); - ATF_REQUIRE_ERRNO(errno, allocstack != MAP_FAILED); - stack = allocstack; -#ifndef __MACHINE_STACK_GROWS_UP - stack = (char *)stack + STACKSIZE; -#endif errno = 0; rv = __clone(0, stack, @@ -208,7 +213,7 @@ ATF_TC_BODY(clone_null_func, tc) ATF_REQUIRE_EQ(rv, -1); ATF_REQUIRE_EQ(errno, EINVAL); - ATF_REQUIRE_ERRNO(errno, munmap(allocstack, STACKSIZE) != -1); + putstack(stack); } ATF_TC(clone_out_of_proc); @@ -222,6 +227,7 @@ ATF_TC_HEAD(clone_out_of_proc, tc) ATF_TC_BODY(clone_out_of_proc, tc) { + char *stack = getstack(); struct rlimit rl; int rv; @@ -233,11 +239,12 @@ ATF_TC_BODY(clone_out_of_proc, tc) ATF_REQUIRE_ERRNO(errno, setrlimit(RLIMIT_NPROC, &rl) != -1); errno = 0; - rv = __clone(dummy, malloc(10240), + rv = __clone(dummy, stack, CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGCHLD, (void *)&rl); ATF_REQUIRE_EQ(rv, -1); ATF_REQUIRE_EQ(errno, EAGAIN); + putstack(stack); } ATF_TP_ADD_TCS(tp)