Date: Tue, 30 Nov 2021 00:13:23 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 260126] syslog(3) spins the CPU with 4180 byte messages Message-ID: <bug-260126-227-cEhA4wKbHV@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-260126-227@https.bugs.freebsd.org/bugzilla/> References: <bug-260126-227@https.bugs.freebsd.org/bugzilla/>
next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D260126 Alan Somers <asomers@FreeBSD.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|New |Open --- Comment #1 from Alan Somers <asomers@FreeBSD.org> --- So the problem seems to be that: * The default receive buffer size for a unix domain socket is 4 kB * connectlog() sets SO_SNDBUF to 8 kB * BUT, unix domain datagram sockets don't really have a send buffer. Unlike inet sockets, they stay on one host, so everything goes straight to the rec= eive buffer. See uipc_send(); it writes into so2->so_rcv, not so->so_snd. * syslogd sets SO_RCVBUF to 80 kB, which is why nobody noticed the problem there. * rsyslogd uses the default SO_RCVBUF of 4 kB * syslog(3) chops up messages that are longer than MAXLINE. But now MAXLIN= E is 8 kB, and the SO_RCVBUF is only 4 kB. So the chopped up messages are too l= arge for the buffer. * syslog(3) loops while (errno =3D=3D ENOBUFS), which is not appropriate if= the message is too big to ever fit. BUT, it fails fast if the socket is privileged. Many daemons are, so their operators won't notice this bug, bu= t my daemon is not. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-260126-227-cEhA4wKbHV>