Author: glebius
Date: Sat Feb  2 05:49:05 2019
New Revision: 343678
URL: https://svnweb.freebsd.org/changeset/base/343678

Log:
  Return PFIL_CONSUMED if packet was consumed.  While here gather all
  the identical endings of pf_check_*() into single function.
  
  PR:           235411

Modified:
  head/sys/netpfil/pf/pf_ioctl.c

Modified: head/sys/netpfil/pf/pf_ioctl.c
==============================================================================
--- head/sys/netpfil/pf/pf_ioctl.c      Sat Feb  2 04:27:47 2019        
(r343677)
+++ head/sys/netpfil/pf/pf_ioctl.c      Sat Feb  2 05:49:05 2019        
(r343678)
@@ -4002,6 +4002,26 @@ shutdown_pf(void)
        return (error);
 }
 
+static pfil_return_t
+pf_check_return(int chk, struct mbuf **m)
+{
+
+       switch (chk) {
+       case PF_PASS:
+               if (*m == NULL)
+                       return (PFIL_CONSUMED);
+               else
+                       return (PFIL_PASS);
+               break;
+       default:
+               if (*m != NULL) {
+                       m_freem(*m);
+                       *m = NULL;
+               }
+               return (PFIL_DROPPED);
+       }
+}
+
 #ifdef INET
 static pfil_return_t
 pf_check_in(struct mbuf **m, struct ifnet *ifp, int flags,
@@ -4010,12 +4030,8 @@ pf_check_in(struct mbuf **m, struct ifnet *ifp, int fl
        int chk;
 
        chk = pf_test(PF_IN, flags, ifp, m, inp);
-       if (chk && *m) {
-               m_freem(*m);
-               *m = NULL;
-       }
 
-       return (chk == PF_PASS ? PFIL_PASS : PFIL_DROPPED);
+       return (pf_check_return(chk, m));
 }
 
 static pfil_return_t
@@ -4025,12 +4041,8 @@ pf_check_out(struct mbuf **m, struct ifnet *ifp, int f
        int chk;
 
        chk = pf_test(PF_OUT, flags, ifp, m, inp);
-       if (chk && *m) {
-               m_freem(*m);
-               *m = NULL;
-       }
 
-       return (chk == PF_PASS ? PFIL_PASS : PFIL_DROPPED);
+       return (pf_check_return(chk, m));
 }
 #endif
 
@@ -4049,12 +4061,8 @@ pf_check6_in(struct mbuf **m, struct ifnet *ifp, int f
        CURVNET_SET(ifp->if_vnet);
        chk = pf_test6(PF_IN, flags, (*m)->m_flags & M_LOOP ? V_loif : ifp, m, 
inp);
        CURVNET_RESTORE();
-       if (chk && *m) {
-               m_freem(*m);
-               *m = NULL;
-       }
 
-       return (chk == PF_PASS ? PFIL_PASS : PFIL_DROPPED);
+       return (pf_check_return(chk, m));
 }
 
 static pfil_return_t
@@ -4066,12 +4074,8 @@ pf_check6_out(struct mbuf **m, struct ifnet *ifp, int 
        CURVNET_SET(ifp->if_vnet);
        chk = pf_test6(PF_OUT, flags, ifp, m, inp);
        CURVNET_RESTORE();
-       if (chk && *m) {
-               m_freem(*m);
-               *m = NULL;
-       }
 
-       return (chk == PF_PASS ? PFIL_PASS : PFIL_DROPPED);
+       return (pf_check_return(chk, m));
 }
 #endif /* INET6 */
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to