lkml.org 
[lkml]   [2018]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v5 3/5] x86/fault: Attempt to fixup unhandled #PF on ENCLU before signaling
    Date
    Call fixup_sgx_enclu_exception() in the SIGSEGV and SIGBUS paths of
    the page fault handler immediately prior to signaling. If the fault
    is fixed, return cleanly and do not generate a signal.

    In the SIGSEGV flow, make sure the error code passed to userspace has
    been sanitized.

    Suggested-by: Andy Lutomirski <luto@amacapital.net>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/x86/mm/fault.c | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
    index fefeb745d21d..c6f5f77ffabd 100644
    --- a/arch/x86/mm/fault.c
    +++ b/arch/x86/mm/fault.c
    @@ -28,6 +28,7 @@
    #include <asm/mmu_context.h> /* vma_pkey() */
    #include <asm/efi.h> /* efi_recover_from_page_fault()*/
    #include <asm/desc.h> /* store_idt(), ... */
    +#include <asm/vdso.h> /* fixup_vdso_exception() */

    #define CREATE_TRACE_POINTS
    #include <asm/trace/exceptions.h>
    @@ -928,6 +929,9 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,

    sanitize_error_code(address, &error_code);

    + if (fixup_vdso_exception(regs, X86_TRAP_PF, error_code, address))
    + return;
    +
    if (likely(show_unhandled_signals))
    show_signal_msg(regs, error_code, address, tsk);

    @@ -1047,6 +1051,9 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,

    sanitize_error_code(address, &error_code);

    + if (fixup_vdso_exception(regs, X86_TRAP_PF, error_code, address))
    + return;
    +
    set_signal_archinfo(address, error_code);

    #ifdef CONFIG_MEMORY_FAILURE
    --
    2.19.2
    \
     
     \ /
      Last update: 2018-12-14 22:58    [W:4.651 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site