]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
datatype: initialize TYPE_CT_LABEL slot in datatype array
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 19 Sep 2023 16:09:31 +0000 (18:09 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 3 Nov 2023 11:23:37 +0000 (12:23 +0100)
commit 1b235f9962a059a599d9a9ecce477ed71e328e89 upstream.

Otherwise, ct label with concatenations such as:

 table ip x {
        chain y {
                ct label . ct mark  { 0x1 . 0x1 }
        }
 }

crashes:

../include/datatype.h:196:11: runtime error: member access within null pointer of type 'const struct datatype'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==640948==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7fc970d3199b bp 0x7fffd1f20560 sp 0x7fffd1f20540 T0)
==640948==The signal is caused by a READ memory access.
==640948==Hint: address points to the zero page.
sudo     #0 0x7fc970d3199b in datatype_equal ../include/datatype.h:196

Fixes: 2fcce8b0677b ("ct: connlabel matching support")
Reported-by: Thomas Haller <thaller@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/ct.h
src/ct.c
src/datatype.c

index efb2d4185543808a5f0430b9be95094032671769..aa0504c5ace746a3ba06b5666a02988fe97443ab 100644 (file)
@@ -39,5 +39,6 @@ extern const char *ct_label2str(const struct symbol_table *tbl,
 extern const struct datatype ct_dir_type;
 extern const struct datatype ct_state_type;
 extern const struct datatype ct_status_type;
+extern const struct datatype ct_label_type;
 
 #endif /* NFTABLES_CT_H */
index 64327561d08920490c1972edc5a346f8eca5f586..ec945f19efbb6a9298b39c8677a79325ba60bc70 100644 (file)
--- a/src/ct.c
+++ b/src/ct.c
@@ -216,7 +216,7 @@ static struct error_record *ct_label_type_parse(struct parse_ctx *ctx,
        return NULL;
 }
 
-static const struct datatype ct_label_type = {
+const struct datatype ct_label_type = {
        .type           = TYPE_CT_LABEL,
        .name           = "ct_label",
        .desc           = "conntrack label",
index dcda32c8e6ddd9e28220225d2f601ec2ff6c1f1a..81b8b4d564c24197aa6bb2615d8481d4ae53b273 100644 (file)
@@ -62,6 +62,7 @@ static const struct datatype *datatypes[TYPE_MAX + 1] = {
        [TYPE_CT_DIR]           = &ct_dir_type,
        [TYPE_CT_STATUS]        = &ct_status_type,
        [TYPE_ICMP6_TYPE]       = &icmp6_type_type,
+       [TYPE_CT_LABEL]         = &ct_label_type,
        [TYPE_PKTTYPE]          = &pkttype_type,
        [TYPE_ICMP_CODE]        = &icmp_code_type,
        [TYPE_ICMPV6_CODE]      = &icmpv6_code_type,