Skip to content

Commit f323ef3

Browse files
committed
netfilter: nf_tables: disallow jump to implicit chain from set element
Extend struct nft_data_desc to add a flag field that specifies nft_data_init() is being called for set element data. Use it to disallow jump to implicit chain from set element, only jump to chain via immediate expression is allowed. Fixes: d0e2c7d ("netfilter: nf_tables: add NFT_CHAIN_BINDING") Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 341b694 commit f323ef3

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

include/net/netfilter/nf_tables.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,15 @@ struct nft_ctx {
221221
bool report;
222222
};
223223

224+
enum nft_data_desc_flags {
225+
NFT_DATA_DESC_SETELEM = (1 << 0),
226+
};
227+
224228
struct nft_data_desc {
225229
enum nft_data_types type;
226230
unsigned int size;
227231
unsigned int len;
232+
unsigned int flags;
228233
};
229234

230235
int nft_data_init(const struct nft_ctx *ctx, struct nft_data *data,

net/netfilter/nf_tables_api.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5226,6 +5226,7 @@ static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
52265226
desc->type = dtype;
52275227
desc->size = NFT_DATA_VALUE_MAXLEN;
52285228
desc->len = set->dlen;
5229+
desc->flags = NFT_DATA_DESC_SETELEM;
52295230

52305231
return nft_data_init(ctx, data, desc, attr);
52315232
}
@@ -9665,6 +9666,9 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,
96659666
return PTR_ERR(chain);
96669667
if (nft_is_base_chain(chain))
96679668
return -EOPNOTSUPP;
9669+
if (desc->flags & NFT_DATA_DESC_SETELEM &&
9670+
chain->flags & NFT_CHAIN_BINDING)
9671+
return -EINVAL;
96689672

96699673
chain->use++;
96709674
data->verdict.chain = chain;

0 commit comments

Comments
 (0)