Skip to content

Commit c74619e

Browse files
martinwillijmberg-intel
authored andcommitted
wifi: mac80211_hwsim: Limit destroy_on_close radio removal to netgroup
hwsim radios marked destroy_on_close are removed when the Netlink socket that created them is closed. As the portid is not unique across network namespaces, closing a socket in one namespace may remove radios in another if it has the destroy_on_close flag set. Instead of matching the network namespace, match the netgroup of the radio to limit radio removal to those that have been created by the closing Netlink socket. The netgroup of a radio identifies the network namespace it was created in, and matching on it removes a destroy_on_close radio even if it has been moved to another namespace. Fixes: 100cb9f ("mac80211_hwsim: Allow managing radios from non-initial namespaces") Signed-off-by: Martin Willi <martin@strongswan.org> Link: https://patch.msgid.link/20251103082436.30483-1-martin@strongswan.org Signed-off-by: Johannes Berg <johannes.berg@intel.com>
1 parent b790432 commit c74619e

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/net/wireless/virtual/mac80211_hwsim.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6698,14 +6698,15 @@ static struct genl_family hwsim_genl_family __ro_after_init = {
66986698
.n_mcgrps = ARRAY_SIZE(hwsim_mcgrps),
66996699
};
67006700

6701-
static void remove_user_radios(u32 portid)
6701+
static void remove_user_radios(u32 portid, int netgroup)
67026702
{
67036703
struct mac80211_hwsim_data *entry, *tmp;
67046704
LIST_HEAD(list);
67056705

67066706
spin_lock_bh(&hwsim_radio_lock);
67076707
list_for_each_entry_safe(entry, tmp, &hwsim_radios, list) {
6708-
if (entry->destroy_on_close && entry->portid == portid) {
6708+
if (entry->destroy_on_close && entry->portid == portid &&
6709+
entry->netgroup == netgroup) {
67096710
list_move(&entry->list, &list);
67106711
rhashtable_remove_fast(&hwsim_radios_rht, &entry->rht,
67116712
hwsim_rht_params);
@@ -6730,7 +6731,7 @@ static int mac80211_hwsim_netlink_notify(struct notifier_block *nb,
67306731
if (state != NETLINK_URELEASE)
67316732
return NOTIFY_DONE;
67326733

6733-
remove_user_radios(notify->portid);
6734+
remove_user_radios(notify->portid, hwsim_net_get_netgroup(notify->net));
67346735

67356736
if (notify->portid == hwsim_net_get_wmediumd(notify->net)) {
67366737
printk(KERN_INFO "mac80211_hwsim: wmediumd released netlink"

0 commit comments

Comments
 (0)