Patch "sit: fix sit0 percpu double allocations" has been added to the 4.3-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
sit: fix sit0 percpu double allocations
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sit-fix-sit0-percpu-double-allocations.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Nov 17 14:33:46 PST 2015
From: Eric Dumazet <[email protected]>
Date: Mon, 2 Nov 2015 17:08:19 -0800
Subject: sit: fix sit0 percpu double allocations
From: Eric Dumazet <[email protected]>
[ Upstream commit 4ece9009774596ee3df0acba65a324b7ea79387c ]
sit0 device allocates its percpu storage twice :
- One time in ipip6_tunnel_init()
- One time in ipip6_fb_tunnel_init()
Thus we leak 48 bytes per possible cpu per network namespace dismantle.
ipip6_fb_tunnel_init() can be much simpler and does not return an error, and should be called after register_netdev()
Note that ipip6_tunnel_clone_6rd() also needs to be called after register_netdev() (calling ipip6_tunnel_init())
--- net/ipv6/sit.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-)
net/ipv6/sit.c +4 -22
@@ -1394,34 +1394,20 @@ static int ipip6_tunnel_init(struct net_return 0 ; } -static int __net_init ipip6_fb_tunnel_init (struct net_device *dev) +static void __net_init ipip6_fb_tunnel_init (struct net_device *dev) {struct ip_tunnel *tunnel =netdev_priv (dev);struct iphdr *iph = &tunnel->parms.iph;struct net *net =dev_net (dev);struct sit_net *sitn =net_generic (net, sit_net_id); - tunnel->dev = dev; - tunnel->net =dev_net (dev); - iph->version =4 ; iph->protocol =IPPROTO_IPV6 ; iph->ihl =5 ; iph->ttl =64 ; - dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); -if (!dev->tstats) -return -ENOMEM ; - - tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst); -if (!tunnel->dst_cache) { -free_percpu (dev->tstats); -return -ENOMEM ; - } -dev_hold (dev);rcu_assign_pointer (sitn->tunnels_wc[0 ], tunnel); -return 0 ; }static int ipip6_validate (struct nlattr *tb[],struct nlattr *data[])
@@ -1831,23 +1817,19 @@ static int __net_init sit_init_net(struc*/ sitn->fb_tunnel_dev->features |=NETIF_F_NETNS_LOCAL ; - err =ipip6_fb_tunnel_init (sitn->fb_tunnel_dev); -if (err) - goto err_dev_free; - -ipip6_tunnel_clone_6rd (sitn->fb_tunnel_dev, sitn); err =register_netdev (sitn->fb_tunnel_dev);if (err) goto err_reg_dev; +ipip6_tunnel_clone_6rd (sitn->fb_tunnel_dev, sitn); +ipip6_fb_tunnel_init (sitn->fb_tunnel_dev); + t =netdev_priv (sitn->fb_tunnel_dev);strcpy (t->parms.name, sitn->fb_tunnel_dev->name);return 0 ; err_reg_dev: -dev_put (sitn->fb_tunnel_dev); -err_dev_free:ipip6_dev_free (sitn->fb_tunnel_dev); err_alloc_dev:return err;
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/ipmr-fix-possible-race-resulting-from-improper-usage-of-ip_inc_stats_bh-in-preemptible-context.patch queue-4.3/net-avoid-null-deref-in-inet_ctl_sock_destroy.patch queue-4.3/net-fix-a-race-in-dst_release.patch queue-4.3/sit-fix-sit0-percpu-double-allocations.patch