syslogd: Stop trying to send remote messages through special sockets

Specifically this was causing the /dev/klog fd and the signal pipe
handling fd to get a sendmsg(2) called on them and always returned
[ENOTSOCK].

r310350 combined these sockets into the main socket list and properly
skipped AF_UNSPEC at the sendmsg(2) call but later in r344739 it was
broken such that these special sockets were no longer excluded since
the AF_UNSPEC check specifically excluded these special sockets. Only
these special sockets have sl_sa = NULL. The sl_family checks should
be redundant now but are left in case of future changes so the intent
is clearer.

MFC after:	2 weeks
This commit is contained in:
Bryan Drewery 2020-11-07 17:18:44 +00:00
parent ff19fd6242
commit 9470af395f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=367455

View File

@ -1871,9 +1871,9 @@ fprintlog_write(struct filed *f, struct iovlist *il, int flags)
STAILQ_FOREACH(sl, &shead, next) {
if (sl->sl_socket < 0)
continue;
if (sl->sl_sa != NULL &&
(sl->sl_family == AF_LOCAL ||
sl->sl_family == AF_UNSPEC))
if (sl->sl_sa == NULL ||
sl->sl_family == AF_UNSPEC ||
sl->sl_family == AF_LOCAL) {
continue;
lsent = sendmsg(sl->sl_socket, &msghdr, 0);
if (lsent == (ssize_t)il->totalsize)