• Jiri Bohac's avatar
    net: check all name nodes in __dev_alloc_name · 6c015a22
    Jiri Bohac authored
    __dev_alloc_name(), when supplied with a name containing '%d',
    will search for the first available device number to generate a
    unique device name.
    
    Since commit ff927412 ("net:
    introduce name_node struct to be used in hashlist") network
    devices may have alternate names.  __dev_alloc_name() does take
    these alternate names into account, possibly generating a name
    that is already taken and failing with -ENFILE as a result.
    
    This demonstrates the bug:
    
        # rmmod dummy 2>/dev/null
        # ip link property add dev lo altname dummy0
        # modprobe dummy numdummies=1
        modprobe: ERROR: could not insert 'dummy': Too many open files in system
    
    Instead of creating a device named dummy1, modprobe fails.
    
    Fix this by checking all the names in the d->name_node list, not just d->name.
    Signed-off-by: default avatarJiri Bohac <jbohac@suse.cz>
    Fixes: ff927412 ("net: introduce name_node struct to be used in hashlist")
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6c015a22
dev.c 288 KB