WSL2-Linux-Kernel/arch/x86/mm
Jiashuo Liang d4ffd5df9d x86/fault: Fix wrong signal when vsyscall fails with pkey
The function __bad_area_nosemaphore() calls kernelmode_fixup_or_oops()
with the parameter @signal being actually @pkey, which will send a
signal numbered with the argument in @pkey.

This bug can be triggered when the kernel fails to access user-given
memory pages that are protected by a pkey, so it can go down the
do_user_addr_fault() path and pass the !user_mode() check in
__bad_area_nosemaphore().

Most cases will simply run the kernel fixup code to make an -EFAULT. But
when another condition current->thread.sig_on_uaccess_err is met, which
is only used to emulate vsyscall, the kernel will generate the wrong
signal.

Add a new parameter @pkey to kernelmode_fixup_or_oops() to fix this.

 [ bp: Massage commit message, fix build error as reported by the 0day
   bot: https://lkml.kernel.org/r/202109202245.APvuT8BX-lkp@intel.com ]

Fixes: 5042d40a26 ("x86/fault: Bypass no_context() for implicit kernel faults from usermode")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Jiashuo Liang <liangjs@pku.edu.cn>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://lkml.kernel.org/r/20210730030152.249106-1-liangjs@pku.edu.cn
2021-09-20 22:28:47 +02:00
..
pat x86/pat: Pass valid address to sanitize_phys() 2021-09-02 21:53:18 +02:00
Makefile
amdtopology.c
cpu_entry_area.c
debug_pagetables.c
dump_pagetables.c
extable.c x86/fpu: Mask PKRU from kernel XRSTOR[S] operations 2021-06-23 19:47:35 +02:00
fault.c x86/fault: Fix wrong signal when vsyscall fails with pkey 2021-09-20 22:28:47 +02:00
highmem_32.c x86/mm/highmem: Use generic kmap atomic implementation 2020-11-06 23:14:55 +01:00
hugetlbpage.c
ident_map.c
init.c memblock: make memblock_find_in_range method private 2021-09-03 09:58:17 -07:00
init_32.c mm/memory_hotplug: remove nid parameter from arch_remove_memory() 2021-09-08 11:50:23 -07:00
init_64.c A set of x86 fixes: 2021-09-19 13:29:36 -07:00
iomap_32.c io-mapping: Cleanup atomic iomap 2020-11-06 23:14:58 +01:00
ioremap.c x86/ioremap: Map EFI-reserved memory as encrypted for SEV 2021-06-08 16:26:55 +02:00
kasan_init_64.c memblock: introduce saner 'memblock_free_ptr()' interface 2021-09-14 13:23:22 -07:00
kaslr.c x86: Fix various typos in comments 2021-03-18 15:31:53 +01:00
kmmio.c x86: Fix various typos in comments 2021-03-18 15:31:53 +01:00
maccess.c
mem_encrypt.c ARM: 2021-05-01 10:14:08 -07:00
mem_encrypt_boot.S x86: Fix various typos in comments 2021-03-18 15:31:53 +01:00
mem_encrypt_identity.c x86/sev: Check SME/SEV support in CPUID first 2021-06-04 18:39:09 +02:00
mm_internal.h
mmap.c
mmio-mod.c x86/mmiotrace: Replace deprecated CPU-hotplug functions. 2021-08-10 14:46:27 +02:00
numa.c memblock: introduce saner 'memblock_free_ptr()' interface 2021-09-14 13:23:22 -07:00
numa_32.c
numa_64.c
numa_emulation.c memblock: introduce saner 'memblock_free_ptr()' interface 2021-09-14 13:23:22 -07:00
numa_internal.h
pf_in.c
pf_in.h
pgtable.c Revert "mm/pgtable: add stubs for {pmd/pub}_{set/clear}_huge" 2021-07-21 11:28:09 +01:00
pgtable_32.c
physaddr.c
physaddr.h
pkeys.c Fixes and improvements for FPU handling on x86: 2021-07-07 11:12:01 -07:00
pti.c x86/process/64: Move cpu_current_top_of_stack out of TSS 2021-03-28 22:40:10 +02:00
setup_nx.c
srat.c
testmmiotrace.c
tlb.c x86/mm: Prepare for opt-in based L1D flush in switch_mm() 2021-07-28 11:42:24 +02:00