Patch "tun: call dev_get_valid_name() before register_netdevice()" has been added to the 4.13-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
tun: call dev_get_valid_name() before register_netdevice()
to the 4.13-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:
tun-call-dev_get_valid_name-before-register_netdevice.patch
and it can be found in the queue-4.13 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 Wed Nov 15 17:25:34 CET 2017
From: Cong Wang <[email protected]>
Date: Fri, 13 Oct 2017 11:58:53 -0700
Subject: tun: call dev_get_valid_name() before register_netdevice()
From: Cong Wang <[email protected]>
[ Upstream commit 0ad646c81b2182f7fa67ec0c8c825e0ee165696d ]
register_netdevice() could fail early when we have an invalid dev name, in which case ->ndo_uninit() is not called. For tun device, this is a problem because a timer etc. are already initialized and it expects ->ndo_uninit() to clean them up.
We could move these initializations into a ->ndo_init() so that register_netdevice() knows better, however this is still complicated due to the logic in tun_detach().
Therefore, I choose to just call dev_get_valid_name() before register_netdevice(), which is quicker and much easier to audit. And for this specific case, it is already enough.
--- drivers/net/tun.c | 3 +++ include/linux/netdevice.h | 3 +++ net/core/dev.c | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-)
drivers/net/tun.c +3 -0
@@ -1813,6 +1813,9 @@ static int tun_set_iff(struct net *net,if (!dev)return -ENOMEM ; + err =dev_get_valid_name (net, dev, name); +if (err) + goto err_free_dev;dev_net_set (dev, net); dev->rtnl_link_ops = &tun_link_ops;
include/linux/netdevice.h +3 -0
@@ -3702,6 +3702,9 @@ struct net_device *alloc_netdev_mqs(intunsigned char name_assign_type, void (*setup)(struct net_device *), unsigned int txqs, unsigned int rxqs); +int dev_get_valid_name (struct net *net,struct net_device *dev, +const char *name); +#define alloc_netdev (sizeof_priv, name, name_assign_type, setup) \ alloc_netdev_mqs(sizeof_priv, name, name_assign_type, setup, 1, 1)
net/core/dev.c +3 -3
@@ -1146,9 +1146,8 @@ static int dev_alloc_name_ns(struct netreturn ret; } -static int dev_get_valid_name (struct net *net, -struct net_device *dev, -const char *name) +int dev_get_valid_name (struct net *net,struct net_device *dev, +const char *name) {BUG_ON (!net);
@@ -1164,6 +1163,7 @@ static int dev_get_valid_name(struct netreturn 0 ; } +EXPORT_SYMBOL (dev_get_valid_name);/** * dev_change_name - change name of a device
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/tun-call-dev_get_valid_name-before-register_netdevice.patch queue-4.13/net_sched-avoid-matching-qdisc-with-zero-handle.patch queue-4.13/tun-allow-positive-return-values-on-dev_get_valid_name-call.patch