On Sat, 9 Mar 2019 at 09:27, Eugeniu Rosca <roscaeuge...@gmail.com> wrote: > > v2019.04-rc3 sandbox U-Boot fails to boot when compiled with > -fsanitize=address and linked against -lasan, reporting [1]. > > Git bisecting shows that the issue is contributed by v2019.01 commit > 1678754f5e2c ("core: ofnode: Fix ofnode_get_addr_index function"). > > The root cause seems to be the mismatch between sizeof(u64) and > sizeof(fdt_size_t) on sandbox. Luckily, thanks to the fact that the > size argument of both of_get_address() and fdtdec_get_addr_size_fixed() > is optional, we can pass NULL in its place, avoiding the problem. > > [1] Backtrace reported by ASAN (gcc 8.1.0): > > $> ./u-boot -d arch/sandbox/dts/sandbox.dtb > [..] > ================================================================= > ==10998==ERROR: AddressSanitizer: stack-buffer-overflow on address > 0x7ffcc2331140 at pc 0x0000004eeeb0 bp 0x7ffcc2330f80 sp 0x7ffcc2330f70 > WRITE of size 8 at 0x7ffcc2331140 thread T0 > #0 0x4eeeaf in of_get_address drivers/core/of_addr.c:154 > #1 0x4f7441 in ofnode_get_addr_index drivers/core/ofnode.c:263 > #2 0x5b2a78 in sb_eth_ofdata_to_platdata drivers/net/sandbox.c:422 > #3 0x4dccd8 in device_probe drivers/core/device.c:407 > #4 0x753170 in eth_initialize net/eth-uclass.c:428 > #5 0x47d9bf in initr_net common/board_r.c:557 > #6 0x6bcfa7 in initcall_run_list lib/initcall.c:30 > #7 0x47e1fe in board_init_r common/board_r.c:859 > #8 0x4060e5 in main arch/sandbox/cpu/start.c:356 > #9 0x7fb8d135482f in __libc_start_main > (/lib/x86_64-linux-gnu/libc.so.6+0x2082f) > #10 0x40a3a8 in _start (/path/to/u-boot/u-boot+0x40a3a8) > > Address 0x7ffcc2331140 is located in stack of thread T0 at offset 32 in frame > #0 0x4f72b8 in ofnode_get_addr_index drivers/core/ofnode.c:255 > > This frame has 3 object(s): > [32, 36) 'size' <== Memory access at offset 32 partially overflows this > variable > [96, 100) 'flags' > [160, 168) 'node' > HINT: this may be a false positive if your program uses some custom stack > unwind mechanism or swapcontext > (longjmp and C++ exceptions *are* supported) > SUMMARY: AddressSanitizer: stack-buffer-overflow drivers/core/of_addr.c:154 > in of_get_address > Shadow bytes around the buggy address: > 0x10001845e1d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 0x10001845e1e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 0x10001845e1f0: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1 > 0x10001845e200: 04 f2 f2 f2 f2 f2 f2 f2 04 f2 f2 f2 f2 f2 f2 f2 > 0x10001845e210: 04 f2 f2 f2 f3 f3 f3 f3 00 00 00 00 00 00 00 00 > =>0x10001845e220: 00 00 00 00 f1 f1 f1 f1[04]f2 f2 f2 f2 f2 f2 f2 > 0x10001845e230: 04 f2 f2 f2 f2 f2 f2 f2 00 f2 f2 f2 f3 f3 f3 f3 > 0x10001845e240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 0x10001845e250: 00 00 00 00 f1 f1 f1 f1 00 00 f2 f2 f3 f3 f3 f3 > 0x10001845e260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 > 0x10001845e270: f1 f1 00 f2 f2 f2 f3 f3 f3 f3 00 00 00 00 00 00 > Shadow byte legend (one shadow byte represents 8 application bytes): > Addressable: 00 > Partially addressable: 01 02 03 04 05 06 07 > Heap left redzone: fa > Freed heap region: fd > Stack left redzone: f1 > Stack mid redzone: f2 > Stack right redzone: f3 > Stack after return: f5 > Stack use after scope: f8 > Global redzone: f9 > Global init order: f6 > Poisoned by user: f7 > Container overflow: fc > Array cookie: ac > Intra object redzone: bb > ASan internal: fe > Left alloca redzone: ca > Right alloca redzone: cb > ==10998==ABORTING > > 'To' list: > git log --since=1year drivers/core/ofnode.c | grep "\-by: .*@" | \ > sed 's/.*-by: //' | sort | uniq -c | sort -rn > 10 Simon Glass <s...@chromium.org> > 3 Mario Six <mario....@gdsys.cc> > 2 Martin Fuzzey <mfuz...@parkeon.com> > 2 Marek Vasut <marek.vasut+rene...@gmail.com> > 1 Tom Rini <tr...@konsulko.com> > 1 Masahiro Yamada <yamada.masah...@socionext.com> > 1 Keerthy <j-keer...@ti.com> > 1 Jens Wiklander <jens.wiklan...@linaro.org> > 1 Bin Meng <bmeng...@gmail.com> > > Fixes: 1678754f5e2c ("core: ofnode: Fix ofnode_get_addr_index function") > Signed-off-by: Eugeniu Rosca <ero...@de.adit-jv.com> > --- > drivers/core/ofnode.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass <s...@chromium.org> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot