ls -l segfault + [PATCH]
Harald Küthe
harald-tuxbox at arcor.de
Thu Mar 15 20:56:00 UTC 2007
Hello List,> On Wednesday 14 March 2007 13:26, Jan Evert van Grootheest
wrote:>> It seems that show_files is at line 430 and list_single is
inlined.>> >> I also tried with valgrind. No problems reported. And it
does not segfault, either.>> >> I also made a binary that is compiled
with -O0 (no optimization). It failed myteriously thus:>> (gdb) bt full>>
#0 0x0805891a in openvt_main (argc=804208, argv=0xb7f95ae0) at
console-tools/openvt.c:35>> fd = 0>> vtname =
"\b\001\000\000\000ÿ\000\000\000¡\000\000">> #1 0x00000000 in ?? ()>>
This binary also works succesfully with valgrind. And without -l.>I propose
the following:>1) try latest svn>2) add debug printouts to ls.c [using
write, not printf!> printf can make such 'volatile' bugs disappear]:>
write(2, "HERE\n", 5);> by adding them here and there, rerunning ls, you>
will fairly quickly narrow it down.>3) show results to the list>-->vdaI have
the same problem here and I narrowed it down to some point:it seems that the
buffer bb_common_bufsiz1 will be overwritten if there are many files to be
listed with <ls -l>here it failes in static list_single(struct dnode
*dn)when dn is wrong (looks like some previous ls printout is at dn, so it
crashes)it helps increasing BUFSIZmy preferred change is to use line
buffered stdout handling instead of block buffered:bb/coreutils/ls.c zeile
795:- setvbuf(stdout, bb_common_bufsiz1, _IOFBF, BUFSIZ); +
setvbuf(stdout, bb_common_bufsiz1, _IOLBF, BUFSIZ);I don't know why this
doesn't happen with ls or ls -laIt seems strace changes the way stdout is
handled so it doesn't crash there (and it does not crash in gdb :-()my
Env:ppc8xxlinux-2.4.34glibc-2.3.6gcc-3.4.4enabled 64bit stuff:
_FILE_OFFSET_BITS=64 bb 1.4.1Best regardsHarald
More information about the busybox
mailing list