Patch "selftests/x86/mpx: Fix incorrect bounds with old _sigfault" has been added to the 4.15-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
selftests/x86/mpx: Fix incorrect bounds with old _sigfault
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
selftests-x86-mpx-fix-incorrect-bounds-with-old-_sigfault.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
961888b1d76d84efc66a8f5604b06ac12ac2f978Mon Sep 17 00:00:00 2001
From: Rui Wang <[email protected]>
Date: Mon, 18 Dec 2017 16:34:10 +0800
Subject: selftests/x86/mpx: Fix incorrect bounds with old _sigfault
From: Rui Wang <[email protected]>
commit 961888b1d76d84efc66a8f5604b06ac12ac2f978 upstream.
For distributions with old userspace header files, the _sigfault structure is different. mpx-mini-test fails with the following error:
[root@Purley]# mpx-mini-test_64 tabletest
XSAVE is supported by HW & OS
XSAVE processor supported state mask: 0x2ff
XSAVE OS supported state mask: 0x2ff
BNDREGS: size: 64 user: 1 supervisor: 0 aligned: 0
BNDCSR: size: 64 user: 1 supervisor: 0 aligned: 0
starting mpx bounds table test
ERROR: siginfo bounds do not match shadow bounds for register 0Fix it by using the correct offset of _lower/_upper in _sigfault. RHEL needs this patch to work.
--- tools/testing/selftests/x86/mpx-mini-test.c | 32 ++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-)
tools/testing/selftests/x86/mpx-mini-test.c +30 -2
@@ -315,11 +315,39 @@ static inline void *__si_bounds_upper(si return si->si_upper; }#else + +/* +* This deals with old version of _sigfault in some distros: +* + +old _sigfault: +struct { +void *si_addr; +} _sigfault; + +new _sigfault: +struct { +void __user *_addr; +int _trapno; +short _addr_lsb; +union { +struct { +void __user *_lower; +void __user *_upper; +} _addr_bnd; +__u32 _pkey; +}; +} _sigfault; +* +*/ +static inline void **__si_bounds_hack (siginfo_t *si) {void *sigfault = &si->_sifields._sigfault;void *end_sigfault = sigfault +sizeof (si->_sifields._sigfault); -void **__si_lower = end_sigfault; +int *trapno = (int *)end_sigfault; +/* skip _trapno and _addr_lsb */ +void **__si_lower = (void **)(trapno +2 );return __si_lower; }
@@ -331,7 +359,7 @@ static inline void *__si_bounds_lower(sistatic inline void *__si_bounds_upper (siginfo_t *si) { -return (*__si_bounds_hack (si)) +sizeof (void *); +return *(__si_bounds_hack (si) +1 ); }#endif
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/selftests-x86-mpx-fix-incorrect-bounds-with-old-_sigfault.patch