netfilter: nf_tables: kill nft_validate_output_register()
All users of nft_validate_register_store() first invoke nft_validate_output_register(). There is in fact no use for using it on its own, so simplify the code by folding the functionality into nft_validate_register_store() and kill it. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
58f40ab6e2
commit
27e6d2017a
|
@ -113,7 +113,6 @@ static inline enum nft_registers nft_type_to_reg(enum nft_data_types type)
|
||||||
}
|
}
|
||||||
|
|
||||||
int nft_validate_input_register(enum nft_registers reg);
|
int nft_validate_input_register(enum nft_registers reg);
|
||||||
int nft_validate_output_register(enum nft_registers reg);
|
|
||||||
int nft_validate_register_store(const struct nft_ctx *ctx,
|
int nft_validate_register_store(const struct nft_ctx *ctx,
|
||||||
enum nft_registers reg,
|
enum nft_registers reg,
|
||||||
const struct nft_data *data,
|
const struct nft_data *data,
|
||||||
|
|
|
@ -54,7 +54,6 @@ static int nft_meta_bridge_get_init(const struct nft_ctx *ctx,
|
||||||
{
|
{
|
||||||
struct nft_meta *priv = nft_expr_priv(expr);
|
struct nft_meta *priv = nft_expr_priv(expr);
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
int err;
|
|
||||||
|
|
||||||
priv->key = ntohl(nla_get_be32(tb[NFTA_META_KEY]));
|
priv->key = ntohl(nla_get_be32(tb[NFTA_META_KEY]));
|
||||||
switch (priv->key) {
|
switch (priv->key) {
|
||||||
|
@ -67,16 +66,8 @@ static int nft_meta_bridge_get_init(const struct nft_ctx *ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_META_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_META_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
if (err < 0)
|
NFT_DATA_VALUE, len);
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
|
||||||
NFT_DATA_VALUE, len);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct nft_expr_type nft_meta_bridge_type;
|
static struct nft_expr_type nft_meta_bridge_type;
|
||||||
|
|
|
@ -4139,24 +4139,6 @@ int nft_validate_input_register(enum nft_registers reg)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nft_validate_input_register);
|
EXPORT_SYMBOL_GPL(nft_validate_input_register);
|
||||||
|
|
||||||
/**
|
|
||||||
* nft_validate_output_register - validate an expressions' output register
|
|
||||||
*
|
|
||||||
* @reg: the register number
|
|
||||||
*
|
|
||||||
* Validate that the output register is one of the general purpose
|
|
||||||
* registers or the verdict register.
|
|
||||||
*/
|
|
||||||
int nft_validate_output_register(enum nft_registers reg)
|
|
||||||
{
|
|
||||||
if (reg < NFT_REG_VERDICT)
|
|
||||||
return -EINVAL;
|
|
||||||
if (reg > NFT_REG_MAX)
|
|
||||||
return -ERANGE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(nft_validate_output_register);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nft_validate_register_store - validate an expressions' register store
|
* nft_validate_register_store - validate an expressions' register store
|
||||||
*
|
*
|
||||||
|
@ -4198,10 +4180,15 @@ int nft_validate_register_store(const struct nft_ctx *ctx,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
default:
|
default:
|
||||||
|
if (reg < NFT_REG_1)
|
||||||
|
return -EINVAL;
|
||||||
|
if (reg > NFT_REG_MAX)
|
||||||
|
return -ERANGE;
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (len > FIELD_SIZEOF(struct nft_data, data))
|
if (len > FIELD_SIZEOF(struct nft_data, data))
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
|
|
||||||
if (data != NULL && type != NFT_DATA_VALUE)
|
if (data != NULL && type != NFT_DATA_VALUE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -71,10 +71,6 @@ static int nft_bitwise_init(const struct nft_ctx *ctx,
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_BITWISE_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_BITWISE_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
NFT_DATA_VALUE, priv->len);
|
NFT_DATA_VALUE, priv->len);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
|
|
@ -115,15 +115,8 @@ static int nft_byteorder_init(const struct nft_ctx *ctx,
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_BYTEORDER_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_BYTEORDER_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
if (err < 0)
|
NFT_DATA_VALUE, priv->len);
|
||||||
return err;
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
|
||||||
NFT_DATA_VALUE, priv->len);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nft_byteorder_dump(struct sk_buff *skb, const struct nft_expr *expr)
|
static int nft_byteorder_dump(struct sk_buff *skb, const struct nft_expr *expr)
|
||||||
|
|
|
@ -307,10 +307,6 @@ static int nft_ct_get_init(const struct nft_ctx *ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_CT_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_CT_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
NFT_DATA_VALUE, len);
|
NFT_DATA_VALUE, len);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
|
|
@ -58,7 +58,6 @@ static int nft_exthdr_init(const struct nft_ctx *ctx,
|
||||||
const struct nlattr * const tb[])
|
const struct nlattr * const tb[])
|
||||||
{
|
{
|
||||||
struct nft_exthdr *priv = nft_expr_priv(expr);
|
struct nft_exthdr *priv = nft_expr_priv(expr);
|
||||||
int err;
|
|
||||||
|
|
||||||
if (tb[NFTA_EXTHDR_DREG] == NULL ||
|
if (tb[NFTA_EXTHDR_DREG] == NULL ||
|
||||||
tb[NFTA_EXTHDR_TYPE] == NULL ||
|
tb[NFTA_EXTHDR_TYPE] == NULL ||
|
||||||
|
@ -69,11 +68,8 @@ static int nft_exthdr_init(const struct nft_ctx *ctx,
|
||||||
priv->type = nla_get_u8(tb[NFTA_EXTHDR_TYPE]);
|
priv->type = nla_get_u8(tb[NFTA_EXTHDR_TYPE]);
|
||||||
priv->offset = ntohl(nla_get_be32(tb[NFTA_EXTHDR_OFFSET]));
|
priv->offset = ntohl(nla_get_be32(tb[NFTA_EXTHDR_OFFSET]));
|
||||||
priv->len = ntohl(nla_get_be32(tb[NFTA_EXTHDR_LEN]));
|
priv->len = ntohl(nla_get_be32(tb[NFTA_EXTHDR_LEN]));
|
||||||
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_EXTHDR_DREG]));
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_EXTHDR_DREG]));
|
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
NFT_DATA_VALUE, priv->len);
|
NFT_DATA_VALUE, priv->len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,16 +49,12 @@ static int nft_immediate_init(const struct nft_ctx *ctx,
|
||||||
tb[NFTA_IMMEDIATE_DATA] == NULL)
|
tb[NFTA_IMMEDIATE_DATA] == NULL)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_IMMEDIATE_DREG]));
|
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_data_init(ctx, &priv->data, &desc, tb[NFTA_IMMEDIATE_DATA]);
|
err = nft_data_init(ctx, &priv->data, &desc, tb[NFTA_IMMEDIATE_DATA]);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
priv->dlen = desc.len;
|
priv->dlen = desc.len;
|
||||||
|
|
||||||
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_IMMEDIATE_DREG]));
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, &priv->data,
|
err = nft_validate_register_store(ctx, priv->dreg, &priv->data,
|
||||||
desc.type, desc.len);
|
desc.type, desc.len);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
|
|
@ -80,10 +80,6 @@ static int nft_lookup_init(const struct nft_ctx *ctx,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_LOOKUP_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_LOOKUP_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
set->dtype, set->dlen);
|
set->dtype, set->dlen);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
|
|
@ -218,7 +218,6 @@ int nft_meta_get_init(const struct nft_ctx *ctx,
|
||||||
{
|
{
|
||||||
struct nft_meta *priv = nft_expr_priv(expr);
|
struct nft_meta *priv = nft_expr_priv(expr);
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
int err;
|
|
||||||
|
|
||||||
priv->key = ntohl(nla_get_be32(tb[NFTA_META_KEY]));
|
priv->key = ntohl(nla_get_be32(tb[NFTA_META_KEY]));
|
||||||
switch (priv->key) {
|
switch (priv->key) {
|
||||||
|
@ -258,16 +257,8 @@ int nft_meta_get_init(const struct nft_ctx *ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_META_DREG]));
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_META_DREG]));
|
||||||
err = nft_validate_output_register(priv->dreg);
|
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
if (err < 0)
|
NFT_DATA_VALUE, len);
|
||||||
return err;
|
|
||||||
|
|
||||||
err = nft_validate_register_store(ctx, priv->dreg, NULL,
|
|
||||||
NFT_DATA_VALUE, len);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nft_meta_get_init);
|
EXPORT_SYMBOL_GPL(nft_meta_get_init);
|
||||||
|
|
||||||
|
|
|
@ -62,16 +62,12 @@ static int nft_payload_init(const struct nft_ctx *ctx,
|
||||||
const struct nlattr * const tb[])
|
const struct nlattr * const tb[])
|
||||||
{
|
{
|
||||||
struct nft_payload *priv = nft_expr_priv(expr);
|
struct nft_payload *priv = nft_expr_priv(expr);
|
||||||
int err;
|
|
||||||
|
|
||||||
priv->base = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_BASE]));
|
priv->base = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_BASE]));
|
||||||
priv->offset = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_OFFSET]));
|
priv->offset = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_OFFSET]));
|
||||||
priv->len = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_LEN]));
|
priv->len = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_LEN]));
|
||||||
|
priv->dreg = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_DREG]));
|
||||||
|
|
||||||
priv->dreg = ntohl(nla_get_be32(tb[NFTA_PAYLOAD_DREG]));
|
|
||||||
err = nft_validate_output_register(priv->dreg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
return nft_validate_register_store(ctx, priv->dreg, NULL,
|
||||||
NFT_DATA_VALUE, priv->len);
|
NFT_DATA_VALUE, priv->len);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue