SIGBUS running fwts on aarch64 kvm with kernel 4.11

Colin Ian King colin.king at canonical.com
Mon Jun 5 10:33:44 UTC 2017


On 05/06/17 11:00, Erico Nunes wrote:
> Hello,
> 
> While testing fwts on an aarch64 kvm system, I'm getting the following
> SIGBUS:
> 
> # fwts --version
> fwts, Version V17.05.00, 2017-05-24 04:04:59
> # fwts acpiinfo
> Running 1 tests, results appended to results.log
> Test: General ACPI information test.
>   Determine Kernel ACPI version.                          1 info only
> 
>   Determine machine's ACPI version.                                  :
> 33.3% |
> Caught SIGNAL 7 (Bus error), aborting.
> Backtrace:
> 0x0000ffffae1d9a80 /usr/lib/fwts/libfwts.so.1(+0x10a80)
> 
> 
> Backtrace:
> 
> Program received signal SIGBUS, Bus error.
> 0x0000ffffb77d0638 in memcpy () from target/lib64/libc.so.6
> (gdb) bt full
> #0  0x0000ffffb77d0638 in memcpy () from target/lib64/libc.so.6
> No symbol table info available.
> #1  0x0000ffffb7ef6488 in fwts_safe_memcpy (dst=0x8020080280200802,
> dst at entry=0xfffffffff900, src=0x8020080280200802,
>     src at entry=0xffffb7fef000, n=0, n at entry=36) at fwts_safe_mem.c:53
> No locals.
> #2  0x0000ffffb7ef64d8 in fwts_safe_memread
> (src=src at entry=0xffffb7fef000, n=n at entry=36) at fwts_safe_mem.c:63
>         buf = '\000' <repeats 22 times>,
> "\020\000\000\000\000\000\000\000\000\000\002\b \200"
> #3  0x0000ffffb7ee23f0 in fwts_acpi_get_rsdp (fw=fw at entry=0x4a9d40,
> addr=addr at entry=0x589b0000,
>     rsdp_len=0xfffffffff9b8, rsdp_len at entry=0xfffffffff9e8) at
> fwts_acpi_tables.c:155
>         mem = 0xffffb7fef000 <error: Cannot access memory at address
> 0xffffb7fef000>
>         rsdp = 0x0
> #4  0x0000ffffb7ee2a54 in fwts_acpi_load_tables_from_firmware
> (fw=fw at entry=0x4a9d40) at fwts_acpi_tables.c:450
>         rsdp = <optimized out>
>         xsdt = <optimized out>
>         rsdt = <optimized out>
>         header = <optimized out>
>         rsdp_addr = 0x589b0000
>         rsdp_len = 0
>         num_entries = <optimized out>
>         i = <optimized out>
> #5  0x0000ffffb7ee34dc in fwts_acpi_load_tables (fw=fw at entry=0x4a9d40)
> at fwts_acpi_tables.c:1213
>         ret = -1
>         require_fixup = false
> #6  0x0000ffffb7ee3580 in fwts_acpi_find_table (fw=fw at entry=0x4a9d40,
> name=name at entry=0x448ec0 "FACP",
>     which=which at entry=0, info=0xfffffffffa48, info at entry=0xfffffffffa58)
> at fwts_acpi_tables.c:1256
>         ret = <optimized out>
>         i = <optimized out>
> #7  0x000000000040511c in acpiinfo_test2 (fw=0x4a9d40) at
> acpi/acpiinfo/acpiinfo.c:108
>         table = 0x0
>         fadt = <optimized out>
>         major = <optimized out>
>         minor = 0 '\000'
> #8  0x0000ffffb7ee9ef8 in fwts_framework_run_test (fw=fw at entry=0x4a9d40,
> test=0x4a7e30) at fwts_framework.c:672
>         minor_test = 0x493c28 <acpiinfo_tests+16>
>         ret = <optimized out>
> #9  0x0000ffffb7eea1b8 in fwts_framework_tests_run (fw=fw at entry=0x4a9d40,
>     tests_to_run=tests_to_run at entry=0xfffffffffbd8) at fwts_framework.c:733
>         test = <optimized out>
>         item = 0x4aa250
> #10 0x0000ffffb7eeb290 in fwts_framework_args (argc=argc at entry=2,
> argv=argv at entry=0xfffffffffd58)
>     at fwts_framework.c:1596
>         ret = 0
>         i = <optimized out>
>         tests_to_run = {head = 0x4aa250, tail = 0x4aa250, len = 1}
>         fw = 0x4a9d40
>         item = <optimized out>
> #11 0x00000000004048dc in main (argc=2, argv=0xfffffffffd58) at main.c:29
> No locals.
> 
> 
> 
> I knew that this was not happening recently, I found out that it was
> between the kernel update from 4.10 to 4.11 and I was able to bisect it
> to the following kernel commit from v4.11-rc6:
> 
> 09a6adf arm64: mm: unaligned access by user-land should be received as
> SIGBUS
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=09a6adf53d42ca3088fa3fb41f40b768efc711ed
> 
> The kernel config in this build has:
> CONFIG_DEVMEM=y
> CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
> CONFIG_STRICT_DEVMEM=y
> CONFIG_IO_STRICT_DEVMEM=y
> 
> 
> I'm wondering what would be the best way to fix this.
> Looks like we could try one of:
> 1) ignore SIGBUS in the "safe" functions as well.
> 2) avoid the use of /dev/mem in places like
> fwts_acpi_load_tables_from_firmware().
> 3) fix any unaligned access if fwts is really making one to trigger SIGBUS.
> Or possibly something else that I'm not seeing yet. Suggestions?
> 
> I can prepare/test the fix once we agree on something.
> 
> Erico
> 
Thanks for reporting this. I'll try and rig up a reproducer and figure
out the best way forward on that today.

Colin



More information about the fwts-devel mailing list