/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) || |