Control: tags -1 +moreinfo Hi Phillip,
On Tue, Jul 23, 2019 at 11:09 PM Uwe Kleine-König <[email protected]> wrote: > On Tue, Jul 23, 2019 at 09:14:53AM +0000, Uwe Kleine-König wrote: > > the test suite for rauc (currently in NEW) provokes a Bus error in > > mksquashfs on sparc64 (tested on kyoto.debian.net in a sid chroot). > > Reproduction is as follows: > > > > install casync dbus dbus-x11 debhelper e2fsprogs faketime grub-common > > libcurl4-gnutls-dev, libglib2.0-dev, libjson-glib-dev libssl-dev libtool > > squashfs-tools systemd git > > > > git clone https://github.com/rauc/rauc.git > > sed -i 's/0x73717368$/GUINT32_FROM_LE(0x73717368)/' src/bundle.c > > sh autogen.sh > > ./configure > > make check > > rm -rf /tmp/rauc-* > > ./test/bundle.test > > > > The last command fails with > > "rauc:ERROR:test/common.c:339:test_create_bundle: > > 'create_bundle(bundlename, contentdir, NULL)' should be TRUE" and leaves > > behind a directory that allows to reproduce the issue: > > > > $ rm -f image; mksquashfs /tmp/rauc-*/content image > > Parallel mksquashfs: Using 32 processors > > Creating 4.0 filesystem on image, block size 131072. > > Bus error > > The problem is in all_zero from squashfs-tools/mksquashfs.c: > > int all_zero(struct file_buffer *file_buffer) > { > int i; > long entries = file_buffer->size / sizeof(long); > long *p = (long *) file_buffer->data; > > for(i = 0; i < entries && p[i] == 0; i++); > > if(i == entries) { > for(i = file_buffer->size & ~(sizeof(long) - 1); > i < file_buffer->size && file_buffer->data[i] == 0; > i++); > > return i == file_buffer->size; > } > > return 0; > } > > If file_buffer->data isn't a multiple of sizeof(long) the access to p[0] > traps on sparc. > > Replacing that by: > > int all_zero(struct file_buffer *file_buffer) > { > int i; > > for(i = 0; i < file_buffer->size; i++) > if (file_buffer->data[i] != 0) > return 0; > > return 1; > } > > should fix it. On architectures that fixup unaligned accesses in the > kernel it is probably even faster. May you comment on this change from Uwe? Thanks, Laszlo/GCS

