From: Cyril Bur <cyrilbur@gmail.com>
To: linuxppc-dev@ozlabs.org
Cc: mikey@neuling.org
Subject: [PATCH V2 2/5] selftests/powerpc: Add fork() test to check for spr being preserved
Date: Tue, 5 Apr 2016 09:59:24 +1000 [thread overview]
Message-ID: <1459814367-3057-2-git-send-email-cyrilbur@gmail.com> (raw)
In-Reply-To: <1459814367-3057-1-git-send-email-cyrilbur@gmail.com>
Signed-off-by: Cyril Bur <cyrilbur@gmail.com>
---
tools/testing/selftests/powerpc/syscalls/Makefile | 3 +-
.../testing/selftests/powerpc/syscalls/spr_fork.c | 78 ++++++++++++++++++++++
2 files changed, 80 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/powerpc/syscalls/spr_fork.c
diff --git a/tools/testing/selftests/powerpc/syscalls/Makefile b/tools/testing/selftests/powerpc/syscalls/Makefile
index 291ba45..55969f3 100644
--- a/tools/testing/selftests/powerpc/syscalls/Makefile
+++ b/tools/testing/selftests/powerpc/syscalls/Makefile
@@ -1,4 +1,4 @@
-TEST_PROGS := ipc_unmuxed spr_exec
+TEST_PROGS := ipc_unmuxed spr_exec spr_fork
CFLAGS += -I../../../../../usr/include
@@ -6,6 +6,7 @@ all: $(TEST_PROGS)
$(TEST_PROGS): ../harness.c
spr_exec: ../utils.c
+spr_fork: ../utils.c
include ../../lib.mk
diff --git a/tools/testing/selftests/powerpc/syscalls/spr_fork.c b/tools/testing/selftests/powerpc/syscalls/spr_fork.c
new file mode 100644
index 0000000..1a351a6
--- /dev/null
+++ b/tools/testing/selftests/powerpc/syscalls/spr_fork.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016, Cyril Bur, IBM Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * This test checks that the TAR register (an SPR) is correctly preserved
+ * across a fork()
+ */
+#include <asm/cputable.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/auxv.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include "utils.h"
+
+static int fork_spr(void)
+{
+ int child_ret;
+ unsigned long tar;
+ pid_t pid;
+ int i;
+
+
+ /* Do it a few times as there is a chance that one might luckily pass */
+ i = 0;
+ while (i < 10) {
+ /* What are the odds... */
+ tar = 0x123456;
+ asm __volatile__(
+ "mtspr 815, %[tar]"
+ :
+ : [tar] "r" (tar)
+ );
+
+ pid = fork();
+ FAIL_IF(pid == -1);
+ asm __volatile__(
+ "mfspr %[tar], 815"
+ : [tar] "=r" (tar)
+ );
+
+ FAIL_IF(tar != 0x123456);
+
+ if (pid == 0)
+ exit(0);
+
+ FAIL_IF(waitpid(pid, &child_ret, 0) == -1);
+
+ /* Child haddn't exited ? */
+ FAIL_IF(!WIFEXITED(child_ret));
+
+ /* Child detected a bad tar */
+ FAIL_IF(WEXITSTATUS(child_ret));
+
+ /* Reset it */
+ tar = 0;
+ asm __volatile__(
+ "mtspr 815, %[tar]"
+ :
+ : [tar] "r" (tar)
+ );
+
+ i++;
+ }
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ SKIP_IF(!have_hwcap2(PPC_FEATURE2_TAR));
+ return test_harness(fork_spr, "spr_fork");
+}
--
2.7.4
next prev parent reply other threads:[~2016-04-05 0:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-04 23:59 [PATCH V2 1/5] selftests/powerpc: Add exec() test to check for spr sanitisation Cyril Bur
2016-04-04 23:59 ` Cyril Bur [this message]
2016-04-04 23:59 ` [PATCH V2 3/5] powerpc: Fix SPR leak across exec() syscalls Cyril Bur
2016-04-04 23:59 ` [PATCH V2 4/5] powerpc: Move flush_all_to_thread() below save_sprs() Cyril Bur
2016-04-04 23:59 ` [PATCH V2 5/5] powerpc: Preserve the SPR values across fork() syscalls Cyril Bur
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1459814367-3057-2-git-send-email-cyrilbur@gmail.com \
--to=cyrilbur@gmail.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=mikey@neuling.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.