Hello,

diff below seems to make empty log message go way.
we have to check if sig_alrm fired here in pflogd:


725         while (1) {
726                 np = pcap_dispatch(hpcap, PCAP_NUM_PKTS,
727                     phandler, (u_char *)dpcap);
728                 if (np < 0) {
729                         if (!if_exists(interface)) {
730                                 logmsg(LOG_NOTICE, "interface %s went away",
731                                     interface);
732                                 ret = -1;
733                                 break;
734                         }

if alarm fires it interrupts pcap_read() called by
pcap_dispatch() we enter at line 726:

 75  again:
 76         /*
 77          * Has "pcap_breakloop()" been called?
 78          */
 79         if (p->break_loop) {
 80                 /*
 81                  * Yes - clear the flag that indicates that it
 82                  * has, and return PCAP_ERROR_BREAK to indicate
 83                  * that we were told to break out of the loop.
 84                  */
 85                 p->break_loop = 0;
 86                 return (PCAP_ERROR_BREAK);
 87         }
 88
 89         cc = p->cc;
 90         if (p->cc == 0) {
 91                 cc = read(p->fd, (char *)p->buffer, p->bufsize);
 92                 if (cc == -1) {
 93                         /* Don't choke when we get ptraced */
 94                         switch (errno) {
 95
 96                         case EINTR:
 97                                 goto again;
 98

I believe read at line 92 returns with EINTER, so we jump to
line to 75. If ALARM fires the condition at line 79 is true,
because pflogd's alarm handlers calls pcap_breakloop():

174 void
175 sig_alrm(int sig)
176 {
177         pcap_breakloop(hpcap);
178         gotsig_alrm = 1;
179 }


this makes me thinking the one-liner below is the fix we want.

regards
sashan

--------8<---------------8<---------------8<------------------8<--------
diff --git a/sbin/pflogd/pflogd.c b/sbin/pflogd/pflogd.c
index 271e46326ee..42ca066b7e7 100644
--- a/sbin/pflogd/pflogd.c
+++ b/sbin/pflogd/pflogd.c
@@ -732,7 +732,8 @@ main(int argc, char **argv)
                                ret = -1;
                                break;
                        }
-                       logmsg(LOG_NOTICE, "%s", pcap_geterr(hpcap));
+                       if (gotsig_alrm == 0)
+                               logmsg(LOG_NOTICE, "%s", pcap_geterr(hpcap));
                }
 
                if (gotsig_close)

Reply via email to