linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Nathan Chancellor <natechancellor@gmail.com>
To: Ard Biesheuvel <ardb@kernel.org>
Cc: Florian Fainelli <f.fainelli@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Abbott Liu <liuwenliang@huawei.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Russell King <linux@armlinux.org.uk>,
	Mike Rapoport <rppt@linux.ibm.com>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Will Deacon <will@kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 0/5 v16] KASan for Arm
Date: Fri, 30 Oct 2020 01:45:19 -0700	[thread overview]
Message-ID: <20201030084519.GA3748061@ubuntu-m3-large-x86> (raw)
In-Reply-To: <CAMj1kXEMUrJnyTzJQaA0e15h54fAT5_Q6w5OiBFrjGmhZ10eEw@mail.gmail.com>

On Fri, Oct 30, 2020 at 09:10:56AM +0100, Ard Biesheuvel wrote:
> On Fri, 30 Oct 2020 at 09:04, Nathan Chancellor
> <natechancellor@gmail.com> wrote:
> >
> > On Fri, Oct 30, 2020 at 08:58:20AM +0100, Ard Biesheuvel wrote:
> > > On Fri, 30 Oct 2020 at 08:57, Nathan Chancellor
> > > <natechancellor@gmail.com> wrote:
> > > >
> > > > On Fri, Oct 30, 2020 at 08:52:53AM +0100, Ard Biesheuvel wrote:
> > > > > On Fri, 30 Oct 2020 at 02:32, Nathan Chancellor
> > > > > <natechancellor@gmail.com> wrote:
> > > > > >
> > > > > > On Thu, Oct 29, 2020 at 05:38:22PM -0700, Nick Desaulniers wrote:
> > > > > > > On Thu, Oct 29, 2020 at 5:29 PM Nathan Chancellor
> > > > > > > <natechancellor@gmail.com> wrote:
> > > > > > > >
> > > > > > > > On Mon, Oct 19, 2020 at 10:41:35AM +0200, Linus Walleij wrote:
> > > > > > > > > This is the 16th and final (knock on wood) version of
> > > > > > > > > KASan for ARM32.
> > > > > > > > >
> > > > > > > > > Changes since v15:
> > > > > > > > >
> > > > > > > > > - Things now work on all boards we have tested on including
> > > > > > > > >   Broadcom and i.MX6Q.
> > > > > > > > >
> > > > > > > > > - Folded in a fix from Ard to PAGE_ALIGN() the end of
> > > > > > > > >   mappings making everything work on all Broadcom board.
> > > > > > > > >
> > > > > > > > > - Folded in a fix from Ahmad Fatoum making things work
> > > > > > > > >   with fortify on i.MX6Q.
> > > > > > > > >
> > > > > > > > > - Testing and testing and testing on build servers.
> > > > > > > > >
> > > > > > > > > - We are good to go.
> > > > > > > > >
> > > > > > > > > I will now put this in Russell's patch tracker for v5.11.
> > > > > > > > >
> > > > > > > > > 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 already in Russell's
> > > > > > > > > patch tracker.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > 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                 |  26 ++
> > > > > > > > >  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                      | 292 ++++++++++++++++++
> > > > > > > > >  arch/arm/mm/mmu.c                             |  18 ++
> > > > > > > > >  arch/arm/mm/pgd.c                             |  16 +-
> > > > > > > > >  arch/arm/vdso/Makefile                        |   2 +
> > > > > > > > >  26 files changed, 561 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
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > 2.26.2
> > > > > > > > >
> > > > > > > >
> > > > > > > > After this series was applied and available in -next, ARCH=arm LLVM=1
> > > > > > > > allyesconfig builds started failing:
> > > > > > > >
> > > > > > > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- KCONFIG_ALLCONFIG=<(echo CONFIG_CPU_BIG_ENDIAN=n) LLVM=1 distclean allyesconfig vmlinux
> > > > > > > > ...
> > > > > > > > ld.lld: error: section: .exit.data is not contiguous with other relro sections
> > > > > > > > ...
> > > > > > > >
> > > > > > > > $ git bisect ld: [3f267ec60b922eff2a5c90d532357a39f155b730] Add linux-next specific files for 20201029
> > > > > > > > # good: [23859ae44402f4d935b9ee548135dd1e65e2cbf4] Merge tag 'trace-v5.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
> > > > > > > > git bisect start '3f267ec60b922eff2a5c90d532357a39f155b730' '23859ae44402f4d935b9ee548135dd1e65e2cbf4'
> > > > > > > > # bad: [bfa70a4ea4bfa6f87b58cf8b90b88297389c92b7] Merge remote-tracking branch 'mtd/mtd/next' into master
> > > > > > > > git bisect bad bfa70a4ea4bfa6f87b58cf8b90b88297389c92b7
> > > > > > > > # bad: [37a292dcf77532547f335ed5063d9169031c9b08] Merge remote-tracking branch 'sunxi/sunxi/for-next' into master
> > > > > > > > git bisect bad 37a292dcf77532547f335ed5063d9169031c9b08
> > > > > > > > # good: [e6d922c77db276a16f0b7933c2a9951dc9c0052c] Merge remote-tracking branch 'drm-misc-fixes/for-linux-next-fixes' into master
> > > > > > > > git bisect good e6d922c77db276a16f0b7933c2a9951dc9c0052c
> > > > > > > > # bad: [cbe49fbb8f6c8d29bc1d9a5a9a742ef2c2eb6320] Merge remote-tracking branch 'mvebu/for-next' into master
> > > > > > > > git bisect bad cbe49fbb8f6c8d29bc1d9a5a9a742ef2c2eb6320
> > > > > > > > # bad: [d0e12484e7e1ede73c538744cdbe9439f7335d01] Merge remote-tracking branch 'arm-soc/for-next' into master
> > > > > > > > git bisect bad d0e12484e7e1ede73c538744cdbe9439f7335d01
> > > > > > > > # good: [24a23387c15f34bad2485a9e1c3b7ac6f0fb35a6] Merge branch 'asm-generic-cleanup' into asm-generic
> > > > > > > > git bisect good 24a23387c15f34bad2485a9e1c3b7ac6f0fb35a6
> > > > > > > > # good: [3a8eb4d3421a2ca0f95ac3b1a8f012940d4f0d52] Merge remote-tracking branch 'kbuild/for-next' into master
> > > > > > > > git bisect good 3a8eb4d3421a2ca0f95ac3b1a8f012940d4f0d52
> > > > > > > > # bad: [20f96e606509ee5084690179afe1810b95617a92] Merge branches 'fixes' and 'misc' into for-next
> > > > > > > > git bisect bad 20f96e606509ee5084690179afe1810b95617a92
> > > > > > > > # good: [d6d51a96c7d63b7450860a3037f2d62388286a52] ARM: 9014/2: Replace string mem* functions for KASan
> > > > > > > > git bisect good d6d51a96c7d63b7450860a3037f2d62388286a52
> > > > > > > > # good: [5615f69bc2097452ecc954f5264d784e158d6801] ARM: 9016/2: Initialize the mapping of KASan shadow memory
> > > > > > > > git bisect good 5615f69bc2097452ecc954f5264d784e158d6801
> > > > > > > > # bad: [fc2933c133744305236793025b00c2f7d258b687] ARM: 9020/1: mm: use correct section size macro to describe the FDT virtual address
> > > > > > > > git bisect bad fc2933c133744305236793025b00c2f7d258b687
> > > > > > > > # bad: [421015713b306e47af95d4d61cdfbd96d462e4cb] ARM: 9017/2: Enable KASan for ARM
> > > > > > > > git bisect bad 421015713b306e47af95d4d61cdfbd96d462e4cb
> > > > > > > > # first bad commit: [421015713b306e47af95d4d61cdfbd96d462e4cb] ARM: 9017/2: Enable KASan for ARMog
> > > > > > > >
> > > > > > > > An allyesconfig kernel compiled with clang does not link properly with
> > > > > > > > ld.bfd without a workaround [1], which I do not have time to apply and
> > > > > > > > test now but can later if it is relevant. I have not done any triage on
> > > > > > > > this yet either but I wanted to get the report out in case there is
> > > > > > > > anything obvious.
> > > > > > > >
> > > > > > > > [1]: https://github.com/ClangBuiltLinux/linux/issues/325
> > > > > > >
> > > > > > > relro? smells like:
> > > > > > > https://lore.kernel.org/lkml/20201016175339.2429280-1-ndesaulniers@google.com/T/#u
> > > > > > >
> > > > > >
> > > > > > Huh, did not even realize that the error messages were the same, my bad!
> > > > > >
> > > > > > This issue is simple enough to produce by just adding CONFIG_KASAN=y to
> > > > > > multi_v7_defconfig. I tried adding '-z norelro' to LDFLAGS_vmlinux in
> > > > > > arch/arm/Makefile and it fixes the build error but the resulting kernel
> > > > > > does not boot in QEMU.
> > > > > >
> > > > > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 distclean defconfig
> > > > > >
> > > > > > $ scripts/config -e KASAN
> > > > > >
> > > > > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 olddefconfig zImage
> > > > > >
> > > > > > $ ~/cbl/github/boot-utils/boot-qemu.sh -a arm32_v7 -k .
> > > > > > /home/nathan/cbl/github/boot-utils/images/arm/rootfs.cpio.zst: 3176448 bytes
> > > > > > + timeout --foreground 3m unbuffer qemu-system-arm -machine virt -no-reboot -append 'console=ttyAMA0 ' -display none -initrd /home/nathan/cbl/github/boot-utils/images/arm/rootfs.cpio -kernel /home/nathan/src/linux-next/arch/arm/boot/zImage -m 512m -nodefaults -serial mon:stdio
> > > > > > + RET=124
> > > > > > + set +x
> > > > > >
> > > > > > '-z norelro' boots fine without KASAN so I assume there is something up
> > > > > > specifically with KASAN and LLVM for ARM.
> > > > > >
> > > > >
> > > > > How long did you wait for it to boot? Booting a KASAN kernel under
> > > > > QEMU emulation is going to be *very* slow.
> > > >
> > > > The timeout command above is 3m and there was no output from the kernel
> > > > in that amount of time. What kind of time should I be reasonably
> > > > expecting?
> > > >
> > >
> > > 3 minutes is probably long enough.
> > >
> > > Do you see any output with 'earlycon=pl011,0x9000000' added to the
> > > kernel command line?
> >
> > Yes.
> >
> > $ ~/cbl/github/boot-utils/boot-qemu.sh -a arm32_v7 -k .
> > /home/nathan/cbl/github/boot-utils/images/arm/rootfs.cpio.zst: 3176448 bytes
> > + timeout --foreground 3m unbuffer qemu-system-arm -machine virt -no-reboot -append 'console=ttyAMA0 earlycon=pl011,0x9000000 ' -display none -initrd /home/nathan/cbl/github/boot-utils/images/arm/rootfs.cpio -kernel /home/nathan/src/linux-next/arch/arm/boot/zImage -m 512m -nodefaults -serial mon:stdio
> > [    0.000000] Booting Linux on physical CPU 0x0
> > [    0.000000] Linux version 5.10.0-rc1-next-20201029-dirty (nathan@ubuntu-m3-large-x86) (ClangBuiltLinux clang version 12.0.0 (https://github.com/llvm/llvm-project 1df8d7b4f23da304061bf30b617132f8ba9ab80a), LLD 12.0.0 (https://github.com/llvm/llvm-project 1df8d7b4f23da304061bf30b617132f8ba9ab80a)) #1 SMP Thu Oct 29 18:26:00 MST 2020
> > [    0.000000] CPU: ARMv7 Processor [412fc0f1] revision 1 (ARMv7), cr=10c5387d
> > [    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: linux,dummy-virt
> > [    0.000000] earlycon: pl11 at MMIO 0x09000000 (options '')
> > [    0.000000] printk: bootconsole [pl11] enabled
> > [    0.000000] Memory policy: Data cache writealloc
> > [    0.000000] efi: UEFI not found.
> > [    0.000000] cma: Reserved 64 MiB at 0x5c000000
> > [    0.000000] Zone ranges:
> > [    0.000000]   DMA      [mem 0x0000000040000000-0x000000005fffffff]
> > [    0.000000]   Normal   empty
> > [    0.000000]   HighMem  empty
> > [    0.000000] Movable zone start for each node
> > [    0.000000] Early memory node ranges
> > [    0.000000]   node   0: [mem 0x0000000040000000-0x000000005fffffff]
> > [    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000005fffffff]
> > [    0.000000] kasan: Mapping kernel virtual memory block: c0000000-e0000000 at shadow: b7000000-bb000000
> > [    0.000000] kasan: Mapping kernel virtual memory block: bf000000-c0000000 at shadow: b6e00000-b7000000
> > [    0.000000] kasan: Kernel address sanitizer initialized
> > [    0.000000] psci: probing for conduit method from DT.
> > [    0.000000] psci: PSCIv0.2 detected in firmware.
> > [    0.000000] psci: Using standard PSCI v0.2 function IDs
> > [    0.000000] psci: Trusted OS migration not required
> > [    0.000000] percpu: Embedded 20 pages/cpu s49676 r8192 d24052 u81920
> > [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 130048
> > [    0.000000] Kernel command line: console=ttyAMA0 earlycon=pl011,0x9000000
> > [    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
> > [    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
> > [    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
> > [    0.000000] Memory: 329852K/524288K available (21504K kernel code, 8544K rwdata, 14676K rodata, 2048K init, 4843K bss, 128900K reserved, 65536K cma-reserved, 0K highmem)
> > [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
> > [    0.000000] rcu: Hierarchical RCU implementation.
> > [    0.000000] rcu:     RCU event tracing is enabled.
> > [    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=16 to nr_cpu_ids=1.
> > [    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
> > [    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
> > [    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
> > [    0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
> > [    0.000000] random: get_random_bytes called from start_kernel+0x208/0x3d0 with crng_init=0
> > [    0.000000] arch_timer: cp15 timer(s) running at 62.50MHz (virt).
> > [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
> > [    0.000156] sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns
> > [    0.000565] Switching to timer-based delay loop, resolution 16ns
> > [    0.006124] Console: colour dummy device 80x30
> > [    0.007840] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=625000)
> > [    0.011577] pid_max: default: 32768 minimum: 301
> > [    0.014889] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
> > [    0.015189] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
> > [    0.043926] CPU: Testing write buffer coherency: ok
> > [    0.045820] CPU0: Spectre v2: firmware did not set auxiliary control register IBE bit, system vulnerable
> > [    0.057716] /cpus/cpu@0 missing clock-frequency property
> > [    0.058105] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
> > [    0.070417] Setting up static identity map for 0x40300000 - 0x403000ac
> > [    0.075105] rcu: Hierarchical SRCU implementation.
> > [    0.084843] EFI services will not be available.
> > [    0.087124] smp: Bringing up secondary CPUs ...
> > [    0.087384] smp: Brought up 1 node, 1 CPU
> > [    0.087617] SMP: Total of 1 processors activated (125.00 BogoMIPS).
> > [    0.087878] CPU: All CPU(s) started in SVC mode.
> > [    0.105778] devtmpfs: initialized
> > [    0.283349] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0
> > [    0.310896] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
> > [    0.311679] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.312469] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.312803] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.313125] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.313445] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.313761] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.314082] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.314400] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.314718] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.315031] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.315338] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.315661] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.315979] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.316296] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.316608] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.316923] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.317234] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.317549] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.317860] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.318177] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.318493] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.318809] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.319133] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.319457] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.319774] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.320091] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.320593] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.320909] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.321220] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.321532] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.321844] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.322157] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.322475] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.322788] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.323098] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.323424] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.323738] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.324050] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.324358] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.324673] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.324988] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.325303] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.325624] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.325941] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.326255] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.326573] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.326883] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.327193] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.327510] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.327826] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.328138] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.328457] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.328767] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.329081] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.329400] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.329711] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.330021] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.330326] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.330780] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.331104] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.331417] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.331733] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.332054] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.332381] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.332696] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.333001] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.333320] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.333648] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.333964] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.334272] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.334580] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.334894] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.335212] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.335528] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.335846] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.336162] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.336482] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.336804] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.337124] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.337443] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.337761] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.338087] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.338414] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.338756] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.339074] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.339396] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.339737] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.340061] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.340379] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.340695] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.341161] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.341504] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.341843] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.342151] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.342492] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.342809] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.343129] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.343445] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.343761] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.344079] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.344410] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.344755] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.345066] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.345383] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.345719] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.346031] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.346350] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.346664] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.346976] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.347289] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.347642] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.347952] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.348275] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.348618] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.348930] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.349245] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.349563] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.349872] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.350191] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.350508] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.350832] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.351280] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.351632] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.351940] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.352257] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.352604] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.352918] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.353228] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.353543] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.353855] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.354170] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.354503] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.354833] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.355144] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.355477] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.355811] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.356133] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.356439] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.356757] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.357075] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.357381] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.357726] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.358037] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.358345] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.358663] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.358979] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.359287] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.359599] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.359911] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.360230] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.360549] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.360860] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.361313] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.361642] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.361953] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.362262] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.362578] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.362888] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.363205] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.363520] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.363821] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.364139] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.364445] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.364759] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.365070] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.365384] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.365695] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.366003] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.366306] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.366611] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.366924] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.367248] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.367569] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.367876] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.368197] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.368515] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.368829] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.369137] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.369454] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.369772] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.370079] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.370393] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.370709] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.371023] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.371490] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.371808] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.372122] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.372435] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> > [    0.372767] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
> >
> > Then there is no output after that.
> >
> 
> Ouch. This looks like futex_init() is being called over and over
> again, which is a core_initcall.
> 
> This will need some dissecting of the binary, but we need to figure
> out what is going on in the initcall dispatch code.
> 
> If you build with symbols, you should be able to run it in the
> debugger. Just set a breakpoint on futex_init() and step through the
> code until you can observe how/why it is being called a second time.

I have no idea how it is happening but futex_init keeps getting called
from within itself, if I am reading gdb right?

(gdb) hbreak futex_init
Hardware assisted breakpoint 1 at 0xc2727fac: file kernel/futex.c, line 4028.
(gdb) c
Continuing.

Breakpoint 1, futex_init () at kernel/futex.c:4028
4028    {
(gdb) n
4035            futex_hashsize = roundup_pow_of_two(256 * num_possible_cpus());
(gdb)
4038            futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
(gdb)
4035            futex_hashsize = roundup_pow_of_two(256 * num_possible_cpus());
(gdb)
4038            futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
(gdb)
4043            futex_hashsize = 1UL << futex_shift;
(gdb)
4045            futex_detect_cmpxchg();
(gdb)

Breakpoint 1, futex_init () at kernel/futex.c:4028
4028    {
(gdb)
4035            futex_hashsize = roundup_pow_of_two(256 * num_possible_cpus());
(gdb)
4038            futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
(gdb)
4035            futex_hashsize = roundup_pow_of_two(256 * num_possible_cpus());
(gdb)
4038            futex_queues = alloc_large_system_hash("futex", sizeof(*futex_queues),
(gdb)
4043            futex_hashsize = 1UL << futex_shift;
(gdb)
4045            futex_detect_cmpxchg();
(gdb)

If I step into futex_detect_cmpxchg(), I see us jump into vector_dabt
then back out futex_init.

(gdb) hbreak futex_init
Hardware assisted breakpoint 1 at 0xc2727fac: file kernel/futex.c, line 4028.
(gdb) hbreak futex_detect_cmpxchg
Hardware assisted breakpoint 2 at 0xc27280c8: file kernel/futex.c, line 4008.
(gdb) c
Continuing.

Breakpoint 1, futex_init () at kernel/futex.c:4028
4028    {
(gdb) c
Continuing.

Breakpoint 2, futex_detect_cmpxchg () at kernel/futex.c:4008
4008    {
(gdb) n
4022            if (cmpxchg_futex_value_locked(&curval, NULL, 0, 0) == -EFAULT)
(gdb)
vector_dabt () at arch/arm/kernel/entry-armv.S:1099
1099            vector_stub     dabt, ABT_MODE, 8
(gdb)
__dabt_svc () at arch/arm/kernel/entry-armv.S:194
194             svc_entry uaccess=0
(gdb)
__dabt_svc () at arch/arm/kernel/entry-armv.S:195
195             mov     r2, sp
(gdb)
196             dabt_helper
(gdb)
198             svc_exit r5                             @ return from exception
(gdb)
0xc0458040 in ?? ()
(gdb)
Cannot find bounds of current function
(gdb) finish
Run till exit from #0  0xc0458040 in ?? ()

Breakpoint 1, futex_init () at kernel/futex.c:4028
4028    {
(gdb)

I am going to be honest, I do not really understand what is going on
here but I am more than happy to provide whatever information is needed
to further explore this.

Cheers,
Nathan

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-10-30  8:47 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-19  8:41 [PATCH 0/5 v16] KASan for Arm Linus Walleij
2020-10-19  8:41 ` [PATCH 1/5 v16] ARM: Disable KASan instrumentation for some code Linus Walleij
2020-10-19  8:41 ` [PATCH 2/5 v16] ARM: Replace string mem* functions for KASan Linus Walleij
2020-11-06  7:49   ` Naresh Kamboju
2020-11-06  8:26     ` Linus Walleij
2020-11-06  8:28       ` Ard Biesheuvel
2020-11-06  9:44         ` Nathan Chancellor
2020-11-06 13:37           ` Linus Walleij
2020-11-06 15:15             ` Russell King - ARM Linux admin
2020-11-06 15:18               ` Ard Biesheuvel
2020-11-06 18:09               ` Nathan Chancellor
2020-11-09 16:02               ` Linus Walleij
2020-11-09 16:06                 ` Russell King - ARM Linux admin
2020-11-10 12:04                   ` Ard Biesheuvel
2020-11-12 13:51                     ` Linus Walleij
2020-11-12 15:05                       ` Ard Biesheuvel
2020-11-12 17:52                         ` Nathan Chancellor
2020-11-16 15:16                           ` Ard Biesheuvel
2020-11-09 16:05             ` Linus Walleij
2020-10-19  8:41 ` [PATCH 3/5 v16] ARM: Define the virtual space of KASan's shadow region Linus Walleij
2020-10-19  8:41 ` [PATCH 4/5 v16] ARM: Initialize the mapping of KASan shadow memory Linus Walleij
2020-10-19  8:54   ` Ard Biesheuvel
2020-10-19  9:34   ` Mike Rapoport
2020-10-19  9:42     ` Ard Biesheuvel
2020-10-19 10:04       ` Mike Rapoport
2020-10-19 12:57         ` Linus Walleij
2020-10-19  8:41 ` [PATCH 5/5 v16] ARM: Enable KASan for ARM Linus Walleij
2020-10-29 17:45 ` [PATCH 0/5 v16] KASan for Arm Dmitry Osipenko
2020-10-29 18:10   ` Ard Biesheuvel
2020-10-29 19:41     ` Dmitry Osipenko
2020-11-02 18:10     ` Dmitry Osipenko
2020-10-30  0:29 ` Nathan Chancellor
2020-10-30  0:38   ` Nick Desaulniers
2020-10-30  1:32     ` Nathan Chancellor
2020-10-30  7:52       ` Ard Biesheuvel
2020-10-30  7:56         ` Nathan Chancellor
2020-10-30  7:58           ` Ard Biesheuvel
2020-10-30  8:04             ` Nathan Chancellor
2020-10-30  8:10               ` Ard Biesheuvel
2020-10-30  8:45                 ` Nathan Chancellor [this message]
2020-10-30  8:51                   ` Arnd Bergmann
2020-10-30  9:09                     ` Nathan Chancellor
2020-11-05  0:30                       ` Fāng-ruì Sòng
2020-11-05  0:38                         ` Nick Desaulniers
2020-11-05  7:52                           ` Ard Biesheuvel
2020-11-05 10:24                             ` Mike Rapoport
2020-11-09 23:47       ` Nick Desaulniers
2020-11-10  1:56         ` [PATCH] ARM: Link with '-z norelro' Nathan Chancellor
2020-11-10  2:05           ` Nick Desaulniers
2020-11-10 18:49             ` Nick Desaulniers
2020-11-12  2:52               ` Nathan Chancellor
2020-12-02 23:05                 ` Nick Desaulniers
2020-11-05 22:10 ` [PATCH 0/5 v16] KASan for Arm Ahmad Fatoum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201030084519.GA3748061@ubuntu-m3-large-x86 \
    --to=natechancellor@gmail.com \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=aryabinin@virtuozzo.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=f.fainelli@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=liuwenliang@huawei.com \
    --cc=ndesaulniers@google.com \
    --cc=rppt@linux.ibm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).