macvtap: check minor when unregistering
macvtap_device_event(NETDEV_UNREGISTER) should check vlan->minor to determine if it is being invoked in the context of a macvtap_newlink that failed, for example in this code sequence: macvtap_newlink macvlan_common_newlink register_netdevice call_netdevice_notifiers(NETDEV_REGISTER, dev) macvtap_device_event(NETDEV_REGISTER) <fail here, vlan->minor = 0> rollback_registered(dev); rollback_registered_many call_netdevice_notifiers(NETDEV_UNREGISTER, dev); macvtap_device_event(NETDEV_UNREGISTER) <nothing to clean up here> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
3083796075
Коммит
e96c37f185
|
@ -1303,6 +1303,9 @@ static int macvtap_device_event(struct notifier_block *unused,
|
|||
}
|
||||
break;
|
||||
case NETDEV_UNREGISTER:
|
||||
/* vlan->minor == 0 if NETDEV_REGISTER above failed */
|
||||
if (vlan->minor == 0)
|
||||
break;
|
||||
devt = MKDEV(MAJOR(macvtap_major), vlan->minor);
|
||||
device_destroy(macvtap_class, devt);
|
||||
macvtap_free_minor(vlan);
|
||||
|
|
Загрузка…
Ссылка в новой задаче