Segmentation fault when using ping6

Denys Vlasenko vda.linux at googlemail.com
Sun Oct 17 12:17:53 UTC 2010


On Thursday 07 October 2010 14:59, Rogerio Pimentel wrote:
> Hi,
> 
> I'm having a "segmentation fault" problem when using ping6.
> 
> When testing on ARM9 platforms (i.MX25 and i.MX27), it returns the error:
> 
> root at freescale ~$ ping6 ::1
> PING ::1 (::1): 56 data bytes
> Segmentation fault
> 
> 
> Strace log:
> ------------------------------------------
> $ strace ping6 ::1
> execve("/bin/ping6", ["ping6", "::1"], [/* 12 vars */]) = 0
> brk(0)                                  = 0x9b000
> uname({sys="Linux", node="freescale", ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
> 0) = 0x4001c000
> access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or 
> directory)
> open("/etc/ld.so.cache", O_RDONLY)      = -1 ENOENT (No such file or 
> directory)
> open("/lib/tls/v5l/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No 
> such file or directory)
> stat64("/lib/tls/v5l/fast-mult/half", 0xbeafb2d8) = -1 ENOENT (No such 
> file or directory)
> open("/lib/tls/v5l/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such 
> file or directory)
> stat64("/lib/tls/v5l/fast-mult", 0xbeafb2d8) = -1 ENOENT (No such file 
> or directory)
> open("/lib/tls/v5l/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file 
> or directory)
> stat64("/lib/tls/v5l/half", 0xbeafb2d8) = -1 ENOENT (No such file or 
> directory)
> open("/lib/tls/v5l/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/tls/v5l", 0xbeafb2d8)      = -1 ENOENT (No such file or 
> directory)
> open("/lib/tls/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such 
> file or directory)
> stat64("/lib/tls/fast-mult/half", 0xbeafb2d8) = -1 ENOENT (No such file 
> or directory)
> open("/lib/tls/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file 
> or directory)
> stat64("/lib/tls/fast-mult", 0xbeafb2d8) = -1 ENOENT (No such file or 
> directory)
> open("/lib/tls/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/tls/half", 0xbeafb2d8)     = -1 ENOENT (No such file or 
> directory)
> open("/lib/tls/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/tls", 0xbeafb2d8)          = -1 ENOENT (No such file or 
> directory)
> open("/lib/v5l/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such 
> file or directory)
> stat64("/lib/v5l/fast-mult/half", 0xbeafb2d8) = -1 ENOENT (No such file 
> or directory)
> open("/lib/v5l/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file 
> or directory)
> stat64("/lib/v5l/fast-mult", 0xbeafb2d8) = -1 ENOENT (No such file or 
> directory)
> open("/lib/v5l/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/v5l/half", 0xbeafb2d8)     = -1 ENOENT (No such file or 
> directory)
> open("/lib/v5l/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/v5l", 0xbeafb2d8)          = -1 ENOENT (No such file or 
> directory)
> open("/lib/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such 
> file or directory)
> stat64("/lib/fast-mult/half", 0xbeafb2d8) = -1 ENOENT (No such file or 
> directory)
> open("/lib/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/fast-mult", 0xbeafb2d8)    = -1 ENOENT (No such file or 
> directory)
> open("/lib/half/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or 
> directory)
> stat64("/lib/half", 0xbeafb2d8)         = -1 ENOENT (No such file or 
> directory)
> 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(\0\1\0\0\0\10C\1\000"..., 
> 512) = 512
> fstat64(3, {st_mode=S_IFREG|0755, st_size=1346605, ...}) = 0
> mmap2(NULL, 1134988, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 
> 0) = 0x40025000
> mprotect(0x4012e000, 28672, PROT_NONE)  = 0
> mmap2(0x40135000, 12288, PROT_READ|PROT_WRITE, 
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x108) = 0x40135000
> mmap2(0x40138000, 8588, PROT_READ|PROT_WRITE, 
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40138000
> close(3)                                = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
> 0) = 0x4001d000
> syscall_983045(0x4001d080, 0x4001d080, 0x40024058, 0x4001d758, 0x40, 
> 0x40024058, 0, 0xf0005, 0x6fffff40, 0x8034, 0x40024000, 0xbeafbb5c, 0, 
> 0xbeafb880, 0x400
> mprotect(0x40135000, 8192, PROT_READ)   = 0
> mprotect(0x40023000, 4096, PROT_READ)   = 0
> getuid32()                              = 0
> getpid()                                = 403
> mq_notify(16, ptrace: umoven: Input/output error
> {...})                    = 3
> mq_getsetattr(3, {mq_flags=O_RDONLY|0x10, mq_maxmsg=0, mq_msgsize=0, 
> mq_curmsg=12}, ptrace: umoven: Input/output error
> {...}) = 0
> SYS_286(0x3, 0xbeafb958, 0xbeafb964, 0x10, 0x3) = 0
> gettimeofday({406, 103378}, NULL)       = 0
> SYS_290(0x3, 0xbeafb914, 0x14, 0, 0xbeafb908) = 20
> SYS_297(0x3, 0xbeafa8e4, 0, 0, 0xbeafa94c) = 108
> SYS_297(0x3, 0xbeafa8e4, 0, 0, 0xbeafa94c) = 128
> SYS_297(0x3, 0xbeafa8e4, 0, 0, 0xbeafa94c) = 20
> close(3)                                = 0
> brk(0)                                  = 0x9b000
> brk(0xbc000)                            = 0xbc000
> fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(207, 16), ...}) = 0
> ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 opost isig icanon echo 
> ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
> 0) = 0x4001e000
> write(1, "PING ::1 (::1): 56 data bytes\n", 30PING ::1 (::1): 56 data bytes
> ) = 30
> mq_notify(10, ptrace: umoven: Input/output error
> {...})                    = 3
> getuid32()                              = 0
> setuid32(0)                             = 0
> SYS_294(0x3, 0x3a, 0x1, 0xbeafba3c, 0x20) = 0
> SYS_294(0x3, 0x1, 0x6, 0x7f2b0, 0x4)    = 0
> SYS_294(0x3, 0x1, 0x8, 0xbeafba9c, 0x4) = 0
> SYS_294(0x3, 0xff, 0x7, 0xbeafba9c, 0x4) = 0
> SYS_294(0x3, 0x29, 0x8, 0x7f2b0, 0x4)   = 0
> rt_sigaction(SIGINT, {0x20698, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 
> 8) = 0
> timer_delete(0x1)                       = 0
> SYS_290(0x3, 0xbeafb898, 0x40, 0, 0x98cec) = 64
> rt_sigaction(SIGALRM, {0x1fd24, [ALRM], SA_RESTART|0x4000000}, 
> {SIG_DFL}, 8) = 0
> setitimer(ITIMER_REAL, {it_interval={0, 0}, it_value={1, 0}}, 
> {it_interval={0, 0}, it_value={0, 0}}) = 0
> SYS_297(0x3, 0xbeafba78, 0, 0x30, 0xbeafba9c) = 64
> --- SIGSEGV (Segmentation fault) @ 0 (0) ---
> +++ killed by SIGSEGV +++
> Process 403 detached

Looks like strace totally misinterpreted calling convention.

Anyway, strace is often useless for diagnosing SEGVs.

Try to use gdb to find out where _exactly_ program fails.

If you don't like gdb or don't have it on the target,
add lots of debugging printouts to ping6, recompile,
rerun, repeat until you find the line where it fails.

-- 
vda


More information about the busybox mailing list