[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/