pfsync_update_net_tdb() is only called by pfsync_input() which already
runs at IPL_SOFTNET.  So trade the spl dance for an assert, ok?

Index: net/if_pfsync.c
===================================================================
RCS file: /cvs/src/sys/net/if_pfsync.c,v
retrieving revision 1.239
diff -u -p -r1.239 if_pfsync.c
--- net/if_pfsync.c     19 Dec 2016 15:46:28 -0000      1.239
+++ net/if_pfsync.c     19 Jan 2017 03:52:57 -0000
@@ -1164,7 +1164,8 @@ void
 pfsync_update_net_tdb(struct pfsync_tdb *pt)
 {
        struct tdb              *tdb;
-       int                      s;
+
+       splsoftassert(IPL_SOFTNET);
 
        /* check for invalid values */
        if (ntohl(pt->spi) <= SPI_RESERVED_MAX ||
@@ -1172,7 +1173,6 @@ pfsync_update_net_tdb(struct pfsync_tdb 
             pt->dst.sa.sa_family != AF_INET6))
                goto bad;
 
-       s = splsoftnet();
        tdb = gettdb(ntohs(pt->rdomain), pt->spi,
            (union sockaddr_union *)&pt->dst, pt->sproto);
        if (tdb) {
@@ -1182,14 +1182,12 @@ pfsync_update_net_tdb(struct pfsync_tdb 
                /* Neither replay nor byte counter should ever decrease. */
                if (pt->rpl < tdb->tdb_rpl ||
                    pt->cur_bytes < tdb->tdb_cur_bytes) {
-                       splx(s);
                        goto bad;
                }
 
                tdb->tdb_rpl = pt->rpl;
                tdb->tdb_cur_bytes = pt->cur_bytes;
        }
-       splx(s);
        return;
 
  bad:

Reply via email to