Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: "Hopefully this is the last batch of networking fixes for 4.14 Fingers crossed... 1) Fix stmmac to use the proper sized OF property read, from Bhadram Varka. 2) Fix use after free in net scheduler tc action code, from Cong Wang. 3) Fix SKB control block mangling in tcp_make_synack(). 4) Use proper locking in fib_dump_info(), from Florian Westphal. 5) Fix IPG encodings in systemport driver, from Florian Fainelli. 6) Fix division by zero in NV TCP congestion control module, from Konstantin Khlebnikov. 7) Fix use after free in nf_reject_ipv4, from Tejaswi Tanikella" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: net: systemport: Correct IPG length settings tcp: do not mangle skb->cb[] in tcp_make_synack() fib: fib_dump_info can no longer use __in_dev_get_rtnl stmmac: use of_property_read_u32 instead of read_u8 net_sched: hold netns refcnt for each action net_sched: acquire RTNL in tc_action_net_exit() net: vrf: correct FRA_L3MDEV encode type tcp_nv: fix division by zero in tcpnv_acked() netfilter: nf_reject_ipv4: Fix use-after-free in send_reset netfilter: nft_set_hash: disable fast_ops for 2-len keys
This commit is contained in:
@@ -78,6 +78,7 @@ static void tcf_idr_remove(struct tcf_idrinfo *idrinfo, struct tc_action *p)
|
||||
spin_lock_bh(&idrinfo->lock);
|
||||
idr_remove_ext(&idrinfo->action_idr, p->tcfa_index);
|
||||
spin_unlock_bh(&idrinfo->lock);
|
||||
put_net(idrinfo->net);
|
||||
gen_kill_estimator(&p->tcfa_rate_est);
|
||||
free_tcf(p);
|
||||
}
|
||||
@@ -86,6 +87,8 @@ int __tcf_idr_release(struct tc_action *p, bool bind, bool strict)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if (p) {
|
||||
if (bind)
|
||||
p->tcfa_bindcnt--;
|
||||
@@ -334,6 +337,7 @@ err3:
|
||||
p->idrinfo = idrinfo;
|
||||
p->ops = ops;
|
||||
INIT_LIST_HEAD(&p->list);
|
||||
get_net(idrinfo->net);
|
||||
*a = p;
|
||||
return 0;
|
||||
}
|
||||
|
@@ -398,7 +398,7 @@ static __net_init int bpf_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, bpf_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_bpf_ops);
|
||||
return tc_action_net_init(tn, &act_bpf_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit bpf_exit_net(struct net *net)
|
||||
|
@@ -206,7 +206,7 @@ static __net_init int connmark_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, connmark_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_connmark_ops);
|
||||
return tc_action_net_init(tn, &act_connmark_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit connmark_exit_net(struct net *net)
|
||||
|
@@ -626,7 +626,7 @@ static __net_init int csum_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, csum_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_csum_ops);
|
||||
return tc_action_net_init(tn, &act_csum_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit csum_exit_net(struct net *net)
|
||||
|
@@ -232,7 +232,7 @@ static __net_init int gact_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, gact_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_gact_ops);
|
||||
return tc_action_net_init(tn, &act_gact_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit gact_exit_net(struct net *net)
|
||||
|
@@ -818,7 +818,7 @@ static __net_init int ife_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, ife_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_ife_ops);
|
||||
return tc_action_net_init(tn, &act_ife_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit ife_exit_net(struct net *net)
|
||||
|
@@ -334,7 +334,7 @@ static __net_init int ipt_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, ipt_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_ipt_ops);
|
||||
return tc_action_net_init(tn, &act_ipt_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit ipt_exit_net(struct net *net)
|
||||
@@ -384,7 +384,7 @@ static __net_init int xt_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, xt_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_xt_ops);
|
||||
return tc_action_net_init(tn, &act_xt_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit xt_exit_net(struct net *net)
|
||||
|
@@ -343,7 +343,7 @@ static __net_init int mirred_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, mirred_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_mirred_ops);
|
||||
return tc_action_net_init(tn, &act_mirred_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit mirred_exit_net(struct net *net)
|
||||
|
@@ -307,7 +307,7 @@ static __net_init int nat_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, nat_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_nat_ops);
|
||||
return tc_action_net_init(tn, &act_nat_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit nat_exit_net(struct net *net)
|
||||
|
@@ -450,7 +450,7 @@ static __net_init int pedit_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, pedit_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_pedit_ops);
|
||||
return tc_action_net_init(tn, &act_pedit_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit pedit_exit_net(struct net *net)
|
||||
|
@@ -331,7 +331,7 @@ static __net_init int police_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, police_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_police_ops);
|
||||
return tc_action_net_init(tn, &act_police_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit police_exit_net(struct net *net)
|
||||
|
@@ -240,7 +240,7 @@ static __net_init int sample_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, sample_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_sample_ops);
|
||||
return tc_action_net_init(tn, &act_sample_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit sample_exit_net(struct net *net)
|
||||
|
@@ -201,7 +201,7 @@ static __net_init int simp_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, simp_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_simp_ops);
|
||||
return tc_action_net_init(tn, &act_simp_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit simp_exit_net(struct net *net)
|
||||
|
@@ -238,7 +238,7 @@ static __net_init int skbedit_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, skbedit_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_skbedit_ops);
|
||||
return tc_action_net_init(tn, &act_skbedit_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit skbedit_exit_net(struct net *net)
|
||||
|
@@ -263,7 +263,7 @@ static __net_init int skbmod_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, skbmod_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_skbmod_ops);
|
||||
return tc_action_net_init(tn, &act_skbmod_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit skbmod_exit_net(struct net *net)
|
||||
|
@@ -322,7 +322,7 @@ static __net_init int tunnel_key_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_tunnel_key_ops);
|
||||
return tc_action_net_init(tn, &act_tunnel_key_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit tunnel_key_exit_net(struct net *net)
|
||||
|
@@ -269,7 +269,7 @@ static __net_init int vlan_init_net(struct net *net)
|
||||
{
|
||||
struct tc_action_net *tn = net_generic(net, vlan_net_id);
|
||||
|
||||
return tc_action_net_init(tn, &act_vlan_ops);
|
||||
return tc_action_net_init(tn, &act_vlan_ops, net);
|
||||
}
|
||||
|
||||
static void __net_exit vlan_exit_net(struct net *net)
|
||||
|
Reference in New Issue
Block a user