* [PATCH] net-2.6 : V2 - fix dev_get_valid_name
@ 2010-05-19 20:12 Daniel Lezcano
2010-05-21 13:10 ` Daniel Lezcano
0 siblings, 1 reply; 4+ messages in thread
From: Daniel Lezcano @ 2010-05-19 20:12 UTC (permalink / raw)
To: davem; +Cc: opurdila, netdev
the commit:
commit d90310243fd750240755e217c5faa13e24f41536
Author: Octavian Purdila <opurdila@ixiacom.com>
Date: Wed Nov 18 02:36:59 2009 +0000
net: device name allocation cleanups
introduced a bug when there is a hash collision making impossible
to rename a device with eth%d. This bug is very hard to reproduce
and appears rarely.
The problem is coming from we don't pass a temporary buffer to
__dev_alloc_name but 'dev->name' which is modified by the function.
A detailed explanation is here:
http://marc.info/?l=linux-netdev&m=127417784011987&w=2
Changelog:
V2 : replaced strings comparison by pointers comparison
Signed-off-by: Daniel Lezcano <daniel.lezcano@free.fr>
---
net/core/dev.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 264137f..a2bfe57 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -936,18 +936,22 @@ int dev_alloc_name(struct net_device *dev, const char *name)
}
EXPORT_SYMBOL(dev_alloc_name);
-static int dev_get_valid_name(struct net *net, const char *name, char *buf,
- bool fmt)
+static int dev_get_valid_name(struct net_device *dev, const char *name, bool fmt)
{
+ struct net *net;
+
+ BUG_ON(!dev_net(dev));
+ net = dev_net(dev);
+
if (!dev_valid_name(name))
return -EINVAL;
if (fmt && strchr(name, '%'))
- return __dev_alloc_name(net, name, buf);
+ return dev_alloc_name(dev, name);
else if (__dev_get_by_name(net, name))
return -EEXIST;
- else if (buf != name)
- strlcpy(buf, name, IFNAMSIZ);
+ else if (dev->name != name)
+ strlcpy(dev->name, name, IFNAMSIZ);
return 0;
}
@@ -979,7 +983,7 @@ int dev_change_name(struct net_device *dev, const char *newname)
memcpy(oldname, dev->name, IFNAMSIZ);
- err = dev_get_valid_name(net, newname, dev->name, 1);
+ err = dev_get_valid_name(dev, newname, 1);
if (err < 0)
return err;
@@ -5083,7 +5087,7 @@ int register_netdevice(struct net_device *dev)
}
}
- ret = dev_get_valid_name(net, dev->name, dev->name, 0);
+ ret = dev_get_valid_name(dev, dev->name, 0);
if (ret)
goto err_uninit;
@@ -5661,7 +5665,7 @@ int dev_change_net_namespace(struct net_device *dev, struct net *net, const char
/* We get here if we can't use the current device name */
if (!pat)
goto out;
- if (dev_get_valid_name(net, pat, dev->name, 1))
+ if (dev_get_valid_name(dev, pat, 1))
goto out;
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] net-2.6 : V2 - fix dev_get_valid_name
2010-05-19 20:12 [PATCH] net-2.6 : V2 - fix dev_get_valid_name Daniel Lezcano
@ 2010-05-21 13:10 ` Daniel Lezcano
2010-05-21 13:25 ` Octavian Purdila
0 siblings, 1 reply; 4+ messages in thread
From: Daniel Lezcano @ 2010-05-21 13:10 UTC (permalink / raw)
To: opurdila; +Cc: davem, netdev
On 05/19/2010 10:12 PM, Daniel Lezcano wrote:
> the commit:
>
> commit d90310243fd750240755e217c5faa13e24f41536
> Author: Octavian Purdila<opurdila@ixiacom.com>
> Date: Wed Nov 18 02:36:59 2009 +0000
>
> net: device name allocation cleanups
>
> introduced a bug when there is a hash collision making impossible
> to rename a device with eth%d. This bug is very hard to reproduce
> and appears rarely.
>
> The problem is coming from we don't pass a temporary buffer to
> __dev_alloc_name but 'dev->name' which is modified by the function.
>
> A detailed explanation is here:
>
> http://marc.info/?l=linux-netdev&m=127417784011987&w=2
>
> Changelog:
> V2 : replaced strings comparison by pointers comparison
>
> Signed-off-by: Daniel Lezcano<daniel.lezcano@free.fr>
> ---
>
Octavian, are you ok with this patch ?
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net-2.6 : V2 - fix dev_get_valid_name
2010-05-21 13:10 ` Daniel Lezcano
@ 2010-05-21 13:25 ` Octavian Purdila
2010-05-24 6:25 ` David Miller
0 siblings, 1 reply; 4+ messages in thread
From: Octavian Purdila @ 2010-05-21 13:25 UTC (permalink / raw)
To: Daniel Lezcano; +Cc: davem, netdev
On Friday 21 May 2010 16:10:13 you wrote:
> On 05/19/2010 10:12 PM, Daniel Lezcano wrote:
> > the commit:
> >
> > commit d90310243fd750240755e217c5faa13e24f41536
> > Author: Octavian Purdila<opurdila@ixiacom.com>
> > Date: Wed Nov 18 02:36:59 2009 +0000
> >
> > net: device name allocation cleanups
> >
> > introduced a bug when there is a hash collision making impossible
> > to rename a device with eth%d. This bug is very hard to reproduce
> > and appears rarely.
> >
> > The problem is coming from we don't pass a temporary buffer to
> > __dev_alloc_name but 'dev->name' which is modified by the function.
> >
> > A detailed explanation is here:
> >
> > http://marc.info/?l=linux-netdev&m=127417784011987&w=2
> >
> > Changelog:
> > V2 : replaced strings comparison by pointers comparison
> >
> > Signed-off-by: Daniel Lezcano<daniel.lezcano@free.fr>
> > ---
>
> Octavian, are you ok with this patch ?
>
Yes, all looks good to me, thanks for the fix.
Reviewed-by: Octavian Purdila <opurdila@ixiacom.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] net-2.6 : V2 - fix dev_get_valid_name
2010-05-21 13:25 ` Octavian Purdila
@ 2010-05-24 6:25 ` David Miller
0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2010-05-24 6:25 UTC (permalink / raw)
To: opurdila; +Cc: daniel.lezcano, netdev
From: Octavian Purdila <opurdila@ixiacom.com>
Date: Fri, 21 May 2010 16:25:06 +0300
> On Friday 21 May 2010 16:10:13 you wrote:
>> On 05/19/2010 10:12 PM, Daniel Lezcano wrote:
>> > Signed-off-by: Daniel Lezcano<daniel.lezcano@free.fr>
...
> Reviewed-by: Octavian Purdila <opurdila@ixiacom.com>
Applied, thanks everyone.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-05-24 6:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-19 20:12 [PATCH] net-2.6 : V2 - fix dev_get_valid_name Daniel Lezcano
2010-05-21 13:10 ` Daniel Lezcano
2010-05-21 13:25 ` Octavian Purdila
2010-05-24 6:25 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).