From: Linus Torvalds Date: Fri, 13 Aug 2010 16:49:20 +0000 (-0700) Subject: x86: don't send SIGBUS for kernel page faults X-Git-Tag: v2.6.36-rc1~46 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=96054569190bdec375fe824e48ca1f4e3b53dd36;p=~shefty%2Frdma-dev.git x86: don't send SIGBUS for kernel page faults It's wrong for several reasons, but the most direct one is that the fault may be for the stack accesses to set up a previous SIGBUS. When we have a kernel exception, the kernel exception handler does all the fixups, not some user-level signal handler. Even apart from the nested SIGBUS issue, it's also wrong to give out kernel fault addresses in the signal handler info block, or to send a SIGBUS when a system call already returns EFAULT. Signed-off-by: Linus Torvalds --- diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index f62777940df..4c4508e8a20 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -802,8 +802,10 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, up_read(&mm->mmap_sem); /* Kernel mode? Handle exceptions or die: */ - if (!(error_code & PF_USER)) + if (!(error_code & PF_USER)) { no_context(regs, error_code, address); + return; + } /* User-space => ok to do another page fault: */ if (is_prefetch(regs, error_code, address))