]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
optimize: segfault when releasing unsupported statement
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 1 Jun 2022 08:14:22 +0000 (10:14 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 1 Jun 2022 08:35:16 +0000 (10:35 +0200)
Call xfree() instead since stmt_alloc() does not initialize the
statement type fields.

Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1609
Fixes: ea1f1c9ff608 ("optimize: memleak in statement matrix")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/optimize.c
tests/shell/testcases/optimizations/dumps/merge_vmaps.nft
tests/shell/testcases/optimizations/merge_vmaps

index d6dfffec3c86153baa13f458cd4dadef9a43e92a..3a3049d43690b640ef14141941b819e2bf6b670a 100644 (file)
@@ -304,7 +304,7 @@ static int rule_collect_stmts(struct optimize_ctx *ctx, struct rule *rule)
                        clone->nat.type_flags = stmt->nat.type_flags;
                        break;
                default:
-                       stmt_free(clone);
+                       xfree(clone);
                        continue;
                }
 
index 05b9e575c272aa41f763a6ffe7d968fa72e79543..c981acf0a77ceac8e15a11aeec3be79e3eaa7777 100644 (file)
@@ -1,4 +1,10 @@
 table ip x {
+       set s {
+               type ipv4_addr
+               size 65535
+               flags dynamic
+       }
+
        chain filter_in_tcp {
        }
 
@@ -6,6 +12,7 @@ table ip x {
        }
 
        chain y {
+               update @s { ip saddr limit rate 12/minute burst 30 packets } accept
                tcp dport vmap { 80 : accept, 81 : accept, 443 : accept, 8000-8100 : accept, 24000-25000 : accept }
                meta l4proto vmap { tcp : goto filter_in_tcp, udp : goto filter_in_udp }
                log
index 0922a221bd6d7c94a008b406bad156d1ad6790ab..e2e4be1560c5f4f9006caaa1c187306dc8373410 100755 (executable)
@@ -3,11 +3,16 @@
 set -e
 
 RULESET="table ip x {
+       set s {
+               type ipv4_addr
+               flags dynamic
+       }
        chain filter_in_tcp {
        }
        chain filter_in_udp {
        }
        chain y {
+               update @s { ip saddr limit rate 12/minute burst 30 packets } accept
                tcp dport vmap {
                        80 : accept,
                        81 : accept,