Commit abd66e9f authored by Laura Garcia Liebana's avatar Laura Garcia Liebana Committed by Pablo Neira Ayuso

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 revisits 4da449ae ("netfilter: nft_exthdr: Add size check
on u8 nft_exthdr attributes").

Fixes: cb1b69b0 ("netfilter: nf_tables: add hash expression")
Signed-off-by: default avatarLaura Garcia Liebana <nevola@gmail.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 486dcf43
...@@ -53,6 +53,7 @@ static int nft_hash_init(const struct nft_ctx *ctx, ...@@ -53,6 +53,7 @@ static int nft_hash_init(const struct nft_ctx *ctx,
{ {
struct nft_hash *priv = nft_expr_priv(expr); struct nft_hash *priv = nft_expr_priv(expr);
u32 len; u32 len;
int err;
if (!tb[NFTA_HASH_SREG] || if (!tb[NFTA_HASH_SREG] ||
!tb[NFTA_HASH_DREG] || !tb[NFTA_HASH_DREG] ||
...@@ -67,8 +68,10 @@ static int nft_hash_init(const struct nft_ctx *ctx, ...@@ -67,8 +68,10 @@ static int nft_hash_init(const struct nft_ctx *ctx,
priv->sreg = nft_parse_register(tb[NFTA_HASH_SREG]); priv->sreg = nft_parse_register(tb[NFTA_HASH_SREG]);
priv->dreg = nft_parse_register(tb[NFTA_HASH_DREG]); priv->dreg = nft_parse_register(tb[NFTA_HASH_DREG]);
len = ntohl(nla_get_be32(tb[NFTA_HASH_LEN])); err = nft_parse_u32_check(tb[NFTA_HASH_LEN], U8_MAX, &len);
if (len == 0 || len > U8_MAX) if (err < 0)
return err;
if (len == 0)
return -ERANGE; return -ERANGE;
priv->len = len; priv->len = len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment