Skip to content

Commit

Permalink
netfilter: nf_tables: missing sanitization in data from userspace
Browse files Browse the repository at this point in the history
Do not assume userspace always sends us NFT_DATA_VALUE for bitwise and
cmp expressions. Although NFT_DATA_VERDICT does not make any sense, it
is still possible to handcraft a netlink message using this incorrect
data type.

Signed-off-by: Pablo Neira Ayuso <[email protected]>
  • Loading branch information
ummakynes committed May 15, 2017
1 parent fa80360 commit 71df14b
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
19 changes: 14 additions & 5 deletions net/netfilter/nft_bitwise.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,26 @@ static int nft_bitwise_init(const struct nft_ctx *ctx,
tb[NFTA_BITWISE_MASK]);
if (err < 0)
return err;
if (d1.len != priv->len)
return -EINVAL;
if (d1.len != priv->len) {
err = -EINVAL;
goto err1;
}

err = nft_data_init(NULL, &priv->xor, sizeof(priv->xor), &d2,
tb[NFTA_BITWISE_XOR]);
if (err < 0)
return err;
if (d2.len != priv->len)
return -EINVAL;
goto err1;
if (d2.len != priv->len) {
err = -EINVAL;
goto err2;
}

return 0;
err2:
nft_data_uninit(&priv->xor, d2.type);
err1:
nft_data_uninit(&priv->mask, d1.type);
return err;
}

static int nft_bitwise_dump(struct sk_buff *skb, const struct nft_expr *expr)
Expand Down
12 changes: 10 additions & 2 deletions net/netfilter/nft_cmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,18 @@ nft_cmp_select_ops(const struct nft_ctx *ctx, const struct nlattr * const tb[])
if (err < 0)
return ERR_PTR(err);

if (desc.type != NFT_DATA_VALUE) {
err = -EINVAL;
goto err1;
}

if (desc.len <= sizeof(u32) && op == NFT_CMP_EQ)
return &nft_cmp_fast_ops;
else
return &nft_cmp_ops;

return &nft_cmp_ops;
err1:
nft_data_uninit(&data, desc.type);
return ERR_PTR(-EINVAL);
}

struct nft_expr_type nft_cmp_type __read_mostly = {
Expand Down

0 comments on commit 71df14b

Please sign in to comment.