• Jeremy Linton's avatar
    net: smsc911x: Fix unload crash when link is up · e06513d7
    Jeremy Linton authored
    The smsc911x driver will crash if it is rmmod'ed while the netdev
    is up like:
    
    Call trace:
      phy_detach+0x94/0x150
      phy_disconnect+0x40/0x50
      smsc911x_stop+0x104/0x128 [smsc911x]
      __dev_close_many+0xb4/0x138
      dev_close_many+0xbc/0x190
      rollback_registered_many+0x140/0x460
      rollback_registered+0x68/0xb0
      unregister_netdevice_queue+0x100/0x118
      unregister_netdev+0x28/0x38
      smsc911x_drv_remove+0x58/0x130 [smsc911x]
      platform_drv_remove+0x30/0x50
      device_release_driver_internal+0x15c/0x1f8
      driver_detach+0x54/0x98
      bus_remove_driver+0x64/0xe8
      driver_unregister+0x34/0x60
      platform_driver_unregister+0x20/0x30
      smsc911x_cleanup_module+0x14/0xbca8 [smsc911x]
      SyS_delete_module+0x1e8/0x238
      __sys_trace_return+0x0/0x4
    
    This is caused by the mdiobus being unregistered/free'd
    and the code in phy_detach() attempting to manipulate mdio
    related structures from unregister_netdev() calling close()
    
    To fix this, we delay the mdiobus teardown until after
    the netdev is deregistered.
    Reported-by: default avatarMatt Sealey <matt.sealey@arm.com>
    Signed-off-by: default avatarJeremy Linton <jeremy.linton@arm.com>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e06513d7
smsc911x.c 69.8 KB