• Rafał Miłecki's avatar
    leds: trigger: netdev: fix refcnt leak on interface rename · 4cb65605
    Rafał Miłecki authored
    Renaming a netdev-trigger-tracked interface was resulting in an
    unbalanced dev_hold().
    
    Example:
    > iw phy phy0 interface add foo type __ap
    > echo netdev > trigger
    > echo foo > device_name
    > ip link set foo name bar
    > iw dev bar del
    [  237.355366] unregister_netdevice: waiting for bar to become free. Usage count = 1
    [  247.435362] unregister_netdevice: waiting for bar to become free. Usage count = 1
    [  257.545366] unregister_netdevice: waiting for bar to become free. Usage count = 1
    
    Above problem was caused by trigger checking a dev->name which obviously
    changes after renaming an interface. It meant missing all further events
    including the NETDEV_UNREGISTER which is required for calling dev_put().
    
    This change fixes that by:
    1) Comparing device struct *address* for notification-filtering purposes
    2) Dropping unneeded NETDEV_CHANGENAME code (no behavior change)
    
    Fixes: 06f502f5 ("leds: trigger: Introduce a NETDEV trigger")
    Signed-off-by: default avatarRafał Miłecki <rafal@milecki.pl>
    Acked-by: default avatarPavel Machek <pavel@ucw.cz>
    Signed-off-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
    4cb65605
ledtrig-netdev.c 11.2 KB