Date: Fri, 26 Mar 2010 07:33:10 -0500 From: Peter Steele <psteele@maxiscale.com> To: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Puzzling stack trace Message-ID: <7B9397B189EB6E46A5EE7B4C8A4BB7CB3B5AACBE@MBX03.exg5.exghost.com>
next in thread | raw e-mail | index | archive | help
I'm reposting this here since it's a pretty low-level discussion. Hopefully=
someone here can explain what's going on.
We had an app crash and the resulting core dump produced a very puzzling st=
ack trace:
#0 0x00000008011d438c in thr_kill () from /lib/libc.so.7
#1 0x00000008012722bb in abort () from /lib/libc.so.7
#2 0x00000008011fb70c in malloc_usable_size () from /lib/libc.so.7
#3 0x00000008011fbb95 in malloc_usable_size () from /lib/libc.so.7
#4 0x00000008011fdaea in _malloc_thread_cleanup () from /lib/libc.so.7
#5 0x00000008011fdc86 in _malloc_thread_cleanup () from /lib/libc.so.7
#6 0x00000008011fc8e9 in malloc_usable_size () from /lib/libc.so.7
#7 0x00000008011fccc7 in malloc_usable_size () from /lib/libc.so.7
#8 0x00000008011ffe8f in malloc () from /lib/libc.so.7
#9 0x000000080127374b in memchr () from /lib/libc.so.7
#10 0x000000080125e6e9 in __srget () from /lib/libc.so.7
#11 0x00000008012352dd in vsscanf () from /lib/libc.so.7
#12 0x0000000801220087 in fscanf () from /lib/libc.so.7
This trace resulted from a call to fscanf, as follows:
char buffer[21];
fscanf(in, "%20s", buffer);
We've verified that the data being read was correct, and clearly the buffer=
in which fscanf is storing the string it reads is valid (i.e., it's not NU=
LL). So what would lead this fscanf() call into calling abort()? Everything=
seems to be in order. What's more puzzling to us is that we've looked for =
calls to malloc_usable_size() in the libc sources and although the function=
is defined we can find no direct call to the function in our FBSD 8 source=
s:
$ grep -R 'malloc_usable_size' *|grep -v .svn
libc/stdlib/Symbol.map: malloc_usable_size;
libc/stdlib/Makefile.inc: malloc.3 realloc.3 malloc.3 reallocf.3 mall=
oc.3 malloc_usable_size.3
libc/stdlib/malloc.c:malloc_usable_size(const void *ptr)
That's it. Nothing calls this function from what we can tell. Even if somet=
hing did call it, we don't understand why it would call abort(). It has an =
assert:
malloc_usable_size(const void *ptr)
{
assert(ptr !=3D NULL);
return (isalloc(ptr));
}
but the pointer we pass to fscanf() is clearly not NULL, so what pointer wo=
uld this function be testing?
It's all very puzzling and we cannot reproduce this failure. We'd like to u=
nderstand what happened though.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7B9397B189EB6E46A5EE7B4C8A4BB7CB3B5AACBE>
