* Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote: > tip-bot for Dave Hansen <tipbot@xxxxxxxxx> writes: > > > Commit-ID: aa37c51b9421d66f7931c5fdcb9ce80c450974be > > Gitweb: https://git.kernel.org/tip/aa37c51b9421d66f7931c5fdcb9ce80c450974be > > Author: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> > > AuthorDate: Fri, 28 Sep 2018 09:02:23 -0700 > > Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > > CommitDate: Tue, 9 Oct 2018 16:51:15 +0200 > > > > x86/mm: Break out user address space handling > > > > The last patch broke out kernel address space handing into its own > > helper. Now, do the same for user address space handling. > > > > Cc: x86@xxxxxxxxxx > > Cc: Jann Horn <jannh@xxxxxxxxxx> > > Cc: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> > > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > > Cc: Andy Lutomirski <luto@xxxxxxxxxx> > > Signed-off-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > > Link: http://lkml.kernel.org/r/20180928160223.9C4F6440@xxxxxxxxxxxxxxxxxx > > --- > > arch/x86/mm/fault.c | 47 ++++++++++++++++++++++++++++------------------- > > 1 file changed, 28 insertions(+), 19 deletions(-) > > > > diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c > > index c7e32f453852..0d1f5d39fc63 100644 > > --- a/arch/x86/mm/fault.c > > +++ b/arch/x86/mm/fault.c > > @@ -966,6 +966,7 @@ bad_area_access_error(struct pt_regs *regs, unsigned long error_code, > > __bad_area(regs, error_code, address, vma, SEGV_ACCERR); > > } > > > > +/* Handle faults in the kernel portion of the address space */ > ^^^^^^ > I believe you mean the __user__ portion of the address space. > Given that the call chain is: > > do_user_addr_fault > handle_mm_fault > do_sigbus It's both: /* Handle faults in the kernel portion of the address space */ static void do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, u32 *pkey, unsigned int fault) { struct task_struct *tsk = current; int code = BUS_ADRERR; /* Kernel mode? Handle exceptions or die: */ if (!(error_code & X86_PF_USER)) { no_context(regs, error_code, address, SIGBUS, BUS_ADRERR); return; } /* User-space => ok to do another page fault: */ if (is_prefetch(regs, error_code, address)) return; tsk->thread.cr2 = address; tsk->thread.error_code = error_code; tsk->thread.trap_nr = X86_TRAP_PF; Note the X86_PF_USER check: that's what determines whether the fault was for user or system mappings. I agree that the comment is misleading and should be clarified. Thanks, Ingo
![]() |