netfilter: nft_hash: validate maximum value of u32 netlink hash attribute
Use the function nft_parse_u32_check() to fetch the value and validate the u32 attribute into the hash len u8 field. This patch revisits4da449ae1d
("netfilter: nft_exthdr: Add size check on u8 nft_exthdr attributes"). Fixes:cb1b69b0b1
("netfilter: nf_tables: add hash expression") Signed-off-by: Laura Garcia Liebana <nevola@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
486dcf43da
commit
abd66e9f3c
|
@ -53,6 +53,7 @@ static int nft_hash_init(const struct nft_ctx *ctx,
|
|||
{
|
||||
struct nft_hash *priv = nft_expr_priv(expr);
|
||||
u32 len;
|
||||
int err;
|
||||
|
||||
if (!tb[NFTA_HASH_SREG] ||
|
||||
!tb[NFTA_HASH_DREG] ||
|
||||
|
@ -67,8 +68,10 @@ static int nft_hash_init(const struct nft_ctx *ctx,
|
|||
priv->sreg = nft_parse_register(tb[NFTA_HASH_SREG]);
|
||||
priv->dreg = nft_parse_register(tb[NFTA_HASH_DREG]);
|
||||
|
||||
len = ntohl(nla_get_be32(tb[NFTA_HASH_LEN]));
|
||||
if (len == 0 || len > U8_MAX)
|
||||
err = nft_parse_u32_check(tb[NFTA_HASH_LEN], U8_MAX, &len);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (len == 0)
|
||||
return -ERANGE;
|
||||
|
||||
priv->len = len;
|
||||
|
|
Loading…
Reference in a new issue