mirror of
https://github.com/torvalds/linux.git
synced 2024-09-20 23:13:00 +00:00
net: Fix undefined behavior in netdev name allocation
Cited commit removed the strscpy() call and kept the snprintf() only.
It is common to use 'dev->name' as the format string before a netdev is
registered, this results in 'res' and 'name' pointers being equal.
According to POSIX, if copying takes place between objects that overlap
as a result of a call to sprintf() or snprintf(), the results are
undefined.
Add back the strscpy() and use 'buf' as an intermediate buffer.
Fixes: 7ad17b04dc
("net: trust the bitmap in __dev_alloc_name()")
Cc: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Gal Pressman <gal@nvidia.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
efc0c8363b
commit
674e318089
|
@ -1119,7 +1119,9 @@ static int __dev_alloc_name(struct net *net, const char *name, char *res)
|
|||
if (i == max_netdevices)
|
||||
return -ENFILE;
|
||||
|
||||
snprintf(res, IFNAMSIZ, name, i);
|
||||
/* 'res' and 'name' could overlap, use 'buf' as an intermediate buffer */
|
||||
strscpy(buf, name, IFNAMSIZ);
|
||||
snprintf(res, IFNAMSIZ, buf, i);
|
||||
return i;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user