• P
    net:set valid name before calling ndo_init() · 0696c3a8
    Peter Pan(潘卫平) 提交于
    In commit 1c5cae81 (net: call dev_alloc_name from register_netdevice),
    a bug of bonding was involved, see example 1 and 2.
    
    In register_netdevice(), the name of net_device is not valid until
    dev_get_valid_name() is called. But dev->netdev_ops->ndo_init(that is
    bond_init) is called before dev_get_valid_name(),
    and it uses the invalid name of net_device.
    
    I think register_netdevice() should make sure that the name of net_device is
    valid before calling ndo_init().
    
    example 1:
    modprobe bonding
    ls  /proc/net/bonding/bond%d
    
    ps -eLf
    root      3398     2  3398  0    1 21:34 ?        00:00:00 [bond%d]
    
    example 2:
    modprobe bonding max_bonds=3
    
    [  170.100292] bonding: Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
    [  170.101090] bonding: Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details.
    [  170.102469] ------------[ cut here ]------------
    [  170.103150] WARNING: at /home/pwp/net-next-2.6/fs/proc/generic.c:586 proc_register+0x126/0x157()
    [  170.104075] Hardware name: VirtualBox
    [  170.105065] proc_dir_entry 'bonding/bond%d' already registered
    [  170.105613] Modules linked in: bonding(+) sunrpc ipv6 uinput microcode ppdev parport_pc parport joydev e1000 pcspkr i2c_piix4 i2c_core [last unloaded: bonding]
    [  170.108397] Pid: 3457, comm: modprobe Not tainted 2.6.39-rc2+ #14
    [  170.108935] Call Trace:
    [  170.109382]  [<c0438f3b>] warn_slowpath_common+0x6a/0x7f
    [  170.109911]  [<c051a42a>] ? proc_register+0x126/0x157
    [  170.110329]  [<c0438fc3>] warn_slowpath_fmt+0x2b/0x2f
    [  170.110846]  [<c051a42a>] proc_register+0x126/0x157
    [  170.111870]  [<c051a4dd>] proc_create_data+0x82/0x98
    [  170.112335]  [<f94e6af6>] bond_create_proc_entry+0x3f/0x73 [bonding]
    [  170.112905]  [<f94dd806>] bond_init+0x77/0xa5 [bonding]
    [  170.113319]  [<c0721ac6>] register_netdevice+0x8c/0x1d3
    [  170.113848]  [<f94e0e30>] bond_create+0x6c/0x90 [bonding]
    [  170.114322]  [<f94f4763>] bonding_init+0x763/0x7b1 [bonding]
    [  170.114879]  [<c0401240>] do_one_initcall+0x76/0x122
    [  170.115317]  [<f94f4000>] ? 0xf94f3fff
    [  170.115799]  [<c0463f1e>] sys_init_module+0x1286/0x140d
    [  170.116879]  [<c07c6d9f>] sysenter_do_call+0x12/0x28
    [  170.117404] ---[ end trace 64e4fac3ae5fff1a ]---
    [  170.117924] bond%d: Warning: failed to register to debugfs
    [  170.128728] ------------[ cut here ]------------
    [  170.129360] WARNING: at /home/pwp/net-next-2.6/fs/proc/generic.c:586 proc_register+0x126/0x157()
    [  170.130323] Hardware name: VirtualBox
    [  170.130797] proc_dir_entry 'bonding/bond%d' already registered
    [  170.131315] Modules linked in: bonding(+) sunrpc ipv6 uinput microcode ppdev parport_pc parport joydev e1000 pcspkr i2c_piix4 i2c_core [last unloaded: bonding]
    [  170.133731] Pid: 3457, comm: modprobe Tainted: G        W   2.6.39-rc2+ #14
    [  170.134308] Call Trace:
    [  170.134743]  [<c0438f3b>] warn_slowpath_common+0x6a/0x7f
    [  170.135305]  [<c051a42a>] ? proc_register+0x126/0x157
    [  170.135820]  [<c0438fc3>] warn_slowpath_fmt+0x2b/0x2f
    [  170.137168]  [<c051a42a>] proc_register+0x126/0x157
    [  170.137700]  [<c051a4dd>] proc_create_data+0x82/0x98
    [  170.138174]  [<f94e6af6>] bond_create_proc_entry+0x3f/0x73 [bonding]
    [  170.138745]  [<f94dd806>] bond_init+0x77/0xa5 [bonding]
    [  170.139278]  [<c0721ac6>] register_netdevice+0x8c/0x1d3
    [  170.139828]  [<f94e0e30>] bond_create+0x6c/0x90 [bonding]
    [  170.140361]  [<f94f4763>] bonding_init+0x763/0x7b1 [bonding]
    [  170.140927]  [<c0401240>] do_one_initcall+0x76/0x122
    [  170.141494]  [<f94f4000>] ? 0xf94f3fff
    [  170.141975]  [<c0463f1e>] sys_init_module+0x1286/0x140d
    [  170.142463]  [<c07c6d9f>] sysenter_do_call+0x12/0x28
    [  170.142974] ---[ end trace 64e4fac3ae5fff1b ]---
    [  170.144949] bond%d: Warning: failed to register to debugfs
    Signed-off-by: NWeiping Pan <panweiping3@gmail.com>
    Reviewed-by: NJiri Pirko <jpirko@redhat.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    0696c3a8
dev.c 158.1 KB