cfg80211: preserve wdev ID across netns changes
When a wdev changes network namespace, its wdev ID will get reassigned since NETDEV_REGISTER is called again, in the new network namespace. Avoid that by checking if it was already assigned before, and document why we do that. Reported-and-tested-by: Arend Van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
335d534938
commit
b6ecfd469e
|
@ -1159,7 +1159,15 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
||||||
INIT_LIST_HEAD(&wdev->mgmt_registrations);
|
INIT_LIST_HEAD(&wdev->mgmt_registrations);
|
||||||
spin_lock_init(&wdev->mgmt_registrations_lock);
|
spin_lock_init(&wdev->mgmt_registrations_lock);
|
||||||
|
|
||||||
wdev->identifier = ++rdev->wdev_id;
|
/*
|
||||||
|
* We get here also when the interface changes network namespaces,
|
||||||
|
* as it's registered into the new one, but we don't want it to
|
||||||
|
* change ID in that case. Checking if the ID is already assigned
|
||||||
|
* works, because 0 isn't considered a valid ID and the memory is
|
||||||
|
* 0-initialized.
|
||||||
|
*/
|
||||||
|
if (!wdev->identifier)
|
||||||
|
wdev->identifier = ++rdev->wdev_id;
|
||||||
list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
|
list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
|
||||||
rdev->devlist_generation++;
|
rdev->devlist_generation++;
|
||||||
/* can only change netns with wiphy */
|
/* can only change netns with wiphy */
|
||||||
|
|
Loading…
Reference in New Issue