]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
xtoptions: fill in fallback value for nvals
authorJan Engelhardt <jengelh@medozas.de>
Sat, 27 Aug 2011 15:59:52 +0000 (17:59 +0200)
committerJan Engelhardt <jengelh@medozas.de>
Sat, 27 Aug 2011 16:36:12 +0000 (18:36 +0200)
Parsing for libxt_conntrack rev 2 is done by using rev 2's option
structure, which specifies XTTYPE_PORT, and using rev 3's parser
skeleton, which uses cb->nvals. Reading cb->nvals when not using
XTTYPE_PORTRC (or any other multi-value type) is undefined behavior.

Make it defined. Since XTTYPE_NONE is the only type that can take
void, nvals logically ought to be 1.

References: http://marc.info/?l=netfilter-devel&m=131370592105298&w=2
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
iptables/xtoptions.c

index 04344af430cde8dcf8d195c92836fb2cb473bdd1..5f617a42d549bcdd2127c010e19bd97d84975556 100644 (file)
@@ -826,6 +826,12 @@ void xtables_option_parse(struct xt_option_call *cb)
                xt_params->exit_err(PARAMETER_PROBLEM,
                        "%s: option \"--%s\" requires an argument.\n",
                        cb->ext_name, entry->name);
+       /*
+        * Fill in fallback value for "nvals", in case an extension (as it
+        * happened with libxt_conntrack.2) tries to read it, despite not using
+        * a *RC option type.
+        */
+       cb->nvals = 1;
        if (entry->type <= ARRAY_SIZE(xtopt_subparse) &&
            xtopt_subparse[entry->type] != NULL)
                xtopt_subparse[entry->type](cb);