mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
netfilter: nf_tables: stricter validation of element data
Make sure element data type and length do not mismatch the one specified
by the set declaration.
Fixes: 7d7402642e
("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>
This commit is contained in:
parent
f8ebb3ac88
commit
7e6bc1f6ca
@ -5213,13 +5213,20 @@ static int nft_setelem_parse_data(struct nft_ctx *ctx, struct nft_set *set,
|
|||||||
struct nft_data *data,
|
struct nft_data *data,
|
||||||
struct nlattr *attr)
|
struct nlattr *attr)
|
||||||
{
|
{
|
||||||
|
u32 dtype;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = nft_data_init(ctx, data, NFT_DATA_VALUE_MAXLEN, desc, attr);
|
err = nft_data_init(ctx, data, NFT_DATA_VALUE_MAXLEN, desc, attr);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
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);
|
nft_data_release(data, desc->type);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user