Skip to content

Commit

Permalink
net: reduce indentation of __dev_alloc_name()
Browse files Browse the repository at this point in the history
All callers of __dev_valid_name() go thru dev_prep_valid_name()
which handles the non-printf case. Focus __dev_alloc_name() on
the sprintf case, remove the indentation level.

Minor functional change of returning -EINVAL if % is not found,
which should now never happen.

Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://lore.kernel.org/r/20231023152346.3639749-4-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Oct 24, 2023
1 parent 556c755 commit 9a81046
Showing 1 changed file with 26 additions and 30 deletions.
56 changes: 26 additions & 30 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1080,50 +1080,46 @@ static int __dev_alloc_name(struct net *net, const char *name, char *res)
if (!dev_valid_name(name))
return -EINVAL;

/* Verify the string as this thing may have come from the user.
* There must be one "%d" and no other "%" characters.
*/
p = strchr(name, '%');
if (p) {
/*
* Verify the string as this thing may have come from
* the user. There must be either one "%d" and no other "%"
* characters.
*/
if (p[1] != 'd' || strchr(p + 2, '%'))
return -EINVAL;

/* Use one page as a bit array of possible slots */
inuse = bitmap_zalloc(max_netdevices, GFP_ATOMIC);
if (!inuse)
return -ENOMEM;
if (!p || p[1] != 'd' || strchr(p + 2, '%'))
return -EINVAL;

for_each_netdev(net, d) {
struct netdev_name_node *name_node;
/* Use one page as a bit array of possible slots */
inuse = bitmap_zalloc(max_netdevices, GFP_ATOMIC);
if (!inuse)
return -ENOMEM;

netdev_for_each_altname(d, name_node) {
if (!sscanf(name_node->name, name, &i))
continue;
if (i < 0 || i >= max_netdevices)
continue;
for_each_netdev(net, d) {
struct netdev_name_node *name_node;

/* avoid cases where sscanf is not exact inverse of printf */
snprintf(buf, IFNAMSIZ, name, i);
if (!strncmp(buf, name_node->name, IFNAMSIZ))
__set_bit(i, inuse);
}
if (!sscanf(d->name, name, &i))
netdev_for_each_altname(d, name_node) {
if (!sscanf(name_node->name, name, &i))
continue;
if (i < 0 || i >= max_netdevices)
continue;

/* avoid cases where sscanf is not exact inverse of printf */
/* avoid cases where sscanf is not exact inverse of printf */
snprintf(buf, IFNAMSIZ, name, i);
if (!strncmp(buf, d->name, IFNAMSIZ))
if (!strncmp(buf, name_node->name, IFNAMSIZ))
__set_bit(i, inuse);
}
if (!sscanf(d->name, name, &i))
continue;
if (i < 0 || i >= max_netdevices)
continue;

i = find_first_zero_bit(inuse, max_netdevices);
bitmap_free(inuse);
/* avoid cases where sscanf is not exact inverse of printf */
snprintf(buf, IFNAMSIZ, name, i);
if (!strncmp(buf, d->name, IFNAMSIZ))
__set_bit(i, inuse);
}

i = find_first_zero_bit(inuse, max_netdevices);
bitmap_free(inuse);

snprintf(buf, IFNAMSIZ, name, i);
if (!netdev_name_in_use(net, buf)) {
strscpy(res, buf, IFNAMSIZ);
Expand Down

0 comments on commit 9a81046

Please sign in to comment.