]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
mergesort: unbreak listing with binops
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Aug 2020 23:05:04 +0000 (01:05 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Aug 2020 23:05:04 +0000 (01:05 +0200)
tcp flags == {syn, syn|ack}
tcp flags & (fin|syn|rst|psh|ack|urg) == {ack, psh|ack, fin, fin|psh|ack}

results in:

BUG: Unknown expression binop
nft: mergesort.c:47: expr_msort_cmp: Assertion `0' failed.
Aborted (core dumped)

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/mergesort.c
tests/py/inet/tcp.t
tests/py/inet/tcp.t.payload

index 649b7806a7af2dadb6d8e567b00c87f736027128..02094b486aeb00620f1d1a563909d17f928a62fd 100644 (file)
@@ -43,6 +43,8 @@ static int expr_msort_cmp(const struct expr *e1, const struct expr *e2)
                return concat_expr_msort_cmp(e1, e2);
        case EXPR_MAPPING:
                return expr_msort_cmp(e1->left, e2->left);
+       case EXPR_BINOP:
+               return expr_msort_cmp(e1->left, e2->left);
        default:
                BUG("Unknown expression %s\n", expr_name(e1));
        }
index e0a83e2b4152f3c534e426971145bbc889048991..29f06f5ae4847f04aff231bc46ad7599bb9c5f3e 100644 (file)
@@ -79,6 +79,8 @@ tcp flags != cwr;ok
 tcp flags == syn;ok
 tcp flags & (syn|fin) == (syn|fin);ok;tcp flags & (fin | syn) == fin | syn
 tcp flags & (fin | syn | rst | psh | ack | urg | ecn | cwr) == fin | syn | rst | psh | ack | urg | ecn | cwr;ok;tcp flags == 0xff
+tcp flags { syn, syn | ack };ok
+tcp flags & (fin | syn | rst | psh | ack | urg) == { fin, ack, psh | ack, fin | psh | ack };ok
 
 tcp window 22222;ok
 tcp window 22;ok
index 55f1bc2eff87037f9b91c0c82210d8d955e58499..076e562a623c2210a428421be5476602ad38e5ba 100644 (file)
@@ -680,3 +680,24 @@ inet test-inet input
   [ bitwise reg 1 = (reg=1 & 0x000000f0 ) ^ 0x00000000 ]
   [ cmp eq reg 1 0x00000080 ]
 
+# tcp flags & (fin | syn | rst | psh | ack | urg) == { fin, ack, psh | ack, fin | psh | ack }
+__set%d test-inet 3
+__set%d test-inet 0
+        element 00000001  : 0 [end]     element 00000010  : 0 [end]     element 00000018  : 0 [end]     element 00000019  : 0 [end]
+ip
+  [ meta load l4proto => reg 1 ]
+  [ cmp eq reg 1 0x00000006 ]
+  [ payload load 1b @ transport header + 13 => reg 1 ]
+  [ bitwise reg 1 = (reg=1 & 0x0000003f ) ^ 0x00000000 ]
+  [ lookup reg 1 set __set%d ]
+
+# tcp flags { syn, syn | ack }
+__set%d test-inet 3
+__set%d test-inet 0
+        element 00000002  : 0 [end]     element 00000012  : 0 [end]
+inet
+  [ meta load l4proto => reg 1 ]
+  [ cmp eq reg 1 0x00000006 ]
+  [ payload load 1b @ transport header + 13 => reg 1 ]
+  [ lookup reg 1 set __set%d ]
+