/branches/18.06.1/target/linux/generic/backport-4.14/303-v4.16-netfilter-nf_tables-remove-multihook-chains-and-fami.patch |
@@ -228,7 +228,7 @@ |
err1: |
nf_tables_chain_destroy(chain); |
|
@@ -1478,13 +1469,12 @@ static int nf_tables_updchain(struct nft |
@@ -1478,14 +1469,13 @@ static int nf_tables_updchain(struct nft |
const struct nlattr * const *nla = ctx->nla; |
struct nft_table *table = ctx->table; |
struct nft_chain *chain = ctx->chain; |
@@ -236,6 +236,7 @@ |
struct nft_base_chain *basechain; |
struct nft_stats *stats = NULL; |
struct nft_chain_hook hook; |
const struct nlattr *name; |
struct nf_hook_ops *ops; |
struct nft_trans *trans; |
- int err, i; |
@@ -243,7 +244,7 @@ |
|
if (nla[NFTA_CHAIN_HOOK]) { |
if (!nft_is_base_chain(chain)) |
@@ -1501,14 +1491,12 @@ static int nf_tables_updchain(struct nft |
@@ -1502,14 +1492,12 @@ static int nf_tables_updchain(struct nft |
return -EBUSY; |
} |
|
@@ -264,7 +265,7 @@ |
} |
nft_chain_release_hook(&hook); |
} |
@@ -5129,10 +5117,9 @@ static int nf_tables_commit(struct net * |
@@ -5113,10 +5101,9 @@ static int nf_tables_commit(struct net * |
case NFT_MSG_DELCHAIN: |
list_del_rcu(&trans->ctx.chain->list); |
nf_tables_chain_notify(&trans->ctx, NFT_MSG_DELCHAIN); |
@@ -278,7 +279,7 @@ |
break; |
case NFT_MSG_NEWRULE: |
nft_clear(trans->ctx.net, nft_trans_rule(trans)); |
@@ -5269,10 +5256,9 @@ static int nf_tables_abort(struct net *n |
@@ -5253,10 +5240,9 @@ static int nf_tables_abort(struct net *n |
} else { |
trans->ctx.table->use--; |
list_del_rcu(&trans->ctx.chain->list); |
@@ -292,7 +293,7 @@ |
} |
break; |
case NFT_MSG_DELCHAIN: |
@@ -5375,7 +5361,7 @@ int nft_chain_validate_hooks(const struc |
@@ -5359,7 +5345,7 @@ int nft_chain_validate_hooks(const struc |
if (nft_is_base_chain(chain)) { |
basechain = nft_base_chain(chain); |
|
@@ -301,7 +302,7 @@ |
return 0; |
|
return -EOPNOTSUPP; |
@@ -5857,8 +5843,7 @@ int __nft_release_basechain(struct nft_c |
@@ -5841,8 +5827,7 @@ int __nft_release_basechain(struct nft_c |
|
BUG_ON(!nft_is_base_chain(ctx->chain)); |
|
@@ -311,7 +312,7 @@ |
list_for_each_entry_safe(rule, nr, &ctx->chain->rules, list) { |
list_del(&rule->list); |
ctx->chain->use--; |
@@ -5887,8 +5872,7 @@ static void __nft_release_afinfo(struct |
@@ -5871,8 +5856,7 @@ static void __nft_release_afinfo(struct |
|
list_for_each_entry_safe(table, nt, &afi->tables, list) { |
list_for_each_entry(chain, &table->chains, list) |
@@ -379,7 +380,7 @@ |
|
par->hook_mask = 1 << ops->hooknum; |
} else { |
@@ -565,7 +565,7 @@ static int nft_match_validate(const stru |
@@ -564,7 +564,7 @@ static int nft_match_validate(const stru |
if (nft_is_base_chain(ctx->chain)) { |
const struct nft_base_chain *basechain = |
nft_base_chain(ctx->chain); |
/branches/18.06.1/target/linux/generic/backport-4.14/321-v4.16-netfilter-nf_tables-add-flow-table-netlink-frontend.patch |
@@ -292,7 +292,7 @@ |
list_for_each_entry_safe(obj, ne, &ctx->table->objects, list) { |
err = nft_delobj(ctx, obj); |
if (err < 0) |
@@ -4829,6 +4873,605 @@ static void nf_tables_obj_notify(const s |
@@ -4818,6 +4862,605 @@ static void nf_tables_obj_notify(const s |
ctx->afi->family, ctx->report, GFP_KERNEL); |
} |
|
@@ -898,7 +898,7 @@ |
static int nf_tables_fill_gen_info(struct sk_buff *skb, struct net *net, |
u32 portid, u32 seq) |
{ |
@@ -4859,6 +5502,49 @@ nla_put_failure: |
@@ -4848,6 +5491,49 @@ nla_put_failure: |
return -EMSGSIZE; |
} |
|
@@ -948,7 +948,7 @@ |
static void nf_tables_gen_notify(struct net *net, struct sk_buff *skb, |
int event) |
{ |
@@ -5011,6 +5697,21 @@ static const struct nfnl_callback nf_tab |
@@ -5000,6 +5686,21 @@ static const struct nfnl_callback nf_tab |
.attr_count = NFTA_OBJ_MAX, |
.policy = nft_obj_policy, |
}, |
@@ -970,7 +970,7 @@ |
}; |
|
static void nft_chain_commit_update(struct nft_trans *trans) |
@@ -5059,6 +5760,9 @@ static void nf_tables_commit_release(str |
@@ -5045,6 +5746,9 @@ static void nf_tables_commit_release(str |
case NFT_MSG_DELOBJ: |
nft_obj_destroy(nft_trans_obj(trans)); |
break; |
@@ -980,7 +980,7 @@ |
} |
kfree(trans); |
} |
@@ -5178,6 +5882,21 @@ static int nf_tables_commit(struct net * |
@@ -5162,6 +5866,21 @@ static int nf_tables_commit(struct net * |
nf_tables_obj_notify(&trans->ctx, nft_trans_obj(trans), |
NFT_MSG_DELOBJ); |
break; |
@@ -1002,7 +1002,7 @@ |
} |
} |
|
@@ -5215,6 +5934,9 @@ static void nf_tables_abort_release(stru |
@@ -5199,6 +5918,9 @@ static void nf_tables_abort_release(stru |
case NFT_MSG_NEWOBJ: |
nft_obj_destroy(nft_trans_obj(trans)); |
break; |
@@ -1012,7 +1012,7 @@ |
} |
kfree(trans); |
} |
@@ -5306,6 +6028,17 @@ static int nf_tables_abort(struct net *n |
@@ -5290,6 +6012,17 @@ static int nf_tables_abort(struct net *n |
nft_clear(trans->ctx.net, nft_trans_obj(trans)); |
nft_trans_destroy(trans); |
break; |
@@ -1030,7 +1030,7 @@ |
} |
} |
|
@@ -5856,6 +6589,7 @@ EXPORT_SYMBOL_GPL(__nft_release_basechai |
@@ -5840,6 +6573,7 @@ EXPORT_SYMBOL_GPL(__nft_release_basechai |
/* Called by nft_unregister_afinfo() from __net_exit path, nfnl_lock is held. */ |
static void __nft_release_afinfo(struct net *net, struct nft_af_info *afi) |
{ |
@@ -1038,7 +1038,7 @@ |
struct nft_table *table, *nt; |
struct nft_chain *chain, *nc; |
struct nft_object *obj, *ne; |
@@ -5869,6 +6603,9 @@ static void __nft_release_afinfo(struct |
@@ -5853,6 +6587,9 @@ static void __nft_release_afinfo(struct |
list_for_each_entry_safe(table, nt, &afi->tables, list) { |
list_for_each_entry(chain, &table->chains, list) |
nf_tables_unregister_hook(net, table, chain); |
@@ -1048,7 +1048,7 @@ |
/* No packets are walking on these chains anymore. */ |
ctx.table = table; |
list_for_each_entry(chain, &table->chains, list) { |
@@ -5879,6 +6616,11 @@ static void __nft_release_afinfo(struct |
@@ -5863,6 +6600,11 @@ static void __nft_release_afinfo(struct |
nf_tables_rule_release(&ctx, rule); |
} |
} |
@@ -1060,7 +1060,7 @@ |
list_for_each_entry_safe(set, ns, &table->sets, list) { |
list_del(&set->list); |
table->use--; |
@@ -5922,6 +6664,8 @@ static int __init nf_tables_module_init( |
@@ -5906,6 +6648,8 @@ static int __init nf_tables_module_init( |
if (err < 0) |
goto err3; |
|
@@ -1069,7 +1069,7 @@ |
pr_info("nf_tables: (c) 2007-2009 Patrick McHardy <kaber@trash.net>\n"); |
return register_pernet_subsys(&nf_tables_net_ops); |
err3: |
@@ -5936,6 +6680,7 @@ static void __exit nf_tables_module_exit |
@@ -5920,6 +6664,7 @@ static void __exit nf_tables_module_exit |
{ |
unregister_pernet_subsys(&nf_tables_net_ops); |
nfnetlink_subsys_unregister(&nf_tables_subsys); |
/branches/18.06.1/target/linux/generic/backport-4.14/335-v4.16-netfilter-nf_tables-add-single-table-list-for-all-fa.patch |
@@ -467,7 +467,7 @@ |
if (err < 0) |
return err; |
|
@@ -1508,7 +1503,7 @@ static int nf_tables_updchain(struct nft |
@@ -1509,7 +1504,7 @@ static int nf_tables_updchain(struct nft |
if (!nft_is_base_chain(chain)) |
return -EBUSY; |
|
@@ -476,7 +476,7 @@ |
create); |
if (err < 0) |
return err; |
@@ -1618,7 +1613,8 @@ static int nf_tables_newchain(struct net |
@@ -1602,7 +1597,8 @@ static int nf_tables_newchain(struct net |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -486,7 +486,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -1658,7 +1654,7 @@ static int nf_tables_newchain(struct net |
@@ -1642,7 +1638,7 @@ static int nf_tables_newchain(struct net |
} |
} |
|
@@ -495,7 +495,7 @@ |
|
if (chain != NULL) { |
if (nlh->nlmsg_flags & NLM_F_EXCL) |
@@ -1692,7 +1688,8 @@ static int nf_tables_delchain(struct net |
@@ -1676,7 +1672,8 @@ static int nf_tables_delchain(struct net |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -505,7 +505,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -1704,7 +1701,7 @@ static int nf_tables_delchain(struct net |
@@ -1688,7 +1685,7 @@ static int nf_tables_delchain(struct net |
chain->use > 0) |
return -EBUSY; |
|
@@ -514,7 +514,7 @@ |
|
use = chain->use; |
list_for_each_entry(rule, &chain->rules, list) { |
@@ -1869,7 +1866,7 @@ static int nf_tables_expr_parse(const st |
@@ -1853,7 +1850,7 @@ static int nf_tables_expr_parse(const st |
if (err < 0) |
return err; |
|
@@ -523,7 +523,7 @@ |
if (IS_ERR(type)) |
return PTR_ERR(type); |
|
@@ -2093,7 +2090,7 @@ static void nf_tables_rule_notify(const |
@@ -2077,7 +2074,7 @@ static void nf_tables_rule_notify(const |
goto err; |
|
err = nf_tables_fill_rule_info(skb, ctx->net, ctx->portid, ctx->seq, |
@@ -532,7 +532,7 @@ |
ctx->chain, rule); |
if (err < 0) { |
kfree_skb(skb); |
@@ -2117,7 +2114,6 @@ static int nf_tables_dump_rules(struct s |
@@ -2101,7 +2098,6 @@ static int nf_tables_dump_rules(struct s |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh); |
const struct nft_rule_dump_ctx *ctx = cb->data; |
@@ -540,7 +540,7 @@ |
const struct nft_table *table; |
const struct nft_chain *chain; |
const struct nft_rule *rule; |
@@ -2128,39 +2124,37 @@ static int nf_tables_dump_rules(struct s |
@@ -2112,39 +2108,37 @@ static int nf_tables_dump_rules(struct s |
rcu_read_lock(); |
cb->seq = net->nft.base_seq; |
|
@@ -605,7 +605,7 @@ |
} |
} |
} |
@@ -2238,7 +2232,8 @@ static int nf_tables_getrule(struct net |
@@ -2222,7 +2216,8 @@ static int nf_tables_getrule(struct net |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -615,7 +615,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -2323,7 +2318,8 @@ static int nf_tables_newrule(struct net |
@@ -2306,7 +2301,8 @@ static int nf_tables_newrule(struct net |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -625,7 +625,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -2362,7 +2358,7 @@ static int nf_tables_newrule(struct net |
@@ -2345,7 +2341,7 @@ static int nf_tables_newrule(struct net |
return PTR_ERR(old_rule); |
} |
|
@@ -634,7 +634,7 @@ |
|
n = 0; |
size = 0; |
@@ -2495,7 +2491,8 @@ static int nf_tables_delrule(struct net |
@@ -2485,7 +2481,8 @@ static int nf_tables_delrule(struct net |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -644,7 +644,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -2506,7 +2503,7 @@ static int nf_tables_delrule(struct net |
@@ -2496,7 +2493,7 @@ static int nf_tables_delrule(struct net |
return PTR_ERR(chain); |
} |
|
@@ -653,7 +653,7 @@ |
|
if (chain) { |
if (nla[NFTA_RULE_HANDLE]) { |
@@ -2704,13 +2701,13 @@ static int nft_ctx_init_from_setattr(str |
@@ -2694,13 +2691,13 @@ static int nft_ctx_init_from_setattr(str |
if (afi == NULL) |
return -EAFNOSUPPORT; |
|
@@ -670,7 +670,7 @@ |
return 0; |
} |
|
@@ -2838,7 +2835,7 @@ static int nf_tables_fill_set(struct sk_ |
@@ -2828,7 +2825,7 @@ static int nf_tables_fill_set(struct sk_ |
goto nla_put_failure; |
|
nfmsg = nlmsg_data(nlh); |
@@ -679,7 +679,7 @@ |
nfmsg->version = NFNETLINK_V0; |
nfmsg->res_id = htons(ctx->net->nft.base_seq & 0xffff); |
|
@@ -2930,10 +2927,8 @@ static int nf_tables_dump_sets(struct sk |
@@ -2920,10 +2917,8 @@ static int nf_tables_dump_sets(struct sk |
{ |
const struct nft_set *set; |
unsigned int idx, s_idx = cb->args[0]; |
@@ -690,7 +690,7 @@ |
struct nft_ctx *ctx = cb->data, ctx_set; |
|
if (cb->args[1]) |
@@ -2942,51 +2937,44 @@ static int nf_tables_dump_sets(struct sk |
@@ -2932,51 +2927,44 @@ static int nf_tables_dump_sets(struct sk |
rcu_read_lock(); |
cb->seq = net->nft.base_seq; |
|
@@ -771,7 +771,7 @@ |
} |
cb->args[1] = 1; |
done: |
@@ -3196,11 +3184,12 @@ static int nf_tables_newset(struct net * |
@@ -3186,11 +3174,12 @@ static int nf_tables_newset(struct net * |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -786,7 +786,7 @@ |
|
set = nf_tables_set_lookup(table, nla[NFTA_SET_NAME], genmask); |
if (IS_ERR(set)) { |
@@ -3469,12 +3458,12 @@ static int nft_ctx_init_from_elemattr(st |
@@ -3459,12 +3448,12 @@ static int nft_ctx_init_from_elemattr(st |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -802,7 +802,7 @@ |
return 0; |
} |
|
@@ -3579,7 +3568,6 @@ static int nf_tables_dump_set(struct sk_ |
@@ -3569,7 +3558,6 @@ static int nf_tables_dump_set(struct sk_ |
{ |
struct nft_set_dump_ctx *dump_ctx = cb->data; |
struct net *net = sock_net(skb->sk); |
@@ -810,7 +810,7 @@ |
struct nft_table *table; |
struct nft_set *set; |
struct nft_set_dump_args args; |
@@ -3591,21 +3579,19 @@ static int nf_tables_dump_set(struct sk_ |
@@ -3581,21 +3569,19 @@ static int nf_tables_dump_set(struct sk_ |
int event; |
|
rcu_read_lock(); |
@@ -841,7 +841,7 @@ |
} |
break; |
} |
@@ -3625,7 +3611,7 @@ static int nf_tables_dump_set(struct sk_ |
@@ -3615,7 +3601,7 @@ static int nf_tables_dump_set(struct sk_ |
goto nla_put_failure; |
|
nfmsg = nlmsg_data(nlh); |
@@ -850,7 +850,7 @@ |
nfmsg->version = NFNETLINK_V0; |
nfmsg->res_id = htons(net->nft.base_seq & 0xffff); |
|
@@ -3727,7 +3713,7 @@ static int nf_tables_fill_setelem_info(s |
@@ -3717,7 +3703,7 @@ static int nf_tables_fill_setelem_info(s |
goto nla_put_failure; |
|
nfmsg = nlmsg_data(nlh); |
@@ -859,7 +859,7 @@ |
nfmsg->version = NFNETLINK_V0; |
nfmsg->res_id = htons(ctx->net->nft.base_seq & 0xffff); |
|
@@ -3971,7 +3957,7 @@ static int nft_add_set_elem(struct nft_c |
@@ -3961,7 +3947,7 @@ static int nft_add_set_elem(struct nft_c |
list_for_each_entry(binding, &set->bindings, list) { |
struct nft_ctx bind_ctx = { |
.net = ctx->net, |
@@ -868,7 +868,7 @@ |
.table = ctx->table, |
.chain = (struct nft_chain *)binding->chain, |
}; |
@@ -4521,7 +4507,8 @@ static int nf_tables_newobj(struct net * |
@@ -4510,7 +4496,8 @@ static int nf_tables_newobj(struct net * |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -878,7 +878,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -4539,7 +4526,7 @@ static int nf_tables_newobj(struct net * |
@@ -4528,7 +4515,7 @@ static int nf_tables_newobj(struct net * |
return 0; |
} |
|
@@ -887,7 +887,7 @@ |
|
type = nft_obj_type_get(objtype); |
if (IS_ERR(type)) |
@@ -4616,7 +4603,6 @@ struct nft_obj_filter { |
@@ -4605,7 +4592,6 @@ struct nft_obj_filter { |
static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb) |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh); |
@@ -895,7 +895,7 @@ |
const struct nft_table *table; |
unsigned int idx = 0, s_idx = cb->args[0]; |
struct nft_obj_filter *filter = cb->data; |
@@ -4631,38 +4617,37 @@ static int nf_tables_dump_obj(struct sk_ |
@@ -4620,38 +4606,37 @@ static int nf_tables_dump_obj(struct sk_ |
rcu_read_lock(); |
cb->seq = net->nft.base_seq; |
|
@@ -960,7 +960,7 @@ |
} |
} |
done: |
@@ -4749,7 +4734,8 @@ static int nf_tables_getobj(struct net * |
@@ -4738,7 +4723,8 @@ static int nf_tables_getobj(struct net * |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -970,7 +970,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -4809,7 +4795,8 @@ static int nf_tables_delobj(struct net * |
@@ -4798,7 +4784,8 @@ static int nf_tables_delobj(struct net * |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -980,7 +980,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -4820,7 +4807,7 @@ static int nf_tables_delobj(struct net * |
@@ -4809,7 +4796,7 @@ static int nf_tables_delobj(struct net * |
if (obj->use > 0) |
return -EBUSY; |
|
@@ -989,7 +989,7 @@ |
|
return nft_delobj(&ctx, obj); |
} |
@@ -4858,7 +4845,7 @@ static void nf_tables_obj_notify(const s |
@@ -4847,7 +4834,7 @@ static void nf_tables_obj_notify(const s |
struct nft_object *obj, int event) |
{ |
nft_obj_notify(ctx->net, ctx->table, obj, ctx->portid, ctx->seq, event, |
@@ -998,7 +998,7 @@ |
} |
|
/* |
@@ -5048,7 +5035,7 @@ void nft_flow_table_iterate(struct net * |
@@ -5037,7 +5024,7 @@ void nft_flow_table_iterate(struct net * |
|
rcu_read_lock(); |
list_for_each_entry_rcu(afi, &net->nft.af_info, list) { |
@@ -1007,7 +1007,7 @@ |
list_for_each_entry_rcu(flowtable, &table->flowtables, list) { |
iter(&flowtable->data, data); |
} |
@@ -5096,7 +5083,8 @@ static int nf_tables_newflowtable(struct |
@@ -5085,7 +5072,8 @@ static int nf_tables_newflowtable(struct |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -1017,7 +1017,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -5113,7 +5101,7 @@ static int nf_tables_newflowtable(struct |
@@ -5102,7 +5090,7 @@ static int nf_tables_newflowtable(struct |
return 0; |
} |
|
@@ -1026,7 +1026,7 @@ |
|
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL); |
if (!flowtable) |
@@ -5194,7 +5182,8 @@ static int nf_tables_delflowtable(struct |
@@ -5183,7 +5171,8 @@ static int nf_tables_delflowtable(struct |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -1036,7 +1036,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -5205,7 +5194,7 @@ static int nf_tables_delflowtable(struct |
@@ -5194,7 +5183,7 @@ static int nf_tables_delflowtable(struct |
if (flowtable->use > 0) |
return -EBUSY; |
|
@@ -1045,7 +1045,7 @@ |
|
return nft_delflowtable(&ctx, flowtable); |
} |
@@ -5274,40 +5263,37 @@ static int nf_tables_dump_flowtable(stru |
@@ -5263,40 +5252,37 @@ static int nf_tables_dump_flowtable(stru |
struct net *net = sock_net(skb->sk); |
int family = nfmsg->nfgen_family; |
struct nft_flowtable *flowtable; |
@@ -1107,7 +1107,7 @@ |
} |
} |
done: |
@@ -5392,7 +5378,8 @@ static int nf_tables_getflowtable(struct |
@@ -5381,7 +5367,8 @@ static int nf_tables_getflowtable(struct |
if (IS_ERR(afi)) |
return PTR_ERR(afi); |
|
@@ -1117,7 +1117,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -5435,7 +5422,7 @@ static void nf_tables_flowtable_notify(s |
@@ -5424,7 +5411,7 @@ static void nf_tables_flowtable_notify(s |
|
err = nf_tables_fill_flowtable_info(skb, ctx->net, ctx->portid, |
ctx->seq, event, 0, |
@@ -1126,7 +1126,7 @@ |
if (err < 0) { |
kfree_skb(skb); |
goto err; |
@@ -5513,17 +5500,14 @@ static int nf_tables_flowtable_event(str |
@@ -5502,17 +5489,14 @@ static int nf_tables_flowtable_event(str |
struct net_device *dev = netdev_notifier_info_to_dev(ptr); |
struct nft_flowtable *flowtable; |
struct nft_table *table; |
@@ -1147,7 +1147,7 @@ |
} |
} |
nfnl_unlock(NFNL_SUBSYS_NFTABLES); |
@@ -6549,6 +6533,7 @@ EXPORT_SYMBOL_GPL(nft_data_dump); |
@@ -6533,6 +6517,7 @@ EXPORT_SYMBOL_GPL(nft_data_dump); |
static int __net_init nf_tables_init_net(struct net *net) |
{ |
INIT_LIST_HEAD(&net->nft.af_info); |
@@ -1155,7 +1155,7 @@ |
INIT_LIST_HEAD(&net->nft.commit_list); |
net->nft.base_seq = 1; |
return 0; |
@@ -6585,10 +6570,10 @@ static void __nft_release_afinfo(struct |
@@ -6569,10 +6554,10 @@ static void __nft_release_afinfo(struct |
struct nft_set *set, *ns; |
struct nft_ctx ctx = { |
.net = net, |
@@ -1255,7 +1255,7 @@ |
par->nft_compat = true; |
} |
|
@@ -503,7 +503,7 @@ __nft_match_destroy(const struct nft_ctx |
@@ -502,7 +502,7 @@ __nft_match_destroy(const struct nft_ctx |
par.net = ctx->net; |
par.match = match; |
par.matchinfo = info; |
@@ -1264,7 +1264,7 @@ |
if (par.match->destroy != NULL) |
par.match->destroy(&par); |
|
@@ -733,7 +733,7 @@ nft_match_select_ops(const struct nft_ct |
@@ -732,7 +732,7 @@ nft_match_select_ops(const struct nft_ct |
|
mt_name = nla_data(tb[NFTA_MATCH_NAME]); |
rev = ntohl(nla_get_be32(tb[NFTA_MATCH_REV])); |
@@ -1273,7 +1273,7 @@ |
|
/* Re-use the existing match if it's already loaded. */ |
list_for_each_entry(nft_match, &nft_match_list, head) { |
@@ -824,7 +824,7 @@ nft_target_select_ops(const struct nft_c |
@@ -823,7 +823,7 @@ nft_target_select_ops(const struct nft_c |
|
tg_name = nla_data(tb[NFTA_TARGET_NAME]); |
rev = ntohl(nla_get_be32(tb[NFTA_TARGET_REV])); |
@@ -1280,8 +1280,8 @@ |
- family = ctx->afi->family; |
+ family = ctx->family; |
|
if (strcmp(tg_name, XT_ERROR_TARGET) == 0 || |
strcmp(tg_name, XT_STANDARD_TARGET) == 0 || |
/* Re-use the existing target if it's already loaded. */ |
list_for_each_entry(nft_target, &nft_target_list, head) { |
--- a/net/netfilter/nft_ct.c |
+++ b/net/netfilter/nft_ct.c |
@@ -405,7 +405,7 @@ static int nft_ct_get_init(const struct |
/branches/18.06.1/target/linux/generic/backport-4.14/338-v4.16-netfilter-nf_tables-get-rid-of-struct-nft_af_info-ab.patch |
@@ -540,7 +540,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -1597,7 +1505,6 @@ static int nf_tables_newchain(struct net |
@@ -1581,7 +1489,6 @@ static int nf_tables_newchain(struct net |
const struct nlattr * uninitialized_var(name); |
u8 genmask = nft_genmask_next(net); |
int family = nfmsg->nfgen_family; |
@@ -548,7 +548,7 @@ |
struct nft_table *table; |
struct nft_chain *chain; |
u8 policy = NF_ACCEPT; |
@@ -1607,11 +1514,7 @@ static int nf_tables_newchain(struct net |
@@ -1591,11 +1498,7 @@ static int nf_tables_newchain(struct net |
|
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false; |
|
@@ -561,7 +561,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -1652,7 +1555,7 @@ static int nf_tables_newchain(struct net |
@@ -1636,7 +1539,7 @@ static int nf_tables_newchain(struct net |
} |
} |
|
@@ -570,7 +570,7 @@ |
|
if (chain != NULL) { |
if (nlh->nlmsg_flags & NLM_F_EXCL) |
@@ -1673,7 +1576,6 @@ static int nf_tables_delchain(struct net |
@@ -1657,7 +1560,6 @@ static int nf_tables_delchain(struct net |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_next(net); |
@@ -578,7 +578,7 @@ |
struct nft_table *table; |
struct nft_chain *chain; |
struct nft_rule *rule; |
@@ -1682,11 +1584,7 @@ static int nf_tables_delchain(struct net |
@@ -1666,11 +1568,7 @@ static int nf_tables_delchain(struct net |
u32 use; |
int err; |
|
@@ -591,7 +591,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -1699,7 +1597,7 @@ static int nf_tables_delchain(struct net |
@@ -1683,7 +1581,7 @@ static int nf_tables_delchain(struct net |
chain->use > 0) |
return -EBUSY; |
|
@@ -600,7 +600,7 @@ |
|
use = chain->use; |
list_for_each_entry(rule, &chain->rules, list) { |
@@ -2123,7 +2021,7 @@ static int nf_tables_dump_rules(struct s |
@@ -2107,7 +2005,7 @@ static int nf_tables_dump_rules(struct s |
cb->seq = net->nft.base_seq; |
|
list_for_each_entry_rcu(table, &net->nft.tables, list) { |
@@ -609,7 +609,7 @@ |
continue; |
|
if (ctx && ctx->table && strcmp(ctx->table, table->name) != 0) |
@@ -2146,7 +2044,7 @@ static int nf_tables_dump_rules(struct s |
@@ -2130,7 +2028,7 @@ static int nf_tables_dump_rules(struct s |
cb->nlh->nlmsg_seq, |
NFT_MSG_NEWRULE, |
NLM_F_MULTI | NLM_F_APPEND, |
@@ -618,7 +618,7 @@ |
table, chain, rule) < 0) |
goto done; |
|
@@ -2182,7 +2080,6 @@ static int nf_tables_getrule(struct net |
@@ -2166,7 +2064,6 @@ static int nf_tables_getrule(struct net |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_cur(net); |
@@ -626,7 +626,7 @@ |
const struct nft_table *table; |
const struct nft_chain *chain; |
const struct nft_rule *rule; |
@@ -2226,11 +2123,7 @@ static int nf_tables_getrule(struct net |
@@ -2210,11 +2107,7 @@ static int nf_tables_getrule(struct net |
return netlink_dump_start(nlsk, skb, nlh, &c); |
} |
|
@@ -639,7 +639,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -2296,7 +2189,7 @@ static int nf_tables_newrule(struct net |
@@ -2279,7 +2172,7 @@ static int nf_tables_newrule(struct net |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_next(net); |
@@ -648,7 +648,7 @@ |
struct nft_table *table; |
struct nft_chain *chain; |
struct nft_rule *rule, *old_rule = NULL; |
@@ -2312,11 +2205,7 @@ static int nf_tables_newrule(struct net |
@@ -2295,11 +2188,7 @@ static int nf_tables_newrule(struct net |
|
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false; |
|
@@ -661,7 +661,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -2356,7 +2245,7 @@ static int nf_tables_newrule(struct net |
@@ -2339,7 +2228,7 @@ static int nf_tables_newrule(struct net |
return PTR_ERR(old_rule); |
} |
|
@@ -670,7 +670,7 @@ |
|
n = 0; |
size = 0; |
@@ -2478,18 +2367,13 @@ static int nf_tables_delrule(struct net |
@@ -2468,18 +2357,13 @@ static int nf_tables_delrule(struct net |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_next(net); |
@@ -690,7 +690,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -2501,7 +2385,7 @@ static int nf_tables_delrule(struct net |
@@ -2491,7 +2375,7 @@ static int nf_tables_delrule(struct net |
return PTR_ERR(chain); |
} |
|
@@ -699,7 +699,7 @@ |
|
if (chain) { |
if (nla[NFTA_RULE_HANDLE]) { |
@@ -2686,26 +2570,17 @@ static int nft_ctx_init_from_setattr(str |
@@ -2676,26 +2560,17 @@ static int nft_ctx_init_from_setattr(str |
u8 genmask) |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
@@ -729,7 +729,7 @@ |
return 0; |
} |
|
@@ -2937,7 +2812,7 @@ static int nf_tables_dump_sets(struct sk |
@@ -2927,7 +2802,7 @@ static int nf_tables_dump_sets(struct sk |
|
list_for_each_entry_rcu(table, &net->nft.tables, list) { |
if (ctx->family != NFPROTO_UNSPEC && |
@@ -738,7 +738,7 @@ |
continue; |
|
if (ctx->table && ctx->table != table) |
@@ -2958,7 +2833,7 @@ static int nf_tables_dump_sets(struct sk |
@@ -2948,7 +2823,7 @@ static int nf_tables_dump_sets(struct sk |
|
ctx_set = *ctx; |
ctx_set.table = table; |
@@ -747,7 +747,7 @@ |
|
if (nf_tables_fill_set(skb, &ctx_set, set, |
NFT_MSG_NEWSET, |
@@ -3070,8 +2945,8 @@ static int nf_tables_newset(struct net * |
@@ -3060,8 +2935,8 @@ static int nf_tables_newset(struct net * |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_next(net); |
@@ -757,7 +757,7 @@ |
struct nft_table *table; |
struct nft_set *set; |
struct nft_ctx ctx; |
@@ -3178,16 +3053,12 @@ static int nf_tables_newset(struct net * |
@@ -3168,16 +3043,12 @@ static int nf_tables_newset(struct net * |
|
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false; |
|
@@ -776,7 +776,7 @@ |
|
set = nf_tables_set_lookup(table, nla[NFTA_SET_NAME], genmask); |
if (IS_ERR(set)) { |
@@ -3449,19 +3320,15 @@ static int nft_ctx_init_from_elemattr(st |
@@ -3439,19 +3310,15 @@ static int nft_ctx_init_from_elemattr(st |
u8 genmask) |
{ |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
@@ -799,7 +799,7 @@ |
return 0; |
} |
|
@@ -3579,7 +3446,7 @@ static int nf_tables_dump_set(struct sk_ |
@@ -3569,7 +3436,7 @@ static int nf_tables_dump_set(struct sk_ |
rcu_read_lock(); |
list_for_each_entry_rcu(table, &net->nft.tables, list) { |
if (dump_ctx->ctx.family != NFPROTO_UNSPEC && |
@@ -808,7 +808,7 @@ |
continue; |
|
if (table != dump_ctx->ctx.table) |
@@ -3609,7 +3476,7 @@ static int nf_tables_dump_set(struct sk_ |
@@ -3599,7 +3466,7 @@ static int nf_tables_dump_set(struct sk_ |
goto nla_put_failure; |
|
nfmsg = nlmsg_data(nlh); |
@@ -817,7 +817,7 @@ |
nfmsg->version = NFNETLINK_V0; |
nfmsg->res_id = htons(net->nft.base_seq & 0xffff); |
|
@@ -4489,7 +4356,6 @@ static int nf_tables_newobj(struct net * |
@@ -4478,7 +4345,6 @@ static int nf_tables_newobj(struct net * |
const struct nft_object_type *type; |
u8 genmask = nft_genmask_next(net); |
int family = nfmsg->nfgen_family; |
@@ -825,7 +825,7 @@ |
struct nft_table *table; |
struct nft_object *obj; |
struct nft_ctx ctx; |
@@ -4501,11 +4367,7 @@ static int nf_tables_newobj(struct net * |
@@ -4490,11 +4356,7 @@ static int nf_tables_newobj(struct net * |
!nla[NFTA_OBJ_DATA]) |
return -EINVAL; |
|
@@ -838,7 +838,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -4524,7 +4386,7 @@ static int nf_tables_newobj(struct net * |
@@ -4513,7 +4375,7 @@ static int nf_tables_newobj(struct net * |
return 0; |
} |
|
@@ -847,7 +847,7 @@ |
|
type = nft_obj_type_get(objtype); |
if (IS_ERR(type)) |
@@ -4616,7 +4478,7 @@ static int nf_tables_dump_obj(struct sk_ |
@@ -4605,7 +4467,7 @@ static int nf_tables_dump_obj(struct sk_ |
cb->seq = net->nft.base_seq; |
|
list_for_each_entry_rcu(table, &net->nft.tables, list) { |
@@ -856,7 +856,7 @@ |
continue; |
|
list_for_each_entry_rcu(obj, &table->objects, list) { |
@@ -4639,7 +4501,7 @@ static int nf_tables_dump_obj(struct sk_ |
@@ -4628,7 +4490,7 @@ static int nf_tables_dump_obj(struct sk_ |
cb->nlh->nlmsg_seq, |
NFT_MSG_NEWOBJ, |
NLM_F_MULTI | NLM_F_APPEND, |
@@ -865,7 +865,7 @@ |
obj, reset) < 0) |
goto done; |
|
@@ -4697,7 +4559,6 @@ static int nf_tables_getobj(struct net * |
@@ -4686,7 +4548,6 @@ static int nf_tables_getobj(struct net * |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_cur(net); |
int family = nfmsg->nfgen_family; |
@@ -873,7 +873,7 @@ |
const struct nft_table *table; |
struct nft_object *obj; |
struct sk_buff *skb2; |
@@ -4728,11 +4589,7 @@ static int nf_tables_getobj(struct net * |
@@ -4717,11 +4578,7 @@ static int nf_tables_getobj(struct net * |
!nla[NFTA_OBJ_TYPE]) |
return -EINVAL; |
|
@@ -886,7 +886,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -4779,7 +4636,6 @@ static int nf_tables_delobj(struct net * |
@@ -4768,7 +4625,6 @@ static int nf_tables_delobj(struct net * |
const struct nfgenmsg *nfmsg = nlmsg_data(nlh); |
u8 genmask = nft_genmask_next(net); |
int family = nfmsg->nfgen_family; |
@@ -894,7 +894,7 @@ |
struct nft_table *table; |
struct nft_object *obj; |
struct nft_ctx ctx; |
@@ -4789,11 +4645,7 @@ static int nf_tables_delobj(struct net * |
@@ -4778,11 +4634,7 @@ static int nf_tables_delobj(struct net * |
!nla[NFTA_OBJ_NAME]) |
return -EINVAL; |
|
@@ -907,7 +907,7 @@ |
genmask); |
if (IS_ERR(table)) |
return PTR_ERR(table); |
@@ -4805,7 +4657,7 @@ static int nf_tables_delobj(struct net * |
@@ -4794,7 +4646,7 @@ static int nf_tables_delobj(struct net * |
if (obj->use > 0) |
return -EBUSY; |
|
@@ -916,7 +916,7 @@ |
|
return nft_delobj(&ctx, obj); |
} |
@@ -4990,33 +4842,31 @@ err1: |
@@ -4979,33 +4831,31 @@ err1: |
return err; |
} |
|
@@ -956,7 +956,7 @@ |
return ERR_PTR(-EAGAIN); |
} |
#endif |
@@ -5064,7 +4914,6 @@ static int nf_tables_newflowtable(struct |
@@ -5053,7 +4903,6 @@ static int nf_tables_newflowtable(struct |
u8 genmask = nft_genmask_next(net); |
int family = nfmsg->nfgen_family; |
struct nft_flowtable *flowtable; |
@@ -964,7 +964,7 @@ |
struct nft_table *table; |
struct nft_ctx ctx; |
int err, i, k; |
@@ -5074,12 +4923,8 @@ static int nf_tables_newflowtable(struct |
@@ -5063,12 +4912,8 @@ static int nf_tables_newflowtable(struct |
!nla[NFTA_FLOWTABLE_HOOK]) |
return -EINVAL; |
|
@@ -978,7 +978,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -5096,7 +4941,7 @@ static int nf_tables_newflowtable(struct |
@@ -5085,7 +4930,7 @@ static int nf_tables_newflowtable(struct |
return 0; |
} |
|
@@ -987,7 +987,7 @@ |
|
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL); |
if (!flowtable) |
@@ -5109,7 +4954,7 @@ static int nf_tables_newflowtable(struct |
@@ -5098,7 +4943,7 @@ static int nf_tables_newflowtable(struct |
goto err1; |
} |
|
@@ -996,7 +996,7 @@ |
if (IS_ERR(type)) { |
err = PTR_ERR(type); |
goto err2; |
@@ -5169,16 +5014,11 @@ static int nf_tables_delflowtable(struct |
@@ -5158,16 +5003,11 @@ static int nf_tables_delflowtable(struct |
u8 genmask = nft_genmask_next(net); |
int family = nfmsg->nfgen_family; |
struct nft_flowtable *flowtable; |
@@ -1014,7 +1014,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -5189,7 +5029,7 @@ static int nf_tables_delflowtable(struct |
@@ -5178,7 +5018,7 @@ static int nf_tables_delflowtable(struct |
if (flowtable->use > 0) |
return -EBUSY; |
|
@@ -1023,7 +1023,7 @@ |
|
return nft_delflowtable(&ctx, flowtable); |
} |
@@ -5264,7 +5104,7 @@ static int nf_tables_dump_flowtable(stru |
@@ -5253,7 +5093,7 @@ static int nf_tables_dump_flowtable(stru |
cb->seq = net->nft.base_seq; |
|
list_for_each_entry_rcu(table, &net->nft.tables, list) { |
@@ -1032,7 +1032,7 @@ |
continue; |
|
list_for_each_entry_rcu(flowtable, &table->flowtables, list) { |
@@ -5283,7 +5123,7 @@ static int nf_tables_dump_flowtable(stru |
@@ -5272,7 +5112,7 @@ static int nf_tables_dump_flowtable(stru |
cb->nlh->nlmsg_seq, |
NFT_MSG_NEWFLOWTABLE, |
NLM_F_MULTI | NLM_F_APPEND, |
@@ -1041,7 +1041,7 @@ |
goto done; |
|
nl_dump_check_consistent(cb, nlmsg_hdr(skb)); |
@@ -5343,7 +5183,6 @@ static int nf_tables_getflowtable(struct |
@@ -5332,7 +5172,6 @@ static int nf_tables_getflowtable(struct |
u8 genmask = nft_genmask_cur(net); |
int family = nfmsg->nfgen_family; |
struct nft_flowtable *flowtable; |
@@ -1049,7 +1049,7 @@ |
const struct nft_table *table; |
struct sk_buff *skb2; |
int err; |
@@ -5369,12 +5208,8 @@ static int nf_tables_getflowtable(struct |
@@ -5358,12 +5197,8 @@ static int nf_tables_getflowtable(struct |
if (!nla[NFTA_FLOWTABLE_NAME]) |
return -EINVAL; |
|
@@ -1063,7 +1063,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -6545,7 +6380,7 @@ int __nft_release_basechain(struct nft_c |
@@ -6529,7 +6364,7 @@ int __nft_release_basechain(struct nft_c |
} |
EXPORT_SYMBOL_GPL(__nft_release_basechain); |
|
@@ -1072,7 +1072,7 @@ |
{ |
struct nft_flowtable *flowtable, *nf; |
struct nft_table *table, *nt; |
@@ -6558,7 +6393,7 @@ static void __nft_release_afinfo(struct |
@@ -6542,7 +6377,7 @@ static void __nft_release_afinfo(struct |
}; |
|
list_for_each_entry_safe(table, nt, &net->nft.tables, list) { |
@@ -1081,7 +1081,7 @@ |
|
list_for_each_entry(chain, &table->chains, list) |
nf_tables_unregister_hook(net, table, chain); |
@@ -6610,7 +6445,7 @@ static int __net_init nf_tables_init_net |
@@ -6594,7 +6429,7 @@ static int __net_init nf_tables_init_net |
|
static void __net_exit nf_tables_exit_net(struct net *net) |
{ |
/branches/18.06.1/target/linux/generic/backport-4.14/344-v4.16-netfilter-nf_tables-allocate-handle-and-delete-objec.patch |
@@ -244,7 +244,7 @@ |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -1581,6 +1623,7 @@ static int nf_tables_delchain(struct net |
@@ -1565,6 +1607,7 @@ static int nf_tables_delchain(struct net |
struct nft_rule *rule; |
int family = nfmsg->nfgen_family; |
struct nft_ctx ctx; |
@@ -252,7 +252,7 @@ |
u32 use; |
int err; |
|
@@ -1589,7 +1632,12 @@ static int nf_tables_delchain(struct net |
@@ -1573,7 +1616,12 @@ static int nf_tables_delchain(struct net |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -266,7 +266,7 @@ |
if (IS_ERR(chain)) |
return PTR_ERR(chain); |
|
@@ -2557,6 +2605,7 @@ static const struct nla_policy nft_set_p |
@@ -2547,6 +2595,7 @@ static const struct nla_policy nft_set_p |
[NFTA_SET_USERDATA] = { .type = NLA_BINARY, |
.len = NFT_USERDATA_MAXLEN }, |
[NFTA_SET_OBJ_TYPE] = { .type = NLA_U32 }, |
@@ -274,7 +274,7 @@ |
}; |
|
static const struct nla_policy nft_set_desc_policy[NFTA_SET_DESC_MAX + 1] = { |
@@ -2600,6 +2649,22 @@ static struct nft_set *nf_tables_set_loo |
@@ -2590,6 +2639,22 @@ static struct nft_set *nf_tables_set_loo |
return ERR_PTR(-ENOENT); |
} |
|
@@ -297,7 +297,7 @@ |
static struct nft_set *nf_tables_set_lookup_byid(const struct net *net, |
const struct nlattr *nla, |
u8 genmask) |
@@ -2716,6 +2781,9 @@ static int nf_tables_fill_set(struct sk_ |
@@ -2706,6 +2771,9 @@ static int nf_tables_fill_set(struct sk_ |
goto nla_put_failure; |
if (nla_put_string(skb, NFTA_SET_NAME, set->name)) |
goto nla_put_failure; |
@@ -307,7 +307,7 @@ |
if (set->flags != 0) |
if (nla_put_be32(skb, NFTA_SET_FLAGS, htonl(set->flags))) |
goto nla_put_failure; |
@@ -3124,6 +3192,7 @@ static int nf_tables_newset(struct net * |
@@ -3114,6 +3182,7 @@ static int nf_tables_newset(struct net * |
set->udata = udata; |
set->timeout = timeout; |
set->gc_int = gc_int; |
@@ -315,7 +315,7 @@ |
|
err = ops->init(set, &desc, nla); |
if (err < 0) |
@@ -3183,7 +3252,10 @@ static int nf_tables_delset(struct net * |
@@ -3173,7 +3242,10 @@ static int nf_tables_delset(struct net * |
if (err < 0) |
return err; |
|
@@ -327,7 +327,7 @@ |
if (IS_ERR(set)) |
return PTR_ERR(set); |
|
@@ -4244,6 +4316,21 @@ struct nft_object *nf_tables_obj_lookup( |
@@ -4233,6 +4305,21 @@ struct nft_object *nf_tables_obj_lookup( |
} |
EXPORT_SYMBOL_GPL(nf_tables_obj_lookup); |
|
@@ -349,7 +349,7 @@ |
static const struct nla_policy nft_obj_policy[NFTA_OBJ_MAX + 1] = { |
[NFTA_OBJ_TABLE] = { .type = NLA_STRING, |
.len = NFT_TABLE_MAXNAMELEN - 1 }, |
@@ -4251,6 +4338,7 @@ static const struct nla_policy nft_obj_p |
@@ -4240,6 +4327,7 @@ static const struct nla_policy nft_obj_p |
.len = NFT_OBJ_MAXNAMELEN - 1 }, |
[NFTA_OBJ_TYPE] = { .type = NLA_U32 }, |
[NFTA_OBJ_DATA] = { .type = NLA_NESTED }, |
@@ -357,7 +357,7 @@ |
}; |
|
static struct nft_object *nft_obj_init(const struct nft_ctx *ctx, |
@@ -4398,6 +4486,8 @@ static int nf_tables_newobj(struct net * |
@@ -4387,6 +4475,8 @@ static int nf_tables_newobj(struct net * |
goto err1; |
} |
obj->table = table; |
@@ -366,7 +366,7 @@ |
obj->name = nla_strdup(nla[NFTA_OBJ_NAME], GFP_KERNEL); |
if (!obj->name) { |
err = -ENOMEM; |
@@ -4444,7 +4534,9 @@ static int nf_tables_fill_obj_info(struc |
@@ -4433,7 +4523,9 @@ static int nf_tables_fill_obj_info(struc |
nla_put_string(skb, NFTA_OBJ_NAME, obj->name) || |
nla_put_be32(skb, NFTA_OBJ_TYPE, htonl(obj->ops->type->type)) || |
nla_put_be32(skb, NFTA_OBJ_USE, htonl(obj->use)) || |
@@ -377,7 +377,7 @@ |
goto nla_put_failure; |
|
nlmsg_end(skb, nlh); |
@@ -4642,7 +4734,7 @@ static int nf_tables_delobj(struct net * |
@@ -4631,7 +4723,7 @@ static int nf_tables_delobj(struct net * |
u32 objtype; |
|
if (!nla[NFTA_OBJ_TYPE] || |
@@ -386,7 +386,7 @@ |
return -EINVAL; |
|
table = nf_tables_table_lookup(net, nla[NFTA_OBJ_TABLE], family, |
@@ -4651,7 +4743,12 @@ static int nf_tables_delobj(struct net * |
@@ -4640,7 +4732,12 @@ static int nf_tables_delobj(struct net * |
return PTR_ERR(table); |
|
objtype = ntohl(nla_get_be32(nla[NFTA_OBJ_TYPE])); |
@@ -400,7 +400,7 @@ |
if (IS_ERR(obj)) |
return PTR_ERR(obj); |
if (obj->use > 0) |
@@ -4723,6 +4820,7 @@ static const struct nla_policy nft_flowt |
@@ -4712,6 +4809,7 @@ static const struct nla_policy nft_flowt |
[NFTA_FLOWTABLE_NAME] = { .type = NLA_STRING, |
.len = NFT_NAME_MAXLEN - 1 }, |
[NFTA_FLOWTABLE_HOOK] = { .type = NLA_NESTED }, |
@@ -408,7 +408,7 @@ |
}; |
|
struct nft_flowtable *nf_tables_flowtable_lookup(const struct nft_table *table, |
@@ -4740,6 +4838,20 @@ struct nft_flowtable *nf_tables_flowtabl |
@@ -4729,6 +4827,20 @@ struct nft_flowtable *nf_tables_flowtabl |
} |
EXPORT_SYMBOL_GPL(nf_tables_flowtable_lookup); |
|
@@ -429,7 +429,7 @@ |
#define NFT_FLOWTABLE_DEVICE_MAX 8 |
|
static int nf_tables_parse_devices(const struct nft_ctx *ctx, |
@@ -4948,6 +5060,8 @@ static int nf_tables_newflowtable(struct |
@@ -4937,6 +5049,8 @@ static int nf_tables_newflowtable(struct |
return -ENOMEM; |
|
flowtable->table = table; |
@@ -438,7 +438,7 @@ |
flowtable->name = nla_strdup(nla[NFTA_FLOWTABLE_NAME], GFP_KERNEL); |
if (!flowtable->name) { |
err = -ENOMEM; |
@@ -5022,8 +5136,14 @@ static int nf_tables_delflowtable(struct |
@@ -5011,8 +5125,14 @@ static int nf_tables_delflowtable(struct |
if (IS_ERR(table)) |
return PTR_ERR(table); |
|
@@ -455,7 +455,7 @@ |
if (IS_ERR(flowtable)) |
return PTR_ERR(flowtable); |
if (flowtable->use > 0) |
@@ -5056,7 +5176,9 @@ static int nf_tables_fill_flowtable_info |
@@ -5045,7 +5165,9 @@ static int nf_tables_fill_flowtable_info |
|
if (nla_put_string(skb, NFTA_FLOWTABLE_TABLE, flowtable->table->name) || |
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) || |