mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
netfilter: nf_tables: Fix percpu address space issues in nf_tables_api.c
Compiling nf_tables_api.c results in several sparse warnings:
nf_tables_api.c:2077:31: warning: incorrect type in return expression (different address spaces)
nf_tables_api.c:2080:31: warning: incorrect type in return expression (different address spaces)
nf_tables_api.c:2084:31: warning: incorrect type in return expression (different address spaces)
nf_tables_api.c:2740:23: warning: incorrect type in assignment (different address spaces)
nf_tables_api.c:2752:38: warning: incorrect type in assignment (different address spaces)
nf_tables_api.c:2798:21: warning: incorrect type in argument 1 (different address spaces)
Use {ERR_PTR,IS_ERR,PTR_ERR}_PCPU() macros when crossing between generic
and percpu address spaces and add __percpu annotation to *stats pointer
to fix these warnings.
Found by GCC's named address space checks.
There were no changes in the resulting object files.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
6c959fd5e1
commit
0741f55593
|
|
@ -2082,14 +2082,14 @@ static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr)
|
|||
err = nla_parse_nested_deprecated(tb, NFTA_COUNTER_MAX, attr,
|
||||
nft_counter_policy, NULL);
|
||||
if (err < 0)
|
||||
return ERR_PTR(err);
|
||||
return ERR_PTR_PCPU(err);
|
||||
|
||||
if (!tb[NFTA_COUNTER_BYTES] || !tb[NFTA_COUNTER_PACKETS])
|
||||
return ERR_PTR(-EINVAL);
|
||||
return ERR_PTR_PCPU(-EINVAL);
|
||||
|
||||
newstats = netdev_alloc_pcpu_stats(struct nft_stats);
|
||||
if (newstats == NULL)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
return ERR_PTR_PCPU(-ENOMEM);
|
||||
|
||||
/* Restore old counters on this cpu, no problem. Per-cpu statistics
|
||||
* are not exposed to userspace.
|
||||
|
|
@ -2533,10 +2533,10 @@ static int nf_tables_addchain(struct nft_ctx *ctx, u8 family, u8 genmask,
|
|||
|
||||
if (nla[NFTA_CHAIN_COUNTERS]) {
|
||||
stats = nft_stats_alloc(nla[NFTA_CHAIN_COUNTERS]);
|
||||
if (IS_ERR(stats)) {
|
||||
if (IS_ERR_PCPU(stats)) {
|
||||
nft_chain_release_hook(&hook);
|
||||
kfree(basechain);
|
||||
return PTR_ERR(stats);
|
||||
return PTR_ERR_PCPU(stats);
|
||||
}
|
||||
rcu_assign_pointer(basechain->stats, stats);
|
||||
}
|
||||
|
|
@ -2650,7 +2650,7 @@ static int nf_tables_updchain(struct nft_ctx *ctx, u8 genmask, u8 policy,
|
|||
struct nft_table *table = ctx->table;
|
||||
struct nft_chain *chain = ctx->chain;
|
||||
struct nft_chain_hook hook = {};
|
||||
struct nft_stats *stats = NULL;
|
||||
struct nft_stats __percpu *stats = NULL;
|
||||
struct nft_hook *h, *next;
|
||||
struct nf_hook_ops *ops;
|
||||
struct nft_trans *trans;
|
||||
|
|
@ -2746,8 +2746,8 @@ static int nf_tables_updchain(struct nft_ctx *ctx, u8 genmask, u8 policy,
|
|||
}
|
||||
|
||||
stats = nft_stats_alloc(nla[NFTA_CHAIN_COUNTERS]);
|
||||
if (IS_ERR(stats)) {
|
||||
err = PTR_ERR(stats);
|
||||
if (IS_ERR_PCPU(stats)) {
|
||||
err = PTR_ERR_PCPU(stats);
|
||||
goto err_hooks;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user