Patch "netfilter: nf_tables: restrict anonymous set and map names to 16 bytes" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    netfilter: nf_tables: restrict anonymous set and map names to 16 bytes

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     netfilter-nf_tables-restrict-anonymous-set-and-map-n.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 541e41a88a00522cc6ce415e5481902002c27b4a
Author: Florian Westphal <fw@xxxxxxxxx>
Date:   Fri Jan 19 13:34:32 2024 +0100

    netfilter: nf_tables: restrict anonymous set and map names to 16 bytes
    
    [ Upstream commit b462579b2b86a8f5230543cadd3a4836be27baf7 ]
    
    nftables has two types of sets/maps, one where userspace defines the
    name, and anonymous sets/maps, where userspace defines a template name.
    
    For the latter, kernel requires presence of exactly one "%d".
    nftables uses "__set%d" and "__map%d" for this.  The kernel will
    expand the format specifier and replaces it with the smallest unused
    number.
    
    As-is, userspace could define a template name that allows to move
    the set name past the 256 bytes upperlimit (post-expansion).
    
    I don't see how this could be a problem, but I would prefer if userspace
    cannot do this, so add a limit of 16 bytes for the '%d' template name.
    
    16 bytes is the old total upper limit for set names that existed when
    nf_tables was merged initially.
    
    Fixes: 387454901bd6 ("netfilter: nf_tables: Allow set names of up to 255 chars")
    Signed-off-by: Florian Westphal <fw@xxxxxxxxx>
    Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index f032c29f1da6..5282e8377782 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -24,6 +24,7 @@
 #include <net/sock.h>
 
 #define NFT_MODULE_AUTOLOAD_LIMIT (MODULE_NAME_LEN - sizeof("nft-expr-255-"))
+#define NFT_SET_MAX_ANONLEN 16
 
 unsigned int nf_tables_net_id __read_mostly;
 
@@ -4411,6 +4412,9 @@ static int nf_tables_set_alloc_name(struct nft_ctx *ctx, struct nft_set *set,
 		if (p[1] != 'd' || strchr(p + 2, '%'))
 			return -EINVAL;
 
+		if (strnlen(name, NFT_SET_MAX_ANONLEN) >= NFT_SET_MAX_ANONLEN)
+			return -EINVAL;
+
 		inuse = (unsigned long *)get_zeroed_page(GFP_KERNEL);
 		if (inuse == NULL)
 			return -ENOMEM;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux