]> git.baikalelectronics.ru Git - kernel.git/commitdiff
netfilter: nf_tables: stricter validation of element data
authorPablo Neira Ayuso <pablo@netfilter.org>
Sat, 2 Jul 2022 02:16:30 +0000 (04:16 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Sat, 2 Jul 2022 19:04:10 +0000 (21:04 +0200)
Make sure element data type and length do not mismatch the one specified
by the set declaration.

Fixes: 4969e2e898fb ("netfilter: nf_tables: variable sized set element keys / data")
Reported-by: Hugues ANGUELKOV <hanguelkov@randorisec.fr>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index 51144fc66889b5d31e9150d8989b4c644f987ee6..d6b59beab3a9860a0b27d0a0ae817128a6486735 100644 (file)
@@ -5213,13 +5213,20 @@ static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
                                  struct nft_data *data,
                                  struct nlattr *attr)
 {
+       u32 dtype;
        int err;
 
        err = nft_data_init(ctx, data, NFT_DATA_VALUE_MAXLEN, desc, attr);
        if (err < 0)
                return err;
 
-       if (desc->type != NFT_DATA_VERDICT && desc->len != set->dlen) {
+       if (set->dtype == NFT_DATA_VERDICT)
+               dtype = NFT_DATA_VERDICT;
+       else
+               dtype = NFT_DATA_VALUE;
+
+       if (dtype != desc->type ||
+           set->dlen != desc->len) {
                nft_data_release(data, desc->type);
                return -EINVAL;
        }