]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nfq: support bypass for rebuilt fragment packets 2383/head
authorVictor Julien <victor@inliniac.net>
Tue, 25 Oct 2016 12:31:41 +0000 (14:31 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 26 Oct 2016 08:09:06 +0000 (10:09 +0200)
src/source-nfq.c

index 344c5096dab5c8c15dfc570041cd56992a637446..2c82f591fbff14e379774463f3e908b3c1dbd253 100644 (file)
@@ -510,6 +510,17 @@ static void NFQReleasePacket(Packet *p)
 static int NFQBypassCallback(Packet *p)
 {
     if (IS_TUNNEL_PKT(p)) {
+        /* real tunnels may have multiple flows inside them, so bypass can't
+         * work for those. Rebuilt packets from IP fragments are fine. */
+        if (p->flags & PKT_REBUILT_FRAGMENT) {
+            Packet *tp = p->root ? p->root : p;
+            SCMutexLock(&tp->tunnel_mutex);
+            tp->nfq_v.mark = (nfq_config.bypass_mark & nfq_config.bypass_mask)
+                | (tp->nfq_v.mark & ~nfq_config.bypass_mask);
+            tp->flags |= PKT_MARK_MODIFIED;
+            SCMutexUnlock(&tp->tunnel_mutex);
+            return 1;
+        }
         return 0;
     } else {
         p->nfq_v.mark = (nfq_config.bypass_mark & nfq_config.bypass_mask)