Patch "x86/mm/pkeys: Fix fill_sig_info_pkey" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/mm/pkeys: Fix fill_sig_info_pkey
to the 4.9-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:
x86-mm-pkeys-fix-fill_sig_info_pkey.patch
and it can be found in the queue-4.9 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
beacd6f7ed5e2915959442245b3b2480c2e37490Mon Sep 17 00:00:00 2001
From: "Eric W. Biederman" <[email protected]>
Date: Fri, 12 Jan 2018 14:31:35 -0600
Subject: x86/mm/pkeys: Fix fill_sig_info_pkey
From: Eric W. Biederman <[email protected]>
commit beacd6f7ed5e2915959442245b3b2480c2e37490 upstream.
SEGV_PKUERR is a signal specific si_code which happens to have the same numeric value as several others: BUS_MCEERR_AR, ILL_ILLTRP, FPE_FLTOVF, TRAP_HWBKPT, CLD_TRAPPED, POLL_ERR, SEGV_THREAD_ID, as such it is not safe to just test the si_code the signal number must also be tested to prevent a false positive in fill_sig_info_pkey.
This error was by inspection, and BUS_MCEERR_AR appears to be a real candidate for confusion. So pass in si_signo and check for SIG_SEGV to verify that it is actually a SEGV_PKUERR
--- arch/x86/mm/fault.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
arch/x86/mm/fault.c +4 -3
@@ -191,14 +191,15 @@ is_prefetch(struct pt_regs *regs, unsign* 6. T1 : reaches here, sees vma_pkey(vma)=5, when we really * faulted on a pte with its pkey=4. */ -static void fill_sig_info_pkey (int si_code,siginfo_t *info,u32 *pkey) +static void fill_sig_info_pkey (int si_signo,int si_code,siginfo_t *info, +u32 *pkey) {/* This is effectively an #ifdef */ if (!boot_cpu_has (X86_FEATURE_OSPKE ))return ;/* Fault not from Protection Keys: nothing to do */ -if (si_code !=SEGV_PKUERR ) +if ((si_code !=SEGV_PKUERR ) || (si_signo !=SIGSEGV ))return ;/* * force_sig_info_fault() is called from a number of
@@ -237,7 +238,7 @@ force_sig_info_fault(int si_signo, int s lsb =PAGE_SHIFT ; info.si_addr_lsb = lsb; -fill_sig_info_pkey (si_code, &info, pkey); +fill_sig_info_pkey (si_signo, si_code, &info, pkey);force_sig_info (si_signo, &info, tsk); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/x86-mm-pkeys-fix-fill_sig_info_pkey.patch