Package: e2fsck-static Version: 1.42.12-2 Severity: important Dear Maintainer,
when using the powerpc version of e2fsck-static with the -C0 option,
the execution aborts with SIGILL when printing the first progress
information.
To repeat:
$ fallocate --lenght 128m /tmp/wrk.img
$ mkfs.ext4 /tmp/wrk.img
$ e2fsck.static -f -C0 /tmp/wrk.img
Output:
| e2fsck 1.42.12 (29-Aug-2014)
| ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing
mtab file while determining whether /tmp/wrk.img is mounted.
| Pass 1: Checking inodes, blocks, and sizes
| /tmp/wrk.img: |== | Signal (4)
SIGILL si_code=ILL_ILLOPC fault addr=0x10063fe4
Workaround: Use the non-static e2fsck program, or do not use the -C0
option.
Using the binary packages at snapshot.d.o leads to the assumption this
was introduced in 1.42.9-3 (1.42.9-2 is okay) and fixed in 1.43-1
(1.43~WIP.2016.03.15-2 still fails). I could not reproduce this by
compiling e2fsck from git, so I could not use git bisect to identify
the actual changes. A diff of the sources did not reveal anything
obvious.
Using gdb on a re-build of 1.42.12-2 gave the following backtrace:
| #0 0x10063c28 in __dtostr ()
| #1 0x10062708 in __v_printf ()
| #2 0x1006071c in vprintf ()
| #3 0x10060dd0 in printf ()
| #4 0x10004c40 in e2fsck_simple_progress (ctx=ctx@entry=0xb7fff008,
label=0xb7ffb088 "/tmp/wrk.img",
| percent=4.375, dpynum=dpynum@entry=0) at
/tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/unix.c:558
| #5 0x10004d74 in e2fsck_simple_progress (dpynum=0, percent=<optimized out>,
label=<optimized out>,
| ctx=0xb7fff008) at
/tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/unix.c:513
| #6 e2fsck_update_progress (ctx=0xb7fff008, pass=<optimized out>,
cur=<optimized out>,
| max=<optimized out>) at
/tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/unix.c:587
| #7 0x1000b5e8 in scan_callback (fs=<optimized out>, scan=<optimized out>,
group=<optimized out>,
| priv_data=<optimized out>) at
/tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/pass1.c:1299
| #8 0x1003d08c in ext2fs_get_next_inode_full (scan=0xb7ff9488,
ino=0xbffff244, inode=0xb7ffa208,
| bufsize=128) at
/tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/lib/ext2fs/inode.c:419
| #9 0x1003dcc4 in ext2fs_get_next_inode_full (scan=<optimized out>,
ino=ino@entry=0xbffff244,
| inode=inode@entry=0xb7ffa208, bufsize=bufsize@entry=128)
| at /tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/lib/ext2fs/inode.c:511
| #10 0x1000c094 in e2fsck_pass1 (ctx=ctx@entry=0xb7fff008)
| at /tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/pass1.c:765
| #11 0x1000540c in e2fsck_run (ctx=0xb7fff008)
| at /tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/e2fsck.c:226
| #12 0x100010d4 in main (argc=<optimized out>, argv=<optimized out>)
| at /tmp/buildplace/_tmp_e2fsprogs/e2fsprogs/e2fsck/unix.c:1636
The line at e2fsck/unix.c:558 is harmless:
| printf(" %4.1f%% ", percent);
So I fear some previous statements disturb an internal buffer. And
as long as the actual cause is unknown, I am concerned this bug still
might be there, just no longer manifests this way. And I'm interested
in getting this fixed in an upcoming stable point release.
Also I am willing to do further tests as long as they are feasible: A
full dpkg-buildpackage takes some 30 minutes so I'd like to avoid
having to do this ten times in a row.
Christoph
signature.asc
Description: Digital signature

