]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: Reject negative port ranges
authorPhil Sutter <phil@nwl.cc>
Thu, 25 Jan 2024 17:14:23 +0000 (18:14 +0100)
committerPhil Sutter <phil@nwl.cc>
Fri, 2 Feb 2024 17:26:14 +0000 (18:26 +0100)
Analogous to XTTYPE_UINT*RC value parsing, assert consecutive port
values are not lower than previous ones.

Signed-off-by: Phil Sutter <phil@nwl.cc>
extensions/libxt_conntrack.t
extensions/libxt_dccp.t
extensions/libxt_udp.t
libxtables/xtoptions.c

index 620e7b5436e8813a1ef175a377b4ad941315f59c..5e27ddce4fe6ebc1d473633334e3bdce18ec65af 100644 (file)
 -m conntrack --ctorigsrcport 4:;-m conntrack --ctorigsrcport 4:65535;OK
 -m conntrack --ctorigsrcport 3:4;=;OK
 -m conntrack --ctorigsrcport 4:4;-m conntrack --ctorigsrcport 4;OK
--m conntrack --ctorigsrcport 4:3;=;OK
+-m conntrack --ctorigsrcport 4:3;;FAIL
 -m conntrack --ctreplsrcport :;-m conntrack --ctreplsrcport 0:65535;OK
 -m conntrack --ctreplsrcport :4;-m conntrack --ctreplsrcport 0:4;OK
 -m conntrack --ctreplsrcport 4:;-m conntrack --ctreplsrcport 4:65535;OK
 -m conntrack --ctreplsrcport 3:4;=;OK
 -m conntrack --ctreplsrcport 4:4;-m conntrack --ctreplsrcport 4;OK
--m conntrack --ctreplsrcport 4:3;=;OK
+-m conntrack --ctreplsrcport 4:3;;FAIL
 -m conntrack --ctorigdstport :;-m conntrack --ctorigdstport 0:65535;OK
 -m conntrack --ctorigdstport :4;-m conntrack --ctorigdstport 0:4;OK
 -m conntrack --ctorigdstport 4:;-m conntrack --ctorigdstport 4:65535;OK
 -m conntrack --ctorigdstport 3:4;=;OK
 -m conntrack --ctorigdstport 4:4;-m conntrack --ctorigdstport 4;OK
--m conntrack --ctorigdstport 4:3;=;OK
+-m conntrack --ctorigdstport 4:3;;FAIL
 -m conntrack --ctrepldstport :;-m conntrack --ctrepldstport 0:65535;OK
 -m conntrack --ctrepldstport :4;-m conntrack --ctrepldstport 0:4;OK
 -m conntrack --ctrepldstport 4:;-m conntrack --ctrepldstport 4:65535;OK
 -m conntrack --ctrepldstport 3:4;=;OK
 -m conntrack --ctrepldstport 4:4;-m conntrack --ctrepldstport 4;OK
--m conntrack --ctrepldstport 4:3;=;OK
+-m conntrack --ctrepldstport 4:3;;FAIL
index 535891a556394b235513c7e1697efea34b99f39a..3655ab6f4b7fc47bf12a0b573281c0d02a9574d2 100644 (file)
 -p dccp -m dccp --sport :4;-p dccp -m dccp --sport 0:4;OK
 -p dccp -m dccp --sport 4:;-p dccp -m dccp --sport 4:65535;OK
 -p dccp -m dccp --sport 4:4;-p dccp -m dccp --sport 4;OK
--p dccp -m dccp --sport 4:3;=;OK
+-p dccp -m dccp --sport 4:3;;FAIL
 -p dccp -m dccp --dport :;-p dccp -m dccp --dport 0:65535;OK
 -p dccp -m dccp --dport :4;-p dccp -m dccp --dport 0:4;OK
 -p dccp -m dccp --dport 4:;-p dccp -m dccp --dport 4:65535;OK
 -p dccp -m dccp --dport 4:4;-p dccp -m dccp --dport 4;OK
--p dccp -m dccp --dport 4:3;=;OK
+-p dccp -m dccp --dport 4:3;;FAIL
 -p dccp -m dccp ! --sport 1;=;OK
 -p dccp -m dccp ! --sport 65535;=;OK
 -p dccp -m dccp ! --dport 1;=;OK
index d62dd5e3f830e8cd741bb77fc9d2f2fad279b8bb..09dff363fc21a05d885682c132938d3c0a91f9c2 100644 (file)
 -p udp -m udp --sport :4;-p udp -m udp --sport 0:4;OK
 -p udp -m udp --sport 4:;-p udp -m udp --sport 4:65535;OK
 -p udp -m udp --sport 4:4;-p udp -m udp --sport 4;OK
--p udp -m udp --sport 4:3;=;OK
+-p udp -m udp --sport 4:3;;FAIL
 -p udp -m udp --dport :;-p udp -m udp;OK
 -p udp -m udp ! --dport :;-p udp -m udp;OK;LEGACY;-p udp
 -p udp -m udp --dport :4;-p udp -m udp --dport 0:4;OK
 -p udp -m udp --dport 4:;-p udp -m udp --dport 4:65535;OK
 -p udp -m udp --dport 4:4;-p udp -m udp --dport 4;OK
--p udp -m udp --dport 4:3;=;OK
+-p udp -m udp --dport 4:3;;FAIL
 -p udp -m udp ! --sport 1;=;OK
 -p udp -m udp ! --sport 65535;=;OK
 -p udp -m udp ! --dport 1;=;OK
index cecf7d35261129d71e38727fe65dee23393cea94..0a995a63a2a88a2060a898b5f231a1c64a45b589 100644 (file)
@@ -604,7 +604,7 @@ static void xtopt_parse_mport(struct xt_option_call *cb)
        const struct xt_option_entry *entry = cb->entry;
        char *lo_arg, *wp_arg, *arg;
        unsigned int maxiter;
-       int value;
+       int value, prev = 0;
 
        wp_arg = lo_arg = xtables_strdup(cb->arg);
 
@@ -634,6 +634,11 @@ static void xtopt_parse_mport(struct xt_option_call *cb)
                        xt_params->exit_err(PARAMETER_PROBLEM,
                                "Port \"%s\" does not resolve to "
                                "anything.\n", arg);
+               if (value < prev)
+                       xt_params->exit_err(PARAMETER_PROBLEM,
+                               "Port range %d-%d is negative.\n",
+                               prev, value);
+               prev = value;
                if (entry->flags & XTOPT_NBO)
                        value = htons(value);
                if (cb->nvals < ARRAY_SIZE(cb->val.port_range))