net: Fix inconsistent teardown and release of private netdev state.
Network devices can allocate reasources and private memory using netdev_ops->ndo_init(). However, the release of these resources can occur in one of two different places. Either netdev_ops->ndo_uninit() or netdev->destructor(). The decision of which operation frees the resources depends upon whether it is necessary for all netdev refs to be released before it is safe to perform the freeing. netdev_ops->ndo_uninit() presumably can occur right after the NETDEV_UNREGISTER notifier completes and the unicast and multicast address lists are flushed. netdev->destructor(), on the other hand, does not run until the netdev references all go away. Further complicating the situation is that netdev->destructor() almost universally does also a free_netdev(). This creates a problem for the logic in register_netdevice(). Because all callers of register_netdevice() manage the freeing of the netdev, and invoke free_netdev(dev) if register_netdevice(...
Showing
- drivers/net/bonding/bond_main.c 3 additions, 3 deletionsdrivers/net/bonding/bond_main.c
- drivers/net/caif/caif_hsi.c 1 addition, 1 deletiondrivers/net/caif/caif_hsi.c
- drivers/net/caif/caif_serial.c 1 addition, 1 deletiondrivers/net/caif/caif_serial.c
- drivers/net/caif/caif_spi.c 1 addition, 1 deletiondrivers/net/caif/caif_spi.c
- drivers/net/caif/caif_virtio.c 1 addition, 1 deletiondrivers/net/caif/caif_virtio.c
- drivers/net/can/slcan.c 3 additions, 4 deletionsdrivers/net/can/slcan.c
- drivers/net/can/vcan.c 1 addition, 1 deletiondrivers/net/can/vcan.c
- drivers/net/can/vxcan.c 1 addition, 1 deletiondrivers/net/can/vxcan.c
- drivers/net/dummy.c 2 additions, 2 deletionsdrivers/net/dummy.c
- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c 1 addition, 1 deletiondrivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
- drivers/net/geneve.c 1 addition, 1 deletiondrivers/net/geneve.c
- drivers/net/gtp.c 1 addition, 1 deletiondrivers/net/gtp.c
- drivers/net/hamradio/6pack.c 1 addition, 1 deletiondrivers/net/hamradio/6pack.c
- drivers/net/hamradio/bpqether.c 1 addition, 1 deletiondrivers/net/hamradio/bpqether.c
- drivers/net/ifb.c 2 additions, 2 deletionsdrivers/net/ifb.c
- drivers/net/ipvlan/ipvlan_main.c 1 addition, 1 deletiondrivers/net/ipvlan/ipvlan_main.c
- drivers/net/loopback.c 2 additions, 2 deletionsdrivers/net/loopback.c
- drivers/net/macsec.c 2 additions, 2 deletionsdrivers/net/macsec.c
- drivers/net/macvlan.c 1 addition, 1 deletiondrivers/net/macvlan.c
- drivers/net/nlmon.c 1 addition, 1 deletiondrivers/net/nlmon.c
Please register or sign in to comment