• Eugeniy Paltsev's avatar
    ARC: mm: SIGSEGV userspace trying to access kernel virtual memory · a8c715b4
    Eugeniy Paltsev authored
    As of today if userspace process tries to access a kernel virtual addres
    (0x7000_0000 to 0x7ffff_ffff) such that a legit kernel mapping already
    exists, that process hangs instead of being killed with SIGSEGV
    
    Fix that by ensuring that do_page_fault() handles kenrel vaddr only if
    in kernel mode.
    
    And given this, we can also simplify the code a bit. Now a vmalloc fault
    implies kernel mode so its failure (for some reason) can reuse the
    @no_context label and we can remove @bad_area_nosemaphore.
    
    Reproduce user test for original problem:
    
    ------------------------>8-----------------
     #include <stdlib.h>
     #include <stdint.h>
    
     int main(int argc, char *argv[])
     {
     	volatile uint32_t temp;
    
     	temp = *(uint32_t *)(0x70000000);
     }
    ------------------------>8-----------------
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarEugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    a8c715b4
fault.c 5.55 KB