Insufficient locking in log() / kvprintf() / somewhere?
Romain Tartière
romain at blogreen.org
Fri Jul 20 19:14:07 UTC 2007
Hello FreeBSD hackers!
I recently got some apache problems (maybe just forgetting to restart it
after an update, but it is not the interest of this e-mail) and each
httpd process was segfaulting as soon as created. I got surprising
things like that in my systems log:
=== begin snippet ===
> pid 85055 (httpd), uid 80: exited on signal 11
> pid 85063 (httpd), uid 80: exited on signal 11
> pid 85064 (httpd), uid 80: exited on signal 11
> pid 85066 (httpd), uid 80: exited on signal 11
> pid 85065 (httpd), uid 80: exited on signal 11
> <<66>>ppiidd 8580506678 ((hhtttptdp)d,), uuid id8 0: 8ex0: eixteidt eod no ns isginganla l 111
> 1
>
> pid 85070 (httpd), uid 80: exited on signal 11
> pid 85069 (httpd), uid 80: exited on signal 11
=== end snippet ===
(uname: FreeBSD 6.2-STABLE #4: Thu Jun 7 00:56:26 CEST 2007 i386)
Obviously, having two processes on a dual core machine crashing
simultaneously produce weird stuff. I poked a bit around in
/usr/src/sys/kern:
> % grep -n 'exited on signal' *
> kern_sig.c:2452: "pid %d (%s), uid %d: exited on signal %d%s\n",
The code in void sigexit(td, sig) is as follow:
> if (kern_logsigexit)
> log(LOG_INFO,
> "pid %d (%s), uid %d: exited on signal %d%s\n",
> p->p_pid, p->p_comm,
> td->td_ucred ? td->td_ucred->cr_uid : -1,
> sig &~ WCOREFLAG,
> sig & WCOREFLAG ? " (core dumped)" : "");
The log() function is declared in /usr/src/sys/kern/subr_prf.c:229 as this:
> void
> log(int level, const char *fmt, ...)
> {
> va_list ap;
> struct putchar_arg pca;
>
> pca.tty = NULL;
> pca.pri = level;
> pca.flags = log_open ? TOLOG : TOCONS;
>
> va_start(ap, fmt);
> kvprintf(fmt, putchar, &pca, 10, ap);
> va_end(ap);
>
> msgbuftrigger = 1;
> }
... so basically is calls kvprintf witch actually writes the message
AFAIK.
The issue is maybe a weird case-corner, but maybe some kind of locking
may have sense to avoid this?
Kind regards,
Romain
--
Romain Tartière <romain at blogreen.org> http://romain.blogreen.org/
pgp: 8DAB A124 0DA4 7024 F82A E748 D8E9 A33F FF56 FF43 (ID: 0xFF56FF43)
(plain text =non-HTML= PGP/GPG encrypted/signed e-mail much appreciated)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20070720/e3ed3991/attachment.pgp
More information about the freebsd-hackers
mailing list