[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: segfault on kernel v2.4.0
Thanks for the help, Chris. I hope somebody finds this enlightening:
On Wed, Jan 31, 2001 at 09:31:53AM -0500, Chris Kuklewicz wrote:
> Again, I am not a developer on this project. But I do have more ideas
> on collecting data:
>
> > modprobe loop
> > losetup
> > => segfault
>
> If you use strace, e.g. "strace losetup ...", does the output help you
> isolate an offending syscall? Note: strace is pretty easy to use, see
> the man page.
>
> If you compare the strace output with output where you preloaded
> blowfish and avoided the segfault, then it might help locate a failing
> syscall, if there is one.
Right, I have included some straces. I was unable to get a stack trace
with gdb, even after making sure symbols were left in and compiling
without optimizations. Perhaps after faulting, the kernel was forcibly
killing the program and I was unable to get a stack trace? (Not sure).
NOTE: I usually use the util-linux patch of 2.4.0.2 because the 2.4.0.3
patch of losetup segfaults *every* time no matter what I do and I can't
get at my data. I've compiled and straced the 2.4.0.3 version too,
but I don't have a 'working' strace for that one.
First: strace of segfaulting losetup (2.4.0.2 patch):
=======================================================
execve("/sbin/losetup", ["losetup", "-e", "blowfish", "-k", "160", "/dev/loop0", "/home/fenris/.crypt.fs"], [/* 54 vars */]) = 0
brk(0) = 0x804db3c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43338, ...}) = 0
mmap(NULL, 43338, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\321\1"..., 1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=4842269, ...}) = 0
mmap(NULL, 1116292, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x4012a000, 39044, PROT_NONE) = 0
mmap(0x4012a000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x106000) = 0x4012a000
mmap(0x40130000, 14468, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40130000
close(3) = 0
munmap(0x40018000, 43338) = 0
getpid() = 333
brk(0) = 0x804db3c
brk(0x804db64) = 0x804db64
brk(0x804e000) = 0x804e000
open("/home/fenris/.crypt.fs", O_RDWR) = 3
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = 4
mlockall(0x3, 0xffffffff) = 0
ioctl(4, LOOP_SET_FD, 0x3) = 0
ioctl(4, LOOP_SET_STATUS, 0xbffff58c) = -1 EINVAL (Invalid argument)
open("/proc/crypto/cipher/blowfish-cbc", O_RDONLY) = -1 ENOENT (No such file or directory)
XXXXXXXXXXXXXXXX ABOVE LINE IS WHERE DIFFERENCES START XXXXXXXXXXXXXXXXXXXXX
ioctl(4, LOOP_SET_STATUS, 0xbffff5c0) = -1 ENOSYS (Function not implemented)
ioctl(4, LOOP_SET_STATUS, 0xbffff5c0) = -1 ENOSYS (Function not implemented)
ioctl(4, LOOP_SET_STATUS <unfinished ...>
+++ killed by SIGSEGV +++
=======================================================
strace of successful losetup (2.4.0.2) by modprobing blowfish first:
=======================================================
execve("/sbin/losetup", ["losetup", "-e", "blowfish", "-k", "160", "/dev/loop0", ".crypt.fs"], [/* 59 vars */]) = 0
brk(0) = 0x804db9c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43338, ...}) = 0
mmap(NULL, 43338, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\321\1"..., 1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=4842269, ...}) = 0
mmap(NULL, 1116292, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x4012a000, 39044, PROT_NONE) = 0
mmap(0x4012a000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x106000) = 0x4012a000
mmap(0x40130000, 14468, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40130000
close(3) = 0
munmap(0x40018000, 43338) = 0
getpid() = 1559
brk(0) = 0x804db9c
brk(0x804dbc4) = 0x804dbc4
brk(0x804e000) = 0x804e000
open(".crypt.fs", O_RDWR) = 3
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = 4
mlockall(0x3, 0xffffffff) = 0
ioctl(4, LOOP_SET_FD, 0x3) = 0
ioctl(4, LOOP_SET_STATUS, 0xbffff46c) = -1 EINVAL (Invalid argument)
open("/proc/crypto/cipher/blowfish-cbc", O_RDONLY) = 5
XXXXXXXXXXXXXXXX ABOVE LINE IS WHERE DIFFERENCES START XXXXXXXXXXXXXXXXXXXXX
fstat(5, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000
read(5, "cipher_name: blowfish-cbc\n"..., 1024) = 153
read(5, "", 1024) = 0
open("/dev/tty", O_RDWR|O_CREAT|O_TRUNC, 0666) = 6
ioctl(6, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(6, SNDCTL_TMR_CONTINUE, {B38400 opost -isig icanon -echo ...}) = 0
fstat(6, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40019000
ioctl(6, TCGETS, {B38400 opost -isig icanon -echo ...}) = 0
write(6, "Password :", 10) = 10
read(6, "XXXXXXXXXX\n", 4096) = XX
write(6, "\n", 1) = 1
ioctl(6, SNDCTL_TMR_CONTINUE, {B38400 opost isig icanon echo ...}) = 0
close(6) = 0
munmap(0x40019000, 4096) = 0
ioctl(4, LOOP_SET_STATUS, 0xbffff4a0) = 0
close(4) = 0
close(3) = 0
_exit(0) = ?
=======================================================
strace of losetup (2.4.0.3) segfault:
=======================================================
execve("/sbin/losetup", ["losetup", "-e", "blowfish", "-k", "160", "/dev/loop0", "/home/fenris/.crypt.fs"], [/* 59 vars */]) = 0
brk(0) = 0x8050028
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43338, ...}) = 0
mmap(NULL, 43338, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\321\1"..., 1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=4842269, ...}) = 0
mmap(NULL, 1116292, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40023000
mprotect(0x4012a000, 39044, PROT_NONE) = 0
mmap(0x4012a000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x106000) = 0x4012a000
mmap(0x40130000, 14468, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40130000
close(3) = 0
munmap(0x40018000, 43338) = 0
getpid() = 373
brk(0) = 0x8050028
brk(0x8050050) = 0x8050050
brk(0x8051000) = 0x8051000
open("/home/fenris/.crypt.fs", O_RDWR) = 3
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = -1 ENOSYS (Function not implemented)
open("/dev/loop0", O_RDWR) = 4
mlockall(0x3, 0xffffffff) = 0
ioctl(4, LOOP_SET_FD, 0x3) = 0
ioctl(4, LOOP_SET_STATUS, 0xbffff488) = -1 ENOSYS (Function not implemented)
ioctl(4, LOOP_SET_STATUS, 0xbffff488) = -1 ENOSYS (Function not implemented)
ioctl(4, LOOP_SET_STATUS <unfinished ...>
+++ killed by SIGSEGV +++
=======================================================
--
Michael Driscoll
fenris@ulf.edgemail.com
Linux-crypto: cryptography in and on the Linux system
Archive: http://mail.nl.linux.org/linux-crypto/