aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tools/testing/selftests/x86/test_vsyscall.c
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2020-06-26 10:21:16 -0700
committerThomas Gleixner <tglx@linutronix.de>2020-07-01 10:00:27 +0200
commitcced0b24bb545bfe74fea96de84adc23c0146b05 (patch)
tree4cf94eb54ae3f64b4c4b54c696f0e5fabd081078 /tools/testing/selftests/x86/test_vsyscall.c
parentselftests/x86/syscall_nt: Clear weird flags after each test (diff)
downloadwireguard-linux-cced0b24bb545bfe74fea96de84adc23c0146b05.tar.xz
wireguard-linux-cced0b24bb545bfe74fea96de84adc23c0146b05.zip
selftests/x86: Consolidate and fix get/set_eflags() helpers
There are several copies of get_eflags() and set_eflags() and they all are buggy. Consolidate them and fix them. The fixes are: Add memory clobbers. These are probably unnecessary but they make sure that the compiler doesn't move something past one of these calls when it shouldn't. Respect the redzone on x86_64. There has no failure been observed related to this, but it's definitely a bug. Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/982ce58ae8dea2f1e57093ee894760e35267e751.1593191971.git.luto@kernel.org
Diffstat (limited to 'tools/testing/selftests/x86/test_vsyscall.c')
-rw-r--r--tools/testing/selftests/x86/test_vsyscall.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c
index a4f4d4cf22c3..c41f24b517f4 100644
--- a/tools/testing/selftests/x86/test_vsyscall.c
+++ b/tools/testing/selftests/x86/test_vsyscall.c
@@ -20,6 +20,8 @@
#include <setjmp.h>
#include <sys/uio.h>
+#include "helpers.h"
+
#ifdef __x86_64__
# define VSYS(x) (x)
#else
@@ -493,21 +495,8 @@ static int test_process_vm_readv(void)
}
#ifdef __x86_64__
-#define X86_EFLAGS_TF (1UL << 8)
static volatile sig_atomic_t num_vsyscall_traps;
-static unsigned long get_eflags(void)
-{
- unsigned long eflags;
- asm volatile ("pushfq\n\tpopq %0" : "=rm" (eflags));
- return eflags;
-}
-
-static void set_eflags(unsigned long eflags)
-{
- asm volatile ("pushq %0\n\tpopfq" : : "rm" (eflags) : "flags");
-}
-
static void sigtrap(int sig, siginfo_t *info, void *ctx_void)
{
ucontext_t *ctx = (ucontext_t *)ctx_void;