On Thu, Jan 28, 2010 at 09:19:48AM +0100, Daniel Baumann wrote:

lacking an arm machine, i'm relaying on the buildd log:
https://buildd.debian.org/fetch.cgi?pkg=squashfs-tools;ver=1%3A4.0-6;arch=armel;stamp=1259913213
squashfs-tools neither builds with warnings enabled (-Wall) by default nor respects CFLAGS, so I patched the Makefile. The warnings (see below) don't point to any alignment issue, though. I also needed to modify the Makefile again (as -g wasn't used) to make squashfs-tools-dbg actually useful.

=== Begin gdb snippet ===
(gdb) run -l /media/cdrom0/LiveOS/osmin.img
Starting program: /usr/bin/unsquashfs -l /media/cdrom0/LiveOS/osmin.img
[Thread debugging using libthread_db enabled]
[New Thread 0x40ace470 (LWP 14276)]
[New Thread 0x412ce470 (LWP 14277)]
[New Thread 0x41ace470 (LWP 14278)]
[New Thread 0x422ce470 (LWP 14279)]
Parallel unsquashfs: Using 1 processor

Program received signal SIGBUS, Bus error.
squashfs_opendir_4 (block_start=<value optimized out>, offset=<value optimized out>, i=<value optimized out>) at unsquash-4.c:282
warning: Source file is more recent than executable.
282 memcpy(dire->name, directory_table + bytes,
(gdb) where
#0 squashfs_opendir_4 (block_start=<value optimized out>, offset=<value optimized out>, i=<value optimized out>) at unsquash-4.c:282 #1 0x0000a6bc in pre_scan (parent_name=0x1738c "squashfs-root", start_block=0, offset=56, paths=0x0) at unsquashfs.c:1251
#2  0x0000e758 in main (argc=3, argv=0xbeea77c4) at unsquashfs.c:2155
(gdb)
=== End gdb snippet ===


The problematic part is right at the start of the function:

        char buffer[sizeof(squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
        squashfs_dir_entry *dire = (squashfs_dir_entry *) buffer;


buffer is only 8bit aligned, but squashfs_dir_entry contains 16bit members (which need to be 16bit aligned).
One way to solve this is to replace the above two lines by:

squashfs_dir_entry dire[SQUASHFS_NAME_LEN/sizeof(squashfs_dir_entry) + 2];


That change makes unsquashfs work in my test case, but there are probably other code paths that need to be fixed before this bug can be closed.


=== Begin warnings during build ===
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o mksquashfs.o mksquashfs.c
mksquashfs.c: In function ?generic_write_table?:
mksquashfs.c:1827: warning: unused variable ?obytes?
mksquashfs.c: In function ?dir_scan2?:
mksquashfs.c:3402: warning: type defaults to ?int? in declaration of ?pseudo_ino?
mksquashfs.c: In function ?add_pending_fragment?:
mksquashfs.c:1761: warning: control reaches end of non-void function
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o read_fs.o read_fs.c
read_fs.c: In function ?read_fragment_table?:
read_fs.c:561: warning: unused variable ?length?
read_fs.c: In function ?read_inode_lookup_table?:
read_fs.c:597: warning: unused variable ?length?
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o sort.o sort.c cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o swap.o swap.c cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o pseudo.o pseudo.c
pseudo.c: In function ?add_pseudo?:
pseudo.c:102: warning: unused variable ?error?
pseudo.c: At top level:
pseudo.c:59: warning: ?dump_pseudo? defined but not used
cc mksquashfs.o read_fs.o sort.o swap.o pseudo.o -lz -lpthread -lm -o mksquashfs cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o unsquashfs.o unsquashfs.c
unsquashfs.c: In function ?read_super?:
unsquashfs.c:1481: warning: unused variable ?d?
unsquashfs.c:1481: warning: unused variable ?s?
unsquashfs.c:1481: warning: unused variable ?val?
unsquashfs.c:1481: warning: unused variable ?b_pos?
unsquashfs.c:1481: warning: unused variable ?bits?
unsquashfs.c: In function ?initialise_threads?:
unsquashfs.c:1814: warning: implicit declaration of function ?get_nprocs?
unsquashfs.c: In function ?main?:
unsquashfs.c:1947: warning: unused variable ?winsize?
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o unsquash-1.o unsquash-1.c
unsquash-1.c: In function ?read_block_list_1?:
unsquash-1.c:38: warning: unused variable ?d?
unsquash-1.c:38: warning: unused variable ?s?
unsquash-1.c:38: warning: unused variable ?val?
unsquash-1.c:38: warning: unused variable ?b_pos?
unsquash-1.c:38: warning: unused variable ?bits?
unsquash-1.c: In function ?read_inode_1?:
unsquash-1.c:73: warning: unused variable ?d?
unsquash-1.c:73: warning: unused variable ?s?
unsquash-1.c:73: warning: unused variable ?val?
unsquash-1.c:73: warning: unused variable ?b_pos?
unsquash-1.c:73: warning: unused variable ?bits?
unsquash-1.c:86: warning: unused variable ?d?
unsquash-1.c:86: warning: unused variable ?s?
unsquash-1.c:86: warning: unused variable ?val?
unsquash-1.c:86: warning: unused variable ?b_pos?
unsquash-1.c:86: warning: unused variable ?bits?
unsquash-1.c:116: warning: unused variable ?d?
unsquash-1.c:116: warning: unused variable ?s?
unsquash-1.c:116: warning: unused variable ?val?
unsquash-1.c:116: warning: unused variable ?b_pos?
unsquash-1.c:116: warning: unused variable ?bits?
unsquash-1.c:133: warning: unused variable ?d?
unsquash-1.c:133: warning: unused variable ?s?
unsquash-1.c:133: warning: unused variable ?val?
unsquash-1.c:133: warning: unused variable ?b_pos?
unsquash-1.c:133: warning: unused variable ?bits?
unsquash-1.c:157: warning: unused variable ?d?
unsquash-1.c:157: warning: unused variable ?s?
unsquash-1.c:157: warning: unused variable ?val?
unsquash-1.c:157: warning: unused variable ?b_pos?
unsquash-1.c:157: warning: unused variable ?bits?
unsquash-1.c:180: warning: unused variable ?d?
unsquash-1.c:180: warning: unused variable ?s?
unsquash-1.c:180: warning: unused variable ?val?
unsquash-1.c:180: warning: unused variable ?b_pos?
unsquash-1.c:180: warning: unused variable ?bits?
unsquash-1.c: In function ?squashfs_opendir_1?:
unsquash-1.c:251: warning: unused variable ?d?
unsquash-1.c:251: warning: unused variable ?s?
unsquash-1.c:251: warning: unused variable ?val?
unsquash-1.c:251: warning: unused variable ?b_pos?
unsquash-1.c:251: warning: unused variable ?bits?
unsquash-1.c:265: warning: unused variable ?d?
unsquash-1.c:265: warning: unused variable ?s?
unsquash-1.c:265: warning: unused variable ?val?
unsquash-1.c:265: warning: unused variable ?b_pos?
unsquash-1.c:265: warning: unused variable ?bits?
unsquash-1.c: In function ?read_uids_guids_1?:
unsquash-1.c:329: warning: unused variable ?d?
unsquash-1.c:329: warning: unused variable ?s?
unsquash-1.c:329: warning: unused variable ?val?
unsquash-1.c:329: warning: unused variable ?b_pos?
unsquash-1.c:329: warning: unused variable ?bits?
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o unsquash-2.o unsquash-2.c
unsquash-2.c: In function ?read_block_list_2?:
unsquash-2.c:36: warning: unused variable ?d?
unsquash-2.c:36: warning: unused variable ?s?
unsquash-2.c:36: warning: unused variable ?val?
unsquash-2.c:36: warning: unused variable ?b_pos?
unsquash-2.c:36: warning: unused variable ?bits?
unsquash-2.c: In function ?read_fragment_table_2?:
unsquash-2.c:71: warning: unused variable ?d?
unsquash-2.c:71: warning: unused variable ?s?
unsquash-2.c:71: warning: unused variable ?val?
unsquash-2.c:71: warning: unused variable ?b_pos?
unsquash-2.c:71: warning: unused variable ?bits?
unsquash-2.c:100: warning: unused variable ?d?
unsquash-2.c:100: warning: unused variable ?s?
unsquash-2.c:100: warning: unused variable ?val?
unsquash-2.c:100: warning: unused variable ?b_pos?
unsquash-2.c:100: warning: unused variable ?bits?
unsquash-2.c: In function ?read_inode_2?:
unsquash-2.c:139: warning: unused variable ?d?
unsquash-2.c:139: warning: unused variable ?s?
unsquash-2.c:139: warning: unused variable ?val?
unsquash-2.c:139: warning: unused variable ?b_pos?
unsquash-2.c:139: warning: unused variable ?bits?
unsquash-2.c:159: warning: unused variable ?d?
unsquash-2.c:159: warning: unused variable ?s?
unsquash-2.c:159: warning: unused variable ?val?
unsquash-2.c:159: warning: unused variable ?b_pos?
unsquash-2.c:159: warning: unused variable ?bits?
unsquash-2.c:177: warning: unused variable ?d?
unsquash-2.c:177: warning: unused variable ?s?
unsquash-2.c:177: warning: unused variable ?val?
unsquash-2.c:177: warning: unused variable ?b_pos?
unsquash-2.c:177: warning: unused variable ?bits?
unsquash-2.c:195: warning: unused variable ?d?
unsquash-2.c:195: warning: unused variable ?s?
unsquash-2.c:195: warning: unused variable ?val?
unsquash-2.c:195: warning: unused variable ?b_pos?
unsquash-2.c:195: warning: unused variable ?bits?
unsquash-2.c:222: warning: unused variable ?d?
unsquash-2.c:222: warning: unused variable ?s?
unsquash-2.c:222: warning: unused variable ?val?
unsquash-2.c:222: warning: unused variable ?b_pos?
unsquash-2.c:222: warning: unused variable ?bits?
unsquash-2.c:245: warning: unused variable ?d?
unsquash-2.c:245: warning: unused variable ?s?
unsquash-2.c:245: warning: unused variable ?val?
unsquash-2.c:245: warning: unused variable ?b_pos?
unsquash-2.c:245: warning: unused variable ?bits?
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o unsquash-3.o unsquash-3.c
unsquash-3.c: In function ?read_fragment_table_3?:
unsquash-3.c:39: warning: ?return? with no value, in function returning non-void
unsquash-3.c:57: warning: unused variable ?d?
unsquash-3.c:57: warning: unused variable ?s?
unsquash-3.c:57: warning: unused variable ?val?
unsquash-3.c:57: warning: unused variable ?b_pos?
unsquash-3.c:57: warning: unused variable ?bits?
unsquash-3.c:86: warning: unused variable ?d?
unsquash-3.c:86: warning: unused variable ?s?
unsquash-3.c:86: warning: unused variable ?val?
unsquash-3.c:86: warning: unused variable ?b_pos?
unsquash-3.c:86: warning: unused variable ?bits?
unsquash-3.c: In function ?read_inode_3?:
unsquash-3.c:125: warning: unused variable ?d?
unsquash-3.c:125: warning: unused variable ?s?
unsquash-3.c:125: warning: unused variable ?val?
unsquash-3.c:125: warning: unused variable ?b_pos?
unsquash-3.c:125: warning: unused variable ?bits?
unsquash-3.c:145: warning: unused variable ?d?
unsquash-3.c:145: warning: unused variable ?s?
unsquash-3.c:145: warning: unused variable ?val?
unsquash-3.c:145: warning: unused variable ?b_pos?
unsquash-3.c:145: warning: unused variable ?bits?
unsquash-3.c:161: warning: unused variable ?d?
unsquash-3.c:161: warning: unused variable ?s?
unsquash-3.c:161: warning: unused variable ?val?
unsquash-3.c:161: warning: unused variable ?b_pos?
unsquash-3.c:161: warning: unused variable ?bits?
unsquash-3.c:178: warning: unused variable ?d?
unsquash-3.c:178: warning: unused variable ?s?
unsquash-3.c:178: warning: unused variable ?val?
unsquash-3.c:178: warning: unused variable ?b_pos?
unsquash-3.c:178: warning: unused variable ?bits?
unsquash-3.c:203: warning: unused variable ?d?
unsquash-3.c:203: warning: unused variable ?s?
unsquash-3.c:203: warning: unused variable ?val?
unsquash-3.c:203: warning: unused variable ?b_pos?
unsquash-3.c:203: warning: unused variable ?bits?
unsquash-3.c:229: warning: unused variable ?d?
unsquash-3.c:229: warning: unused variable ?s?
unsquash-3.c:229: warning: unused variable ?val?
unsquash-3.c:229: warning: unused variable ?b_pos?
unsquash-3.c:229: warning: unused variable ?bits?
unsquash-3.c:252: warning: unused variable ?d?
unsquash-3.c:252: warning: unused variable ?s?
unsquash-3.c:252: warning: unused variable ?val?
unsquash-3.c:252: warning: unused variable ?b_pos?
unsquash-3.c:252: warning: unused variable ?bits?
unsquash-3.c: In function ?squashfs_opendir_3?:
unsquash-3.c:323: warning: unused variable ?d?
unsquash-3.c:323: warning: unused variable ?s?
unsquash-3.c:323: warning: unused variable ?val?
unsquash-3.c:323: warning: unused variable ?b_pos?
unsquash-3.c:323: warning: unused variable ?bits?
unsquash-3.c:337: warning: unused variable ?d?
unsquash-3.c:337: warning: unused variable ?s?
unsquash-3.c:337: warning: unused variable ?val?
unsquash-3.c:337: warning: unused variable ?b_pos?
unsquash-3.c:337: warning: unused variable ?bits?
cc -I. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -O2 -Wall -c -o unsquash-4.o unsquash-4.c cc unsquashfs.o unsquash-1.o unsquash-2.o unsquash-3.o unsquash-4.o swap.o -lz -lpthread -lm -o unsquashfs
=== End warnings during build ===


CU Sascha

--
http://sascha.silbe.org/
http://www.infra-silbe.de/

Attachment: signature.asc
Description: Digital signature

Reply via email to