* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:04 ` Mathieu Desnoyers 0 siblings, 0 replies; 9+ messages in thread From: mathieu.desnoyers @ 2018-10-04 19:04 UTC (permalink / raw) commit ce01a1575f45bf319e374592656441021a7f5823 upstream. On x86-64, the parametrized selftest code for rseq crashes with a segmentation fault when compiled with -fpie. This happens when the param_test binary is loaded at an address beyond 32-bit on x86-64. The issue is caused by use of a 32-bit register to hold the address of the loop counter variable. Fix this by using a 64-bit register to calculate the address of the loop counter variables as an offset from rip. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> Acked-by: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Cc: <stable at vger.kernel.org> # v4.18 Cc: Shuah Khan <shuah at kernel.org> Cc: Thomas Gleixner <tglx at linutronix.de> Cc: Joel Fernandes <joelaf at google.com> Cc: Peter Zijlstra <peterz at infradead.org> Cc: Catalin Marinas <catalin.marinas at arm.com> Cc: Dave Watson <davejwatson at fb.com> Cc: Will Deacon <will.deacon at arm.com> Cc: Andi Kleen <andi at firstfloor.org> Cc: linux-kselftest at vger.kernel.org Cc: "H . Peter Anvin" <hpa at zytor.com> Cc: Chris Lameter <cl at linux.com> Cc: Russell King <linux at arm.linux.org.uk> Cc: Michael Kerrisk <mtk.manpages at gmail.com> Cc: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Cc: Paul Turner <pjt at google.com> Cc: Boqun Feng <boqun.feng at gmail.com> Cc: Josh Triplett <josh at joshtriplett.org> Cc: Steven Rostedt <rostedt at goodmis.org> Cc: Ben Maurer <bmaurer at fb.com> Cc: Andy Lutomirski <luto at amacapital.net> Cc: Andrew Morton <akpm at linux-foundation.org> Cc: Linus Torvalds <torvalds at linux-foundation.org> --- tools/testing/selftests/rseq/param_test.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/rseq/param_test.c b/tools/testing/selftests/rseq/param_test.c index 615252331813..4bc071525bf7 100644 --- a/tools/testing/selftests/rseq/param_test.c +++ b/tools/testing/selftests/rseq/param_test.c @@ -56,15 +56,13 @@ unsigned int yield_mod_cnt, nr_abort; printf(fmt, ## __VA_ARGS__); \ } while (0) -#if defined(__x86_64__) || defined(__i386__) +#ifdef __i386__ #define INJECT_ASM_REG "eax" #define RSEQ_INJECT_CLOBBER \ , INJECT_ASM_REG -#ifdef __i386__ - #define RSEQ_INJECT_ASM(n) \ "mov asm_loop_cnt_" #n ", %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ @@ -76,9 +74,16 @@ unsigned int yield_mod_cnt, nr_abort; #elif defined(__x86_64__) +#define INJECT_ASM_REG_P "rax" +#define INJECT_ASM_REG "eax" + +#define RSEQ_INJECT_CLOBBER \ + , INJECT_ASM_REG_P \ + , INJECT_ASM_REG + #define RSEQ_INJECT_ASM(n) \ - "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG "\n\t" \ - "mov (%%" INJECT_ASM_REG "), %%" INJECT_ASM_REG "\n\t" \ + "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG_P "\n\t" \ + "mov (%%" INJECT_ASM_REG_P "), %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ "jz 333f\n\t" \ "222:\n\t" \ @@ -86,10 +91,6 @@ unsigned int yield_mod_cnt, nr_abort; "jnz 222b\n\t" \ "333:\n\t" -#else -#error "Unsupported architecture" -#endif - #elif defined(__ARMEL__) #define RSEQ_INJECT_INPUT \ -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:04 ` Mathieu Desnoyers 0 siblings, 0 replies; 9+ messages in thread From: Mathieu Desnoyers @ 2018-10-04 19:04 UTC (permalink / raw) To: stable, gregkh Cc: linux-kernel, Mathieu Desnoyers, Shuah Khan, Thomas Gleixner, Joel Fernandes, Peter Zijlstra, Catalin Marinas, Dave Watson, Will Deacon, Andi Kleen, linux-kselftest, H . Peter Anvin, Chris Lameter, Russell King, Michael Kerrisk, Paul E . McKenney, Paul Turner, Boqun Feng, Josh Triplett, Steven Rostedt, Ben Maurer, Andy Lutomirski, Andrew Morton, Linus Torvalds commit ce01a1575f45bf319e374592656441021a7f5823 upstream. On x86-64, the parametrized selftest code for rseq crashes with a segmentation fault when compiled with -fpie. This happens when the param_test binary is loaded at an address beyond 32-bit on x86-64. The issue is caused by use of a 32-bit register to hold the address of the loop counter variable. Fix this by using a 64-bit register to calculate the address of the loop counter variables as an offset from rip. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com> Cc: <stable@vger.kernel.org> # v4.18 Cc: Shuah Khan <shuah@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Joel Fernandes <joelaf@google.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Dave Watson <davejwatson@fb.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: linux-kselftest@vger.kernel.org Cc: "H . Peter Anvin" <hpa@zytor.com> Cc: Chris Lameter <cl@linux.com> Cc: Russell King <linux@arm.linux.org.uk> Cc: Michael Kerrisk <mtk.manpages@gmail.com> Cc: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com> Cc: Paul Turner <pjt@google.com> Cc: Boqun Feng <boqun.feng@gmail.com> Cc: Josh Triplett <josh@joshtriplett.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Ben Maurer <bmaurer@fb.com> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> --- tools/testing/selftests/rseq/param_test.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/rseq/param_test.c b/tools/testing/selftests/rseq/param_test.c index 615252331813..4bc071525bf7 100644 --- a/tools/testing/selftests/rseq/param_test.c +++ b/tools/testing/selftests/rseq/param_test.c @@ -56,15 +56,13 @@ unsigned int yield_mod_cnt, nr_abort; printf(fmt, ## __VA_ARGS__); \ } while (0) -#if defined(__x86_64__) || defined(__i386__) +#ifdef __i386__ #define INJECT_ASM_REG "eax" #define RSEQ_INJECT_CLOBBER \ , INJECT_ASM_REG -#ifdef __i386__ - #define RSEQ_INJECT_ASM(n) \ "mov asm_loop_cnt_" #n ", %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ @@ -76,9 +74,16 @@ unsigned int yield_mod_cnt, nr_abort; #elif defined(__x86_64__) +#define INJECT_ASM_REG_P "rax" +#define INJECT_ASM_REG "eax" + +#define RSEQ_INJECT_CLOBBER \ + , INJECT_ASM_REG_P \ + , INJECT_ASM_REG + #define RSEQ_INJECT_ASM(n) \ - "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG "\n\t" \ - "mov (%%" INJECT_ASM_REG "), %%" INJECT_ASM_REG "\n\t" \ + "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG_P "\n\t" \ + "mov (%%" INJECT_ASM_REG_P "), %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ "jz 333f\n\t" \ "222:\n\t" \ @@ -86,10 +91,6 @@ unsigned int yield_mod_cnt, nr_abort; "jnz 222b\n\t" \ "333:\n\t" -#else -#error "Unsupported architecture" -#endif - #elif defined(__ARMEL__) #define RSEQ_INJECT_INPUT \ -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:04 ` Mathieu Desnoyers 0 siblings, 0 replies; 9+ messages in thread From: Mathieu Desnoyers @ 2018-10-04 19:04 UTC (permalink / raw) commit ce01a1575f45bf319e374592656441021a7f5823 upstream. On x86-64, the parametrized selftest code for rseq crashes with a segmentation fault when compiled with -fpie. This happens when the param_test binary is loaded at an address beyond 32-bit on x86-64. The issue is caused by use of a 32-bit register to hold the address of the loop counter variable. Fix this by using a 64-bit register to calculate the address of the loop counter variables as an offset from rip. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> Acked-by: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Cc: <stable at vger.kernel.org> # v4.18 Cc: Shuah Khan <shuah at kernel.org> Cc: Thomas Gleixner <tglx at linutronix.de> Cc: Joel Fernandes <joelaf at google.com> Cc: Peter Zijlstra <peterz at infradead.org> Cc: Catalin Marinas <catalin.marinas at arm.com> Cc: Dave Watson <davejwatson at fb.com> Cc: Will Deacon <will.deacon at arm.com> Cc: Andi Kleen <andi at firstfloor.org> Cc: linux-kselftest at vger.kernel.org Cc: "H . Peter Anvin" <hpa at zytor.com> Cc: Chris Lameter <cl at linux.com> Cc: Russell King <linux at arm.linux.org.uk> Cc: Michael Kerrisk <mtk.manpages at gmail.com> Cc: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Cc: Paul Turner <pjt at google.com> Cc: Boqun Feng <boqun.feng at gmail.com> Cc: Josh Triplett <josh at joshtriplett.org> Cc: Steven Rostedt <rostedt at goodmis.org> Cc: Ben Maurer <bmaurer at fb.com> Cc: Andy Lutomirski <luto at amacapital.net> Cc: Andrew Morton <akpm at linux-foundation.org> Cc: Linus Torvalds <torvalds at linux-foundation.org> --- tools/testing/selftests/rseq/param_test.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/rseq/param_test.c b/tools/testing/selftests/rseq/param_test.c index 615252331813..4bc071525bf7 100644 --- a/tools/testing/selftests/rseq/param_test.c +++ b/tools/testing/selftests/rseq/param_test.c @@ -56,15 +56,13 @@ unsigned int yield_mod_cnt, nr_abort; printf(fmt, ## __VA_ARGS__); \ } while (0) -#if defined(__x86_64__) || defined(__i386__) +#ifdef __i386__ #define INJECT_ASM_REG "eax" #define RSEQ_INJECT_CLOBBER \ , INJECT_ASM_REG -#ifdef __i386__ - #define RSEQ_INJECT_ASM(n) \ "mov asm_loop_cnt_" #n ", %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ @@ -76,9 +74,16 @@ unsigned int yield_mod_cnt, nr_abort; #elif defined(__x86_64__) +#define INJECT_ASM_REG_P "rax" +#define INJECT_ASM_REG "eax" + +#define RSEQ_INJECT_CLOBBER \ + , INJECT_ASM_REG_P \ + , INJECT_ASM_REG + #define RSEQ_INJECT_ASM(n) \ - "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG "\n\t" \ - "mov (%%" INJECT_ASM_REG "), %%" INJECT_ASM_REG "\n\t" \ + "lea asm_loop_cnt_" #n "(%%rip), %%" INJECT_ASM_REG_P "\n\t" \ + "mov (%%" INJECT_ASM_REG_P "), %%" INJECT_ASM_REG "\n\t" \ "test %%" INJECT_ASM_REG ",%%" INJECT_ASM_REG "\n\t" \ "jz 333f\n\t" \ "222:\n\t" \ @@ -86,10 +91,6 @@ unsigned int yield_mod_cnt, nr_abort; "jnz 222b\n\t" \ "333:\n\t" -#else -#error "Unsupported architecture" -#endif - #elif defined(__ARMEL__) #define RSEQ_INJECT_INPUT \ -- 2.17.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:18 ` Shuah Khan 0 siblings, 0 replies; 9+ messages in thread From: shuah @ 2018-10-04 19:18 UTC (permalink / raw) On 10/04/2018 01:04 PM, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. > > On x86-64, the parametrized selftest code for rseq crashes with a > segmentation fault when compiled with -fpie. This happens when the > param_test binary is loaded at an address beyond 32-bit on x86-64. > > The issue is caused by use of a 32-bit register to hold the address > of the loop counter variable. > > Fix this by using a 64-bit register to calculate the address of the > loop counter variables as an offset from rip. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > Acked-by: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Thanks for q quick back-port. Acked-by: Shuah Khan (Samsung OSG) <shuah at kernel.org> thanks, -- Shuah ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:18 ` Shuah Khan 0 siblings, 0 replies; 9+ messages in thread From: Shuah Khan @ 2018-10-04 19:18 UTC (permalink / raw) To: Mathieu Desnoyers, stable, gregkh Cc: linux-kernel, Thomas Gleixner, Joel Fernandes, Peter Zijlstra, Catalin Marinas, Dave Watson, Will Deacon, Andi Kleen, linux-kselftest, H . Peter Anvin, Chris Lameter, Russell King, Michael Kerrisk, Paul E . McKenney, Paul Turner, Boqun Feng, Josh Triplett, Steven Rostedt, Ben Maurer, Andy Lutomirski, Andrew Morton, Linus Torvalds, Shuah Khan On 10/04/2018 01:04 PM, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. > > On x86-64, the parametrized selftest code for rseq crashes with a > segmentation fault when compiled with -fpie. This happens when the > param_test binary is loaded at an address beyond 32-bit on x86-64. > > The issue is caused by use of a 32-bit register to hold the address > of the loop counter variable. > > Fix this by using a 64-bit register to calculate the address of the > loop counter variables as an offset from rip. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Acked-by: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com> Thanks for q quick back-port. Acked-by: Shuah Khan (Samsung OSG) <shuah@kernel.org> thanks, -- Shuah ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:18 ` Shuah Khan 0 siblings, 0 replies; 9+ messages in thread From: Shuah Khan @ 2018-10-04 19:18 UTC (permalink / raw) On 10/04/2018 01:04 PM, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. > > On x86-64, the parametrized selftest code for rseq crashes with a > segmentation fault when compiled with -fpie. This happens when the > param_test binary is loaded at an address beyond 32-bit on x86-64. > > The issue is caused by use of a 32-bit register to hold the address > of the loop counter variable. > > Fix this by using a 64-bit register to calculate the address of the > loop counter variables as an offset from rip. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > Acked-by: "Paul E . McKenney" <paulmck at linux.vnet.ibm.com> Thanks for q quick back-port. Acked-by: Shuah Khan (Samsung OSG) <shuah at kernel.org> thanks, -- Shuah ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:29 ` Greg KH 0 siblings, 0 replies; 9+ messages in thread From: gregkh @ 2018-10-04 19:29 UTC (permalink / raw) On Thu, Oct 04, 2018 at 03:04:30PM -0400, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. Thanks, that worked. greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:29 ` Greg KH 0 siblings, 0 replies; 9+ messages in thread From: Greg KH @ 2018-10-04 19:29 UTC (permalink / raw) To: Mathieu Desnoyers Cc: stable, linux-kernel, Shuah Khan, Thomas Gleixner, Joel Fernandes, Peter Zijlstra, Catalin Marinas, Dave Watson, Will Deacon, Andi Kleen, linux-kselftest, H . Peter Anvin, Chris Lameter, Russell King, Michael Kerrisk, Paul E . McKenney, Paul Turner, Boqun Feng, Josh Triplett, Steven Rostedt, Ben Maurer, Andy Lutomirski, Andrew Morton, Linus Torvalds On Thu, Oct 04, 2018 at 03:04:30PM -0400, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. Thanks, that worked. greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie @ 2018-10-04 19:29 ` Greg KH 0 siblings, 0 replies; 9+ messages in thread From: Greg KH @ 2018-10-04 19:29 UTC (permalink / raw) On Thu, Oct 04, 2018@03:04:30PM -0400, Mathieu Desnoyers wrote: > commit ce01a1575f45bf319e374592656441021a7f5823 upstream. Thanks, that worked. greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-10-04 19:29 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-04 19:04 [PATCH backport for 4.18] rseq/selftests: fix parametrized test with -fpie mathieu.desnoyers 2018-10-04 19:04 ` Mathieu Desnoyers 2018-10-04 19:04 ` Mathieu Desnoyers 2018-10-04 19:18 ` shuah 2018-10-04 19:18 ` Shuah Khan 2018-10-04 19:18 ` Shuah Khan 2018-10-04 19:29 ` gregkh 2018-10-04 19:29 ` Greg KH 2018-10-04 19:29 ` Greg KH
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.