| Summary: | grep and segfault | ||
|---|---|---|---|
| Product: | Busybox | Reporter: | Arseniy <senik91> |
| Component: | Standard Compliance | Assignee: | unassigned |
| Status: | RESOLVED INVALID | ||
| Severity: | normal | CC: | busybox-cvs |
| Priority: | P5 | ||
| Version: | 1.18.x | ||
| Target Milestone: | --- | ||
| Hardware: | Other | ||
| OS: | Linux | ||
| Host: | Target: | ||
| Build: | |||
| Attachments: |
here is screenshot
busybox config file |
||
(In reply to comment #0) > Created attachment 5006 [details] > here is screenshot > > Hi, when try to use grep as: "grep -r "insmod" ." it sometimes crashes cause of > segmentation fault. working path is /. busybox version is 1.18.4. Try newer version. Attach your .config file to this bug. Run the command under strace and attach the log. Created attachment 5036 [details]
busybox config file
http://pastebin.com/YNnyS95S here is strace output The strace output you posted ends with:
...
lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("./proc/stclkrv_core", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5
getdents64(0x5, 0x5b37a0, 0x8000, 0x800000) = 136
lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0
open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6
fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x29558000
read(6, <unfinished ...>
IOW: there is no segfault in strace output. grep is just stuck trying to read some /proc file.
(In reply to comment #4) > The strace output you posted ends with: > > ... > lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 > open("./proc/stclkrv_core", > O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 > getdents64(0x5, 0x5b37a0, 0x8000, 0x800000) = 136 > lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 > fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = > 0x29558000 > read(6, <unfinished ...> > > > IOW: there is no segfault in strace output. grep is just stuck trying to read > some /proc file. it is sigsegv, because after last line read(6, <unfinished ...> strace prints "killed by SISEGV", sorry, i didn't copy it earlier (In reply to comment #5) > (In reply to comment #4) > > The strace output you posted ends with: > > > > ... > > lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 > > open("./proc/stclkrv_core", > > O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 > > getdents64(0x5, 0x5b37a0, 0x8000, 0x800000) = 136 > > lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 > > fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = > > 0x29558000 > > read(6, <unfinished ...> > > > > > > IOW: there is no segfault in strace output. grep is just stuck trying to read > > some /proc file. > > it is sigsegv, because after last line read(6, <unfinished ...> strace prints > "killed by SISEGV", sorry, i didn't copy it earlier This isn't how SIGSEGV is shown in strace output. It should look like this: ... last_syscall(args) = result --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_USER, si_pid=22713, si_uid=0} --- +++ killed by SIGSEGV +++ (In reply to comment #6) > (In reply to comment #5) > > (In reply to comment #4) > > > The strace output you posted ends with: > > > > > > ... > > > lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 > > > open("./proc/stclkrv_core", > > > O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 > > > getdents64(0x5, 0x5b37a0, 0x8000, 0x800000) = 136 > > > lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > > open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 > > > fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = > > > 0x29558000 > > > read(6, <unfinished ...> > > > > > > > > > IOW: there is no segfault in strace output. grep is just stuck trying to read > > > some /proc file. > > > > it is sigsegv, because after last line read(6, <unfinished ...> strace prints > > "killed by SISEGV", sorry, i didn't copy it earlier > > This isn't how SIGSEGV is shown in strace output. It should look like this: > > ... > last_syscall(args) = result > --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_USER, si_pid=22713, si_uid=0} --- > +++ killed by SIGSEGV +++ Ok: ... lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 open("./proc/stclkrv_core", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 getdents64(0x5, 0x5b3240, 0x8000, 0x800000) = 136 lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x29558000 read(6, <unfinished ...> +++ killed by SIGSEGV +++ So.. it means that there is bug in strace?:) (In reply to comment #7) > > > it is sigsegv, because after last line read(6, <unfinished ...> strace prints > > > "killed by SISEGV", sorry, i didn't copy it earlier > > > > This isn't how SIGSEGV is shown in strace output. It should look like this: > > > > ... > > last_syscall(args) = result > > --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_USER, si_pid=22713, si_uid=0} --- > > +++ killed by SIGSEGV +++ > > Ok: > ... > lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 > open("./proc/stclkrv_core", > O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 > getdents64(0x5, 0x5b3240, 0x8000, 0x800000) = 136 > lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 > fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = > 0x29558000 > read(6, <unfinished ...> > +++ killed by SIGSEGV +++ > > So.. it means that there is bug in strace?:) I doubt that the above is a valid strace output. SEGV can't kill processes *inside* syscalls. I know: I am one of strace developers. Does "cat </proc/stclkrv_core/odf >/dev/null" work? (In reply to comment #8) > (In reply to comment #7) > > > > it is sigsegv, because after last line read(6, <unfinished ...> strace prints > > > > "killed by SISEGV", sorry, i didn't copy it earlier > > > > > > This isn't how SIGSEGV is shown in strace output. It should look like this: > > > > > > ... > > > last_syscall(args) = result > > > --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_USER, si_pid=22713, si_uid=0} --- > > > +++ killed by SIGSEGV +++ > > > > Ok: > > ... > > lstat64("./proc/stclkrv_core", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0 > > open("./proc/stclkrv_core", > > O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 5 > > getdents64(0x5, 0x5b3240, 0x8000, 0x800000) = 136 > > lstat64("./proc/stclkrv_core/odf", {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > open("./proc/stclkrv_core/odf", O_RDONLY|O_LARGEFILE) = 6 > > fstat64(6, {st_mode=S_IFREG|0444, st_size=37, ...}) = 0 > > old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = > > 0x29558000 > > read(6, <unfinished ...> > > +++ killed by SIGSEGV +++ > > > > So.. it means that there is bug in strace?:) > > I doubt that the above is a valid strace output. SEGV can't kill processes > *inside* syscalls. I know: I am one of strace developers. > > Does "cat </proc/stclkrv_core/odf >/dev/null" work? Thank you, the reason was that this cat crashed with seg fault:) |
Created attachment 5006 [details] here is screenshot Hi, when try to use grep as: "grep -r "insmod" ." it sometimes crashes cause of segmentation fault. working path is /. busybox version is 1.18.4.