netfilter: nftables: add nft_parse_register_load() and use it
[ Upstream commit 4f16d25c68ec844299a4df6ecbb0234eaf88a935 ] This new function combines the netlink register attribute parser and the load validation function. This update requires to replace: enum nft_registers sreg:8; in many of the expression private areas otherwise compiler complains with: error: cannot take address of bit-field ‘sreg’ when passing the register field as reference. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
8adedb4711
commit
ec9b0a8d30
@@ -13,8 +13,8 @@
|
||||
#include <net/netfilter/ipv6/nf_dup_ipv6.h>
|
||||
|
||||
struct nft_dup_ipv6 {
|
||||
enum nft_registers sreg_addr:8;
|
||||
enum nft_registers sreg_dev:8;
|
||||
u8 sreg_addr;
|
||||
u8 sreg_dev;
|
||||
};
|
||||
|
||||
static void nft_dup_ipv6_eval(const struct nft_expr *expr,
|
||||
@@ -38,16 +38,16 @@ static int nft_dup_ipv6_init(const struct nft_ctx *ctx,
|
||||
if (tb[NFTA_DUP_SREG_ADDR] == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
priv->sreg_addr = nft_parse_register(tb[NFTA_DUP_SREG_ADDR]);
|
||||
err = nft_validate_register_load(priv->sreg_addr, sizeof(struct in6_addr));
|
||||
err = nft_parse_register_load(tb[NFTA_DUP_SREG_ADDR], &priv->sreg_addr,
|
||||
sizeof(struct in6_addr));
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (tb[NFTA_DUP_SREG_DEV] != NULL) {
|
||||
priv->sreg_dev = nft_parse_register(tb[NFTA_DUP_SREG_DEV]);
|
||||
return nft_validate_register_load(priv->sreg_dev, sizeof(int));
|
||||
}
|
||||
return 0;
|
||||
if (tb[NFTA_DUP_SREG_DEV])
|
||||
err = nft_parse_register_load(tb[NFTA_DUP_SREG_DEV],
|
||||
&priv->sreg_dev, sizeof(int));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int nft_dup_ipv6_dump(struct sk_buff *skb, const struct nft_expr *expr)
|
||||
|
Reference in New Issue
Block a user