From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12077 Path: news.gmane.org!.POSTED!not-for-mail From: Bobby Bingham Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] [libc-test] pthread_atfork/fork regression test Date: Fri, 10 Nov 2017 14:59:18 -0600 Message-ID: <20171110205918.18470-1-koorogi@koorogi.info> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1510347579 24051 195.159.176.226 (10 Nov 2017 20:59:39 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 10 Nov 2017 20:59:39 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-12093-gllmg-musl=m.gmane.org@lists.openwall.com Fri Nov 10 21:59:31 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eDGOf-0005sG-DX for gllmg-musl@m.gmane.org; Fri, 10 Nov 2017 21:59:29 +0100 Original-Received: (qmail 30447 invoked by uid 550); 10 Nov 2017 20:59:34 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 30410 invoked from network); 10 Nov 2017 20:59:34 -0000 X-Mailer: git-send-email 2.15.0 Xref: news.gmane.org gmane.linux.lib.musl.general:12077 Archived-At: --- src/regression/pthread_atfork-errno-clobber.c | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/regression/pthread_atfork-errno-clobber.c diff --git a/src/regression/pthread_atfork-errno-clobber.c b/src/regression/pthread_atfork-errno-clobber.c new file mode 100644 index 0000000..ab3b378 --- /dev/null +++ b/src/regression/pthread_atfork-errno-clobber.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include +#include +#include +#include "test.h" + +#define TEST(c, ...) ((c) ? 1 : (t_error(#c" failed: " __VA_ARGS__),0)) + +static void handler_errno(void) +{ + errno = 0; +} + +int main(void) +{ + t_setrlim(RLIMIT_NPROC, 0); + pthread_atfork(handler_errno, handler_errno, handler_errno); + + pid_t pid; + if (!TEST((pid = fork()) == -1, "fork succeeded despite rlimit\n")) { + if (!pid) _exit(0); + while (waitpid(pid, NULL, 0)<0 && errno==EINTR); + } else { + TEST(errno != 0, "fork failed but errno was clobbered\n"); + } + + return t_status; +} + -- 2.15.0