Mark Rutland
800cb2e553
arm64: kasan: avoid pfn_to_nid() before page array is initialized
...
In arm64's kasan_init(), we use pfn_to_nid() to find the NUMA node a
span of memory is in, hoping to allocate shadow from the same NUMA node.
However, at this point, the page array has not been initialized, and
thus this is bogus.
Since commit:
f165b378bb ("mm: uninitialized struct page poisoning sanity")
... accessing fields of the page array results in a boot time Oops(),
highlighting this problem:
[ 0.000000] Unable to handle kernel paging request at virtual address dfff200000000000
[ 0.000000] Mem abort info:
[ 0.000000] ESR = 0x96000004
[ 0.000000] Exception class = DABT (current EL), IL = 32 bits
[ 0.000000] SET = 0, FnV = 0
[ 0.000000] EA = 0, S1PTW = 0
[ 0.000000] Data abort info:
[ 0.000000] ISV = 0, ISS = 0x00000004
[ 0.000000] CM = 0, WnR = 0
[ 0.000000] [dfff200000000000] address between user and kernel address ranges
[ 0.000000] Internal error: Oops: 96000004 [#1 ] PREEMPT SMP
[ 0.000000] Modules linked in:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.16.0-07317-gf165b378bbdf #42
[ 0.000000] Hardware name: ARM Juno development board (r1) (DT)
[ 0.000000] pstate: 80000085 (Nzcv daIf -PAN -UAO)
[ 0.000000] pc : __asan_load8+0x8c/0xa8
[ 0.000000] lr : __dump_page+0x3c/0x3b8
[ 0.000000] sp : ffff2000099b7ca0
[ 0.000000] x29: ffff2000099b7ca0 x28: ffff20000a1762c0
[ 0.000000] x27: ffff7e0000000000 x26: ffff2000099dd000
[ 0.000000] x25: ffff200009a3f960 x24: ffff200008f9c38c
[ 0.000000] x23: ffff20000a9d3000 x22: ffff200009735430
[ 0.000000] x21: fffffffffffffffe x20: ffff7e0001e50420
[ 0.000000] x19: ffff7e0001e50400 x18: 0000000000001840
[ 0.000000] x17: ffffffffffff8270 x16: 0000000000001840
[ 0.000000] x15: 0000000000001920 x14: 0000000000000004
[ 0.000000] x13: 0000000000000000 x12: 0000000000000800
[ 0.000000] x11: 1ffff0012d0f89ff x10: ffff10012d0f89ff
[ 0.000000] x9 : 0000000000000000 x8 : ffff8009687c5000
[ 0.000000] x7 : 0000000000000000 x6 : ffff10000f282000
[ 0.000000] x5 : 0000000000000040 x4 : fffffffffffffffe
[ 0.000000] x3 : 0000000000000000 x2 : dfff200000000000
[ 0.000000] x1 : 0000000000000005 x0 : 0000000000000000
[ 0.000000] Process swapper (pid: 0, stack limit = 0x (ptrval))
[ 0.000000] Call trace:
[ 0.000000] __asan_load8+0x8c/0xa8
[ 0.000000] __dump_page+0x3c/0x3b8
[ 0.000000] dump_page+0xc/0x18
[ 0.000000] kasan_init+0x2e8/0x5a8
[ 0.000000] setup_arch+0x294/0x71c
[ 0.000000] start_kernel+0xdc/0x500
[ 0.000000] Code: aa0403e0 9400063c 17ffffee d343fc00 (38e26800)
[ 0.000000] ---[ end trace 67064f0e9c0cc338 ]---
[ 0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
[ 0.000000] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
Let's fix this by using early_pfn_to_nid(), as other architectures do in
their kasan init code. Note that early_pfn_to_nid acquires the nid from
the memblock array, which we iterate over in kasan_init(), so this
should be fine.
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Fixes: 39d114ddc6 ("arm64: add KASAN support")
Cc: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2018-04-17 16:16:59 +01:00
arch
arm64: kasan: avoid pfn_to_nid() before page array is initialized
2018-04-17 16:16:59 +01:00
block
blk-mq: Revert "blk-mq: reimplement blk_mq_hw_queue_mapped"
2018-04-11 07:59:15 -06:00
certs
certs/blacklist_nohashes.c: fix const confusion in certs blacklist
2018-02-21 15:35:43 -08:00
crypto
Kbuild updates for v4.17 (2nd)
2018-04-15 17:21:30 -07:00
Documentation
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-04-15 16:12:35 -07:00
drivers
SCSI fixes on 20180415
2018-04-15 17:24:12 -07:00
firmware
fs
for-4.17-part2-tag
2018-04-15 18:08:35 -07:00
include
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-04-15 16:12:35 -07:00
init
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-04-15 16:12:35 -07:00
ipc
ipc/shm: fix use-after-free of shm file via remap_file_pages()
2018-04-13 17:10:27 -07:00
kernel
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-04-15 16:12:35 -07:00
lib
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-04-15 16:12:35 -07:00
LICENSES
mm
mm, slab: reschedule cache_reap() on the same CPU
2018-04-13 17:10:27 -07:00
net
Kbuild updates for v4.17 (2nd)
2018-04-15 17:21:30 -07:00
samples
remoteproc updates for v4.17
2018-04-10 12:09:27 -07:00
scripts
Kbuild updates for v4.17 (2nd)
2018-04-15 17:21:30 -07:00
security
+ Features
2018-04-13 15:38:53 -07:00
sound
amdgpu, omap and snd regression fix
2018-04-12 20:56:10 -07:00
tools
Kbuild updates for v4.17 (2nd)
2018-04-15 17:21:30 -07:00
usr
kbuild: rename built-in.o to built-in.a
2018-03-26 02:01:19 +09:00
virt
KVM/ARM updates for v4.17
2018-03-28 16:09:09 +02:00
.clang-format
clang-format: add configuration file
2018-04-11 10:28:35 -07:00
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
Kbuild updates for v4.17 (2nd)
2018-04-15 17:21:30 -07:00
.mailmap
Merge candidates for 4.17 merge window
2018-04-06 17:35:43 -07:00
COPYING
COPYING: use the new text with points to the license files
2018-03-23 12:41:45 -06:00
CREDITS
MAINTAINERS/CREDITS: Drop METAG ARCHITECTURE
2018-03-05 16:34:24 +00:00
Kbuild
Kconfig
MAINTAINERS
Changes to chrome-platform for v4.17
2018-04-13 16:20:36 -07:00
Makefile
Linux 4.17-rc1
2018-04-15 18:24:20 -07:00
README
Docs: Added a pointer to the formatted docs to README
2018-03-21 09:02:53 -06:00