mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +00:00
pkt_sched: namespace aware act_mirred
Eric Dumazet pointed out that act_mirred needs to find the current net_ns, and struct net pointer is not provided in the call chain. His original patch made use of current->nsproxy->net_ns to find the network namespace, but this fails to work correctly for userspace code that makes use of netlink sockets in different network namespaces. Instead, pass the "struct net *" down along the call chain to where it is needed. This version removes the ifb changes as Eric has submitted that patch separately, but is otherwise identical to the previous version. Signed-off-by: Benjamin LaHaise <bcrl@kvack.org> Tested-by: Eric Dumazet <eric.dumazet@gmail.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6059283378
commit
c1b52739e4
22 changed files with 94 additions and 72 deletions
|
@ -321,7 +321,7 @@ replay:
|
|||
}
|
||||
}
|
||||
|
||||
err = tp->ops->change(skb, tp, cl, t->tcm_handle, tca, &fh);
|
||||
err = tp->ops->change(net, skb, tp, cl, t->tcm_handle, tca, &fh);
|
||||
if (err == 0) {
|
||||
if (tp_created) {
|
||||
spin_lock_bh(root_lock);
|
||||
|
@ -508,7 +508,7 @@ void tcf_exts_destroy(struct tcf_proto *tp, struct tcf_exts *exts)
|
|||
}
|
||||
EXPORT_SYMBOL(tcf_exts_destroy);
|
||||
|
||||
int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
|
||||
int tcf_exts_validate(struct net *net, struct tcf_proto *tp, struct nlattr **tb,
|
||||
struct nlattr *rate_tlv, struct tcf_exts *exts,
|
||||
const struct tcf_ext_map *map)
|
||||
{
|
||||
|
@ -519,7 +519,7 @@ int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
|
|||
struct tc_action *act;
|
||||
|
||||
if (map->police && tb[map->police]) {
|
||||
act = tcf_action_init_1(tb[map->police], rate_tlv,
|
||||
act = tcf_action_init_1(net, tb[map->police], rate_tlv,
|
||||
"police", TCA_ACT_NOREPLACE,
|
||||
TCA_ACT_BIND);
|
||||
if (IS_ERR(act))
|
||||
|
@ -528,8 +528,9 @@ int tcf_exts_validate(struct tcf_proto *tp, struct nlattr **tb,
|
|||
act->type = TCA_OLD_COMPAT;
|
||||
exts->action = act;
|
||||
} else if (map->action && tb[map->action]) {
|
||||
act = tcf_action_init(tb[map->action], rate_tlv, NULL,
|
||||
TCA_ACT_NOREPLACE, TCA_ACT_BIND);
|
||||
act = tcf_action_init(net, tb[map->action], rate_tlv,
|
||||
NULL, TCA_ACT_NOREPLACE,
|
||||
TCA_ACT_BIND);
|
||||
if (IS_ERR(act))
|
||||
return PTR_ERR(act);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue