Source: libi8x
Version: 0.0.5-1
Severity: important
User: debian-...@lists.debian.org
Usertags: alignment

Hi!

I've been doing a full rebuild of the Debian archive, building all
source packages targeting armel and armhf using arm64 hardware. We are
planning in future to move all of our 32-bit armel/armhf builds to
using arm64 machines, so this rebuild is to identify packages that
might have problems with this configuration.

A feature of the arm64 kernel is that it does *not* support fixing up
code with broken alignment, so code that might have built and run OK
on our older armel/armhf build machines due to kernel fixups will now
fail.

When building your package, I've found a bus error (aka alignment
fault). The full log is online at

  
https://www.einval.com/debian/arm/rebuild-logs/armel/FAIL/libi8x_0.0.5-1_armel.log

for reference

I've done a quick bit of debugging to find the source of the
bug. Here's a gdb stacktrace and variable printout to demonstrate the
problem.

(sid-armel)steve@mjolnir:~/debian/build/libi8x/libi8x-0.0.5$ gdb 
/home/steve/debian/build/libi8x/libi8x-0.0.5/tests/valid/.libs/test-corpus 
tests/core 
GNU gdb (Debian 8.2-1) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from 
/home/steve/debian/build/libi8x/libi8x-0.0.5/tests/valid/.libs/test-corpus...done.
[New LWP 5680]
Core was generated by 
`/home/steve/debian/build/libi8x/libi8x-0.0.5/tests/valid/.libs/test-corpus'.
Program terminated with signal SIGBUS, Bus error.
#0  0xf7a9a0a8 in i8x_rb_read_int64_t (rb=rb@entry=0x1e57bc0, 
result=0xff7f4af8, result@entry=0xff7f4af0)
    at readbuf.c:158
158     I8X_RB_READ_FIXED_MULTI (64)
warning: File "/home/steve/debian/build/libi8x/libi8x-0.0.5/.gdbinit" 
auto-loading has been declined by your `auto-load safe-path' set to 
"$debugdir:$datadir/auto-load".
To enable execution of this file add
        add-auto-load-safe-path 
/home/steve/debian/build/libi8x/libi8x-0.0.5/.gdbinit
line to your configuration file "/home/steve/.gdbinit".
To completely disable this security protection add
        set auto-load safe-path /
line to your configuration file "/home/steve/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
        info "(gdb)Auto-loading safe path"
(gdb) bt
#0  0xf7a9a0a8 in i8x_rb_read_int64_t (rb=rb@entry=0x1e57bc0, 
result=0xff7f4af8, result@entry=0xff7f4af0)
    at readbuf.c:158
#1  0xf7a8d888 in i8x_code_read_operand (rb=0x1e57bc0, type=I8X_OPR_INT64, 
operand=operand@entry=0x1e57988, 
    code=<optimized out>) at code.c:246
#2  0xf7a8e3a4 in i8x_code_unpack_bytecode (code=0x1e57908) at code.c:376
#3  i8x_code_init (code=0x1e57908) at code.c:757
#4  i8x_code_new (func=func@entry=0x1e57718, code=code@entry=0x1e57744) at 
code.c:831
#5  0xf7a972d4 in i8x_bcf_init (func=0x1e57718) at function.c:143
#6  i8x_func_new_bytecode (note=<optimized out>, func=0xff7f4bf8) at 
function.c:185
#7  0x0058ad1c in do_test (ctx=0x1dda150, 
    filename=0x1ddaec8 
"corpus/i8c/0.0.3/32el/test_load_constant/test_output/0027-0001") at 
valid/test-corpus.c:104
#8  0x0058b094 in ftw_callback (fpath=0x1ddaec8 
"corpus/i8c/0.0.3/32el/test_load_constant/test_output/0027-0001", 
    sb=sb@entry=0xff7f6c50, typeflag=<optimized out>) at valid/test-corpus.c:142
#9  0xf7a023fc in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f6d08, 
    name=name@entry=0x1e3f8fb "0027-0001", namlen=<optimized out>, d_type=8) at 
ftw.c:464
#10 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x8, 
st@entry=0xff7f6d58, 
    old_dir=0xf7ae1968 <__stack_chk_guard>, old_dir@entry=0xff7f6e08) at 
ftw.c:543
#11 0xf7a02584 in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f6e08, name=<optimized out>, 
    name@entry=0x1e4adf3 "test_output", namlen=<optimized out>, d_type=4) at 
ftw.c:461
#12 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x4, 
st@entry=0xff7f6e58, 
    old_dir=0xf7ae1968 <__stack_chk_guard>, old_dir@entry=0xff7f6f08) at 
ftw.c:543
#13 0xf7a02584 in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f6f08, name=<optimized out>, 
    name@entry=0x1df4333 "test_load_constant", namlen=<optimized out>, 
d_type=4) at ftw.c:461
#14 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x4, 
st@entry=0xff7f6f58,     old_dir=0xf7ae1968 <__stack_chk_guard>, 
old_dir@entry=0xff7f7008) at ftw.c:543
#15 0xf7a02584 in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f7008, name=<optimized out>, 
    name@entry=0x1debfe3 "32el", namlen=<optimized out>, d_type=4) at ftw.c:461
#16 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x4, 
st@entry=0xff7f7058, 
    old_dir=0xf7ae1968 <__stack_chk_guard>, old_dir@entry=0xff7f7108) at 
ftw.c:543
#17 0xf7a02584 in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f7108, name=<optimized out>, 
    name@entry=0x1de3f93 "0.0.3", namlen=<optimized out>, d_type=4) at ftw.c:461
#18 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x4, 
st@entry=0xff7f7158, 
    old_dir=0xf7ae1968 <__stack_chk_guard>, old_dir@entry=0xff7f7208) at 
ftw.c:543
#19 0xf7a02584 in process_entry (data=data@entry=0xff7f7290, 
dir=dir@entry=0xff7f7208, name=<optimized out>, 
    name@entry=0x1ddbf4b "i8c", namlen=<optimized out>, d_type=4) at ftw.c:461
#20 0xf7a0284c in ftw_dir (data=data@entry=0xff7f7290, st=0x4, 
old_dir=0xf7ae1968 <__stack_chk_guard>, 
    old_dir@entry=0x0) at ftw.c:543
#21 0xf7a030b0 in ftw_startup (dir=<optimized out>, is_nftw=is_nftw@entry=0, 
func=<optimized out>, 
    descriptors=<optimized out>, flags=flags@entry=0) at ftw.c:768
#22 0xf7a03248 in ftw64 (path=<optimized out>, func=<optimized out>, 
descriptors=<optimized out>) at ftw.c:817
#23 0x0058b134 in i8x_validation_test (ctx=<optimized out>) at 
valid/test-corpus.c:157
#24 0x0058b6e0 in i8x_validation_test_main () at libi8x-test.c:147
#25 0x0058aa24 in main (argc=<optimized out>, argv=<optimized out>) at 
../libi8x-test/validation-test.h:32
(gdb) list
153       I8X_RB_READ_FIXED_MULTI_1 (int ## SIZE ## _t, bswap_ ## SIZE)         
\
154       I8X_RB_READ_FIXED_MULTI_1 (uint ## SIZE ## _t, bswap_ ## SIZE)
155
156     I8X_RB_READ_FIXED_MULTI (16)
157     I8X_RB_READ_FIXED_MULTI (32)
158     I8X_RB_READ_FIXED_MULTI (64)
159
160     I8X_EXPORT i8x_err_e
161     i8x_rb_read_sleb128 (struct i8x_readbuf *rb, intptr_t *rp)
162     {
(gdb) 
163       const char *ptr = rb->ptr;
164       intptr_t result = 0;
165       int shift = 0;
166
167       while (1)
168         {
169           uint8_t byte;
170           i8x_err_e err;
171
172           err = i8x_rb_read_uint8_t (rb, &byte);
(gdb) p tmp
$1 = <optimized out>
(gdb) p rb
$2 = (struct i8x_readbuf *) 0x1e57bc0
(gdb) p result
$3 = (int64_t *) 0xff7f4af8
(gdb) p *result
$4 = 42809880576
(gdb) p rb    
$5 = (struct i8x_readbuf *) 0x1e57bc0
(gdb) p *rb
$6 = {_ob = {ops = 0xf7aaeec0 <i8x_readbuf_ops>, parent = 0x1e574b0, refcount = 
{1, 0}, userdata = 0x0, 
    userdata_cleanup = 0x0, use_debug_allocator = true, is_moribund = false, 
is_poisoned = false}, 
  start = 0x1e0c141 "\017", limit = 0x1e0c14a "\001\002\004\006", ptr = 
0x1e0c142 "", 
  byte_order = I8X_BYTE_ORDER_NATIVE}

Looks like rb->ptr is bogus, not aligned.


-- System Information:
Debian Release: 9.6
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable-debug'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-8-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Reply via email to