[PATCH 0/5 v15] KASan for Arm
Florian Fainelli
f.fainelli at gmail.com
Mon Oct 12 23:22:28 EDT 2020
On 10/12/2020 2:56 PM, Linus Walleij wrote:
> This is the 15th iteration of KASan for ARM/Aarch32.
>
> I dropped my fix in the beginning of the series for
> Ard's more elaborate and thorough fix moving the DTB
> out of the kernel linear mapped region and into its own
> part of the memory.
>
> This fixes my particular issue on the Qualcomm APQ8060
> and I hope it may also solve Florian's issue and what
> Ard has been seeing. KASan should be working with
> pretty much everything you throw on it, unless you
> do what I did and ran it on a 64MB system, where
> under some load it can run into the OOM killer for
> obvious reasons.
>
> You are encouraged to test this patch set to find memory out
> of bounds bugs with ARM32 platforms and drivers.
>
> There is a git branch you can pull in:
> https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator.git/log/?h=kasan
>
> This branch includes Ard's two patches.
>
> As Ard's patches are in Russell's patch tracker I will
> put these there as well if it now works for everyone.
Tested-by: Florian Fainelli <f.fainelli at gmail.com>
On Brahma-B15 (ARMv7 LPAE) and Brahma-B53 (ARMv8 in AArch32, also with
LPAE). The 3 Cortex-A72 devices that I have access to all fail with the
following (not related to the CPU type, more to the memory map) which I
am hoping to track down later this week, I would not consider those
failures to be a blocker at this point.
Thanks a lot for your persistence working on this Linus, and Ard!
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.9.0-gdf4dd84a3f7d
(fainelli at fainelli-desktop) (arm-linux-gcc (GCC) 8.3.0, GNU ld (GNU
Binutils) 2.32) #16 SMP Mon Oct 12 20:01:43 PDT 2020
[ 0.000000] CPU: ARMv7 Processor [410fd083] revision 3 (ARMv7),
cr=30c5383d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction
cache
[ 0.000000] OF: fdt: Machine model: BCM972112SV
[ 0.000000] earlycon: pl11 at MMIO 0x000000047e201000 (options '115200')
[ 0.000000] printk: bootconsole [pl11] enabled
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] cma: Reserved 16 MiB at 0x000000007f000000
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000000000-0x000000002fffffff]
[ 0.000000] Normal empty
[ 0.000000] HighMem [mem 0x0000000030000000-0x000000007fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x00000000063fdfff]
[ 0.000000] node 0: [mem 0x0000000006400000-0x000000000fffffff]
[ 0.000000] node 0: [mem 0x0000000010400000-0x000000007fffffff]
[ 0.000000] Zeroed struct page in unavailable ranges: 2 pages
[ 0.000000] Initmem setup node 0 [mem
0x0000000000000000-0x000000007fffffff]
[ 0.000000] kasan: Mapping kernel virtual memory block:
c0000000-c63fe000 at shadow: b7000000-b7c7fc00
[ 0.000000] Kernel panic - not syncing: kasan_pte_populate failed to
alloc pte for address 0xe2806000
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted
5.9.0-gdf4dd84a3f7d #16
[ 0.000000] Hardware name: Broadcom STB (Flattened Device Tree)
[ 0.000000] Backtrace:
[ 0.000000] [<c02120b4>] (dump_backtrace) from [<c02123d8>]
(show_stack+0x20/0x24)
[ 0.000000] r9:ffffffff r8:00000080 r7:c298e3c0 r6:600000d3
r5:00000000 r4:c298e3c0
[ 0.000000] [<c02123b8>] (show_stack) from [<c08852a0>]
(dump_stack+0xbc/0xe0)
[ 0.000000] [<c08851e4>] (dump_stack) from [<c022fbec>]
(panic+0x19c/0x3e4)
[ 0.000000] r10:e2806000 r9:c2b790e0 r8:c166b410 r7:c2803d80
r6:00000000 r5:c2b7de80
[ 0.000000] r4:c2b78e20 r3:00000001
[ 0.000000] [<c022fa50>] (panic) from [<c180b960>]
(kasan_pgd_populate+0x1ac/0x26c)
[ 0.000000] r3:00000000 r2:e2806000 r1:c12126d4 r0:c166b410
[ 0.000000] r7:b7c7fc00
[ 0.000000] [<c180b7b4>] (kasan_pgd_populate) from [<c180ba78>]
(create_mapping+0x58/0x64)
[ 0.000000] r10:c166b4e4 r9:00000000 r8:063fe000 r7:c2ba0a40
r6:c28a24e0 r5:b7000000
[ 0.000000] r4:b7c7fc00
[ 0.000000] [<c180ba20>] (create_mapping) from [<c180bd58>]
(kasan_init+0x26c/0x390)
[ 0.000000] r5:00000000 r4:c0000000
[ 0.000000] [<c180baec>] (kasan_init) from [<c1805728>]
(setup_arch+0x288/0xa28)
[ 0.000000] r10:c1861238 r9:410fd083 r8:c0008000 r7:c1873a40
r6:c2803fbc r5:c2fdcf60
[ 0.000000] r4:c28a2280
[ 0.000000] [<c18054a0>] (setup_arch) from [<c1801010>]
(start_kernel+0x88/0x3e4)
[ 0.000000] r10:c2806d40 r9:410fd083 r8:0e415000 r7:ffffffff
r6:30c0387d r5:c2806d48
[ 0.000000] r4:00007000
[ 0.000000] [<c1800f88>] (start_kernel) from [<00000000>] (0x0)
[ 0.000000] r10:30c5387d r9:410fd083 r8:0e415000 r7:ffffffff
r6:30c0387d r5:00000000
[ 0.000000] r4:c1800334
[ 0.000000] ---[ end Kernel panic - not syncing: kasan_pte_populate
failed to alloc pte for address 0xe2806000 ]---
>
> Abbott Liu (1):
> ARM: Define the virtual space of KASan's shadow region
>
> Andrey Ryabinin (3):
> ARM: Disable KASan instrumentation for some code
> ARM: Replace string mem* functions for KASan
> ARM: Enable KASan for ARM
>
> Linus Walleij (1):
> ARM: Initialize the mapping of KASan shadow memory
>
> Documentation/arm/memory.rst | 5 +
> Documentation/dev-tools/kasan.rst | 4 +-
> .../features/debug/KASAN/arch-support.txt | 2 +-
> arch/arm/Kconfig | 10 +
> arch/arm/boot/compressed/Makefile | 1 +
> arch/arm/boot/compressed/string.c | 19 ++
> arch/arm/include/asm/kasan.h | 33 ++
> arch/arm/include/asm/kasan_def.h | 81 +++++
> arch/arm/include/asm/memory.h | 5 +
> arch/arm/include/asm/pgalloc.h | 8 +-
> arch/arm/include/asm/string.h | 21 ++
> arch/arm/include/asm/thread_info.h | 8 +
> arch/arm/include/asm/uaccess-asm.h | 2 +-
> arch/arm/kernel/entry-armv.S | 3 +-
> arch/arm/kernel/entry-common.S | 9 +-
> arch/arm/kernel/head-common.S | 7 +-
> arch/arm/kernel/setup.c | 2 +
> arch/arm/kernel/unwind.c | 6 +-
> arch/arm/lib/memcpy.S | 3 +
> arch/arm/lib/memmove.S | 5 +-
> arch/arm/lib/memset.S | 3 +
> arch/arm/mm/Makefile | 5 +
> arch/arm/mm/kasan_init.c | 284 ++++++++++++++++++
> arch/arm/mm/mmu.c | 18 ++
> arch/arm/mm/pgd.c | 16 +-
> arch/arm/vdso/Makefile | 2 +
> 26 files changed, 548 insertions(+), 14 deletions(-)
> create mode 100644 arch/arm/include/asm/kasan.h
> create mode 100644 arch/arm/include/asm/kasan_def.h
> create mode 100644 arch/arm/mm/kasan_init.c
>
--
Florian
More information about the linux-arm-kernel
mailing list