Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * This is the linux wireless configuration interface.
4 *
5 * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
6 * Copyright 2013-2014 Intel Mobile Communications GmbH
7 * Copyright 2015-2017 Intel Deutschland GmbH
8 * Copyright (C) 2018-2023 Intel Corporation
9 */
10
11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
13#include <linux/if.h>
14#include <linux/module.h>
15#include <linux/err.h>
16#include <linux/list.h>
17#include <linux/slab.h>
18#include <linux/nl80211.h>
19#include <linux/debugfs.h>
20#include <linux/notifier.h>
21#include <linux/device.h>
22#include <linux/etherdevice.h>
23#include <linux/rtnetlink.h>
24#include <linux/sched.h>
25#include <net/genetlink.h>
26#include <net/cfg80211.h>
27#include "nl80211.h"
28#include "core.h"
29#include "sysfs.h"
30#include "debugfs.h"
31#include "wext-compat.h"
32#include "rdev-ops.h"
33
34/* name for sysfs, %d is appended */
35#define PHY_NAME "phy"
36
37MODULE_AUTHOR("Johannes Berg");
38MODULE_LICENSE("GPL");
39MODULE_DESCRIPTION("wireless configuration support");
40MODULE_ALIAS_GENL_FAMILY(NL80211_GENL_NAME);
41
42/* RCU-protected (and RTNL for writers) */
43LIST_HEAD(cfg80211_rdev_list);
44int cfg80211_rdev_list_generation;
45
46/* for debugfs */
47static struct dentry *ieee80211_debugfs_dir;
48
49/* for the cleanup, scan and event works */
50struct workqueue_struct *cfg80211_wq;
51
52static bool cfg80211_disable_40mhz_24ghz;
53module_param(cfg80211_disable_40mhz_24ghz, bool, 0644);
54MODULE_PARM_DESC(cfg80211_disable_40mhz_24ghz,
55 "Disable 40MHz support in the 2.4GHz band");
56
57struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
58{
59 struct cfg80211_registered_device *result = NULL, *rdev;
60
61 ASSERT_RTNL();
62
63 for_each_rdev(rdev) {
64 if (rdev->wiphy_idx == wiphy_idx) {
65 result = rdev;
66 break;
67 }
68 }
69
70 return result;
71}
72
73int get_wiphy_idx(struct wiphy *wiphy)
74{
75 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
76
77 return rdev->wiphy_idx;
78}
79
80struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
81{
82 struct cfg80211_registered_device *rdev;
83
84 ASSERT_RTNL();
85
86 rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx);
87 if (!rdev)
88 return NULL;
89 return &rdev->wiphy;
90}
91
92static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev,
93 const char *newname)
94{
95 struct cfg80211_registered_device *rdev2;
96 int wiphy_idx, taken = -1, digits;
97
98 ASSERT_RTNL();
99
100 if (strlen(newname) > NL80211_WIPHY_NAME_MAXLEN)
101 return -EINVAL;
102
103 /* prohibit calling the thing phy%d when %d is not its number */
104 sscanf(newname, PHY_NAME "%d%n", &wiphy_idx, &taken);
105 if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) {
106 /* count number of places needed to print wiphy_idx */
107 digits = 1;
108 while (wiphy_idx /= 10)
109 digits++;
110 /*
111 * deny the name if it is phy<idx> where <idx> is printed
112 * without leading zeroes. taken == strlen(newname) here
113 */
114 if (taken == strlen(PHY_NAME) + digits)
115 return -EINVAL;
116 }
117
118 /* Ensure another device does not already have this name. */
119 for_each_rdev(rdev2)
120 if (strcmp(newname, wiphy_name(&rdev2->wiphy)) == 0)
121 return -EINVAL;
122
123 return 0;
124}
125
126int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
127 char *newname)
128{
129 int result;
130
131 ASSERT_RTNL();
132 lockdep_assert_wiphy(&rdev->wiphy);
133
134 /* Ignore nop renames */
135 if (strcmp(newname, wiphy_name(&rdev->wiphy)) == 0)
136 return 0;
137
138 result = cfg80211_dev_check_name(rdev, newname);
139 if (result < 0)
140 return result;
141
142 result = device_rename(&rdev->wiphy.dev, newname);
143 if (result)
144 return result;
145
146 if (!IS_ERR_OR_NULL(rdev->wiphy.debugfsdir))
147 debugfs_rename(rdev->wiphy.debugfsdir->d_parent,
148 rdev->wiphy.debugfsdir,
149 rdev->wiphy.debugfsdir->d_parent, newname);
150
151 nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
152
153 return 0;
154}
155
156int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
157 struct net *net)
158{
159 struct wireless_dev *wdev;
160 int err = 0;
161
162 if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK))
163 return -EOPNOTSUPP;
164
165 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
166 if (!wdev->netdev)
167 continue;
168 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
169 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
170 if (err)
171 break;
172 wdev->netdev->features |= NETIF_F_NETNS_LOCAL;
173 }
174
175 if (err) {
176 /* failed -- clean up to old netns */
177 net = wiphy_net(&rdev->wiphy);
178
179 list_for_each_entry_continue_reverse(wdev,
180 &rdev->wiphy.wdev_list,
181 list) {
182 if (!wdev->netdev)
183 continue;
184 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
185 err = dev_change_net_namespace(wdev->netdev, net,
186 "wlan%d");
187 WARN_ON(err);
188 wdev->netdev->features |= NETIF_F_NETNS_LOCAL;
189 }
190
191 return err;
192 }
193
194 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
195 if (!wdev->netdev)
196 continue;
197 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
198 }
199
200 wiphy_lock(&rdev->wiphy);
201 nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
202
203 wiphy_net_set(&rdev->wiphy, net);
204
205 err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev));
206 WARN_ON(err);
207
208 nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
209 wiphy_unlock(&rdev->wiphy);
210
211 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
212 if (!wdev->netdev)
213 continue;
214 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
215 }
216
217 return 0;
218}
219
220static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
221{
222 struct cfg80211_registered_device *rdev = data;
223
224 rdev_rfkill_poll(rdev);
225}
226
227void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
228 struct wireless_dev *wdev)
229{
230 lockdep_assert_held(&rdev->wiphy.mtx);
231
232 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE))
233 return;
234
235 if (!wdev_running(wdev))
236 return;
237
238 rdev_stop_p2p_device(rdev, wdev);
239 wdev->is_running = false;
240
241 rdev->opencount--;
242
243 if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
244 if (WARN_ON(!rdev->scan_req->notified &&
245 (!rdev->int_scan_req ||
246 !rdev->int_scan_req->notified)))
247 rdev->scan_req->info.aborted = true;
248 ___cfg80211_scan_done(rdev, false);
249 }
250}
251
252void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
253 struct wireless_dev *wdev)
254{
255 lockdep_assert_held(&rdev->wiphy.mtx);
256
257 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_NAN))
258 return;
259
260 if (!wdev_running(wdev))
261 return;
262
263 rdev_stop_nan(rdev, wdev);
264 wdev->is_running = false;
265
266 rdev->opencount--;
267}
268
269void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy)
270{
271 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
272 struct wireless_dev *wdev;
273
274 ASSERT_RTNL();
275
276 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
277 if (wdev->netdev) {
278 dev_close(wdev->netdev);
279 continue;
280 }
281
282 /* otherwise, check iftype */
283
284 wiphy_lock(wiphy);
285
286 switch (wdev->iftype) {
287 case NL80211_IFTYPE_P2P_DEVICE:
288 cfg80211_stop_p2p_device(rdev, wdev);
289 break;
290 case NL80211_IFTYPE_NAN:
291 cfg80211_stop_nan(rdev, wdev);
292 break;
293 default:
294 break;
295 }
296
297 wiphy_unlock(wiphy);
298 }
299}
300EXPORT_SYMBOL_GPL(cfg80211_shutdown_all_interfaces);
301
302static int cfg80211_rfkill_set_block(void *data, bool blocked)
303{
304 struct cfg80211_registered_device *rdev = data;
305
306 if (!blocked)
307 return 0;
308
309 rtnl_lock();
310 cfg80211_shutdown_all_interfaces(&rdev->wiphy);
311 rtnl_unlock();
312
313 return 0;
314}
315
316static void cfg80211_rfkill_block_work(struct work_struct *work)
317{
318 struct cfg80211_registered_device *rdev;
319
320 rdev = container_of(work, struct cfg80211_registered_device,
321 rfkill_block);
322 cfg80211_rfkill_set_block(rdev, true);
323}
324
325static void cfg80211_event_work(struct work_struct *work)
326{
327 struct cfg80211_registered_device *rdev;
328
329 rdev = container_of(work, struct cfg80211_registered_device,
330 event_work);
331
332 wiphy_lock(&rdev->wiphy);
333 cfg80211_process_rdev_events(rdev);
334 wiphy_unlock(&rdev->wiphy);
335}
336
337void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev)
338{
339 struct wireless_dev *wdev, *tmp;
340
341 ASSERT_RTNL();
342
343 list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) {
344 if (wdev->nl_owner_dead) {
345 if (wdev->netdev)
346 dev_close(wdev->netdev);
347
348 wiphy_lock(&rdev->wiphy);
349 cfg80211_leave(rdev, wdev);
350 cfg80211_remove_virtual_intf(rdev, wdev);
351 wiphy_unlock(&rdev->wiphy);
352 }
353 }
354}
355
356static void cfg80211_destroy_iface_wk(struct work_struct *work)
357{
358 struct cfg80211_registered_device *rdev;
359
360 rdev = container_of(work, struct cfg80211_registered_device,
361 destroy_work);
362
363 rtnl_lock();
364 cfg80211_destroy_ifaces(rdev);
365 rtnl_unlock();
366}
367
368static void cfg80211_sched_scan_stop_wk(struct wiphy *wiphy,
369 struct wiphy_work *work)
370{
371 struct cfg80211_registered_device *rdev;
372 struct cfg80211_sched_scan_request *req, *tmp;
373
374 rdev = container_of(work, struct cfg80211_registered_device,
375 sched_scan_stop_wk);
376
377 list_for_each_entry_safe(req, tmp, &rdev->sched_scan_req_list, list) {
378 if (req->nl_owner_dead)
379 cfg80211_stop_sched_scan_req(rdev, req, false);
380 }
381}
382
383static void cfg80211_propagate_radar_detect_wk(struct work_struct *work)
384{
385 struct cfg80211_registered_device *rdev;
386
387 rdev = container_of(work, struct cfg80211_registered_device,
388 propagate_radar_detect_wk);
389
390 rtnl_lock();
391
392 regulatory_propagate_dfs_state(&rdev->wiphy, &rdev->radar_chandef,
393 NL80211_DFS_UNAVAILABLE,
394 NL80211_RADAR_DETECTED);
395
396 rtnl_unlock();
397}
398
399static void cfg80211_propagate_cac_done_wk(struct work_struct *work)
400{
401 struct cfg80211_registered_device *rdev;
402
403 rdev = container_of(work, struct cfg80211_registered_device,
404 propagate_cac_done_wk);
405
406 rtnl_lock();
407
408 regulatory_propagate_dfs_state(&rdev->wiphy, &rdev->cac_done_chandef,
409 NL80211_DFS_AVAILABLE,
410 NL80211_RADAR_CAC_FINISHED);
411
412 rtnl_unlock();
413}
414
415static void cfg80211_wiphy_work(struct work_struct *work)
416{
417 struct cfg80211_registered_device *rdev;
418 struct wiphy_work *wk;
419
420 rdev = container_of(work, struct cfg80211_registered_device, wiphy_work);
421
422 wiphy_lock(&rdev->wiphy);
423 if (rdev->suspended)
424 goto out;
425
426 spin_lock_irq(&rdev->wiphy_work_lock);
427 wk = list_first_entry_or_null(&rdev->wiphy_work_list,
428 struct wiphy_work, entry);
429 if (wk) {
430 list_del_init(&wk->entry);
431 if (!list_empty(&rdev->wiphy_work_list))
432 schedule_work(work);
433 spin_unlock_irq(&rdev->wiphy_work_lock);
434
435 wk->func(&rdev->wiphy, wk);
436 } else {
437 spin_unlock_irq(&rdev->wiphy_work_lock);
438 }
439out:
440 wiphy_unlock(&rdev->wiphy);
441}
442
443/* exported functions */
444
445struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
446 const char *requested_name)
447{
448 static atomic_t wiphy_counter = ATOMIC_INIT(0);
449
450 struct cfg80211_registered_device *rdev;
451 int alloc_size;
452
453 WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key));
454 WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc));
455 WARN_ON(ops->connect && !ops->disconnect);
456 WARN_ON(ops->join_ibss && !ops->leave_ibss);
457 WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf);
458 WARN_ON(ops->add_station && !ops->del_station);
459 WARN_ON(ops->add_mpath && !ops->del_mpath);
460 WARN_ON(ops->join_mesh && !ops->leave_mesh);
461 WARN_ON(ops->start_p2p_device && !ops->stop_p2p_device);
462 WARN_ON(ops->start_ap && !ops->stop_ap);
463 WARN_ON(ops->join_ocb && !ops->leave_ocb);
464 WARN_ON(ops->suspend && !ops->resume);
465 WARN_ON(ops->sched_scan_start && !ops->sched_scan_stop);
466 WARN_ON(ops->remain_on_channel && !ops->cancel_remain_on_channel);
467 WARN_ON(ops->tdls_channel_switch && !ops->tdls_cancel_channel_switch);
468 WARN_ON(ops->add_tx_ts && !ops->del_tx_ts);
469
470 alloc_size = sizeof(*rdev) + sizeof_priv;
471
472 rdev = kzalloc(alloc_size, GFP_KERNEL);
473 if (!rdev)
474 return NULL;
475
476 rdev->ops = ops;
477
478 rdev->wiphy_idx = atomic_inc_return(&wiphy_counter);
479
480 if (unlikely(rdev->wiphy_idx < 0)) {
481 /* ugh, wrapped! */
482 atomic_dec(&wiphy_counter);
483 kfree(rdev);
484 return NULL;
485 }
486
487 /* atomic_inc_return makes it start at 1, make it start at 0 */
488 rdev->wiphy_idx--;
489
490 /* give it a proper name */
491 if (requested_name && requested_name[0]) {
492 int rv;
493
494 rtnl_lock();
495 rv = cfg80211_dev_check_name(rdev, requested_name);
496
497 if (rv < 0) {
498 rtnl_unlock();
499 goto use_default_name;
500 }
501
502 rv = dev_set_name(&rdev->wiphy.dev, "%s", requested_name);
503 rtnl_unlock();
504 if (rv)
505 goto use_default_name;
506 } else {
507 int rv;
508
509use_default_name:
510 /* NOTE: This is *probably* safe w/out holding rtnl because of
511 * the restrictions on phy names. Probably this call could
512 * fail if some other part of the kernel (re)named a device
513 * phyX. But, might should add some locking and check return
514 * value, and use a different name if this one exists?
515 */
516 rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
517 if (rv < 0) {
518 kfree(rdev);
519 return NULL;
520 }
521 }
522
523 mutex_init(&rdev->wiphy.mtx);
524 INIT_LIST_HEAD(&rdev->wiphy.wdev_list);
525 INIT_LIST_HEAD(&rdev->beacon_registrations);
526 spin_lock_init(&rdev->beacon_registrations_lock);
527 spin_lock_init(&rdev->bss_lock);
528 INIT_LIST_HEAD(&rdev->bss_list);
529 INIT_LIST_HEAD(&rdev->sched_scan_req_list);
530 wiphy_work_init(&rdev->scan_done_wk, __cfg80211_scan_done);
531 INIT_DELAYED_WORK(&rdev->dfs_update_channels_wk,
532 cfg80211_dfs_channels_update_work);
533#ifdef CONFIG_CFG80211_WEXT
534 rdev->wiphy.wext = &cfg80211_wext_handler;
535#endif
536
537 device_initialize(&rdev->wiphy.dev);
538 rdev->wiphy.dev.class = &ieee80211_class;
539 rdev->wiphy.dev.platform_data = rdev;
540 device_enable_async_suspend(&rdev->wiphy.dev);
541
542 INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk);
543 wiphy_work_init(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk);
544 INIT_WORK(&rdev->sched_scan_res_wk, cfg80211_sched_scan_results_wk);
545 INIT_WORK(&rdev->propagate_radar_detect_wk,
546 cfg80211_propagate_radar_detect_wk);
547 INIT_WORK(&rdev->propagate_cac_done_wk, cfg80211_propagate_cac_done_wk);
548 INIT_WORK(&rdev->mgmt_registrations_update_wk,
549 cfg80211_mgmt_registrations_update_wk);
550 spin_lock_init(&rdev->mgmt_registrations_lock);
551
552#ifdef CONFIG_CFG80211_DEFAULT_PS
553 rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
554#endif
555
556 wiphy_net_set(&rdev->wiphy, &init_net);
557
558 rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
559 rdev->wiphy.rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
560 &rdev->wiphy.dev, RFKILL_TYPE_WLAN,
561 &rdev->rfkill_ops, rdev);
562
563 if (!rdev->wiphy.rfkill) {
564 wiphy_free(&rdev->wiphy);
565 return NULL;
566 }
567
568 INIT_WORK(&rdev->wiphy_work, cfg80211_wiphy_work);
569 INIT_LIST_HEAD(&rdev->wiphy_work_list);
570 spin_lock_init(&rdev->wiphy_work_lock);
571 INIT_WORK(&rdev->rfkill_block, cfg80211_rfkill_block_work);
572 INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
573 INIT_WORK(&rdev->event_work, cfg80211_event_work);
574 INIT_WORK(&rdev->background_cac_abort_wk,
575 cfg80211_background_cac_abort_wk);
576 INIT_DELAYED_WORK(&rdev->background_cac_done_wk,
577 cfg80211_background_cac_done_wk);
578
579 init_waitqueue_head(&rdev->dev_wait);
580
581 /*
582 * Initialize wiphy parameters to IEEE 802.11 MIB default values.
583 * Fragmentation and RTS threshold are disabled by default with the
584 * special -1 value.
585 */
586 rdev->wiphy.retry_short = 7;
587 rdev->wiphy.retry_long = 4;
588 rdev->wiphy.frag_threshold = (u32) -1;
589 rdev->wiphy.rts_threshold = (u32) -1;
590 rdev->wiphy.coverage_class = 0;
591
592 rdev->wiphy.max_num_csa_counters = 1;
593
594 rdev->wiphy.max_sched_scan_plans = 1;
595 rdev->wiphy.max_sched_scan_plan_interval = U32_MAX;
596
597 return &rdev->wiphy;
598}
599EXPORT_SYMBOL(wiphy_new_nm);
600
601static int wiphy_verify_combinations(struct wiphy *wiphy)
602{
603 const struct ieee80211_iface_combination *c;
604 int i, j;
605
606 for (i = 0; i < wiphy->n_iface_combinations; i++) {
607 u32 cnt = 0;
608 u16 all_iftypes = 0;
609
610 c = &wiphy->iface_combinations[i];
611
612 /*
613 * Combinations with just one interface aren't real,
614 * however we make an exception for DFS.
615 */
616 if (WARN_ON((c->max_interfaces < 2) && !c->radar_detect_widths))
617 return -EINVAL;
618
619 /* Need at least one channel */
620 if (WARN_ON(!c->num_different_channels))
621 return -EINVAL;
622
623 /* DFS only works on one channel. */
624 if (WARN_ON(c->radar_detect_widths &&
625 (c->num_different_channels > 1)))
626 return -EINVAL;
627
628 if (WARN_ON(!c->n_limits))
629 return -EINVAL;
630
631 for (j = 0; j < c->n_limits; j++) {
632 u16 types = c->limits[j].types;
633
634 /* interface types shouldn't overlap */
635 if (WARN_ON(types & all_iftypes))
636 return -EINVAL;
637 all_iftypes |= types;
638
639 if (WARN_ON(!c->limits[j].max))
640 return -EINVAL;
641
642 /* Shouldn't list software iftypes in combinations! */
643 if (WARN_ON(wiphy->software_iftypes & types))
644 return -EINVAL;
645
646 /* Only a single P2P_DEVICE can be allowed */
647 if (WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
648 c->limits[j].max > 1))
649 return -EINVAL;
650
651 /* Only a single NAN can be allowed */
652 if (WARN_ON(types & BIT(NL80211_IFTYPE_NAN) &&
653 c->limits[j].max > 1))
654 return -EINVAL;
655
656 /*
657 * This isn't well-defined right now. If you have an
658 * IBSS interface, then its beacon interval may change
659 * by joining other networks, and nothing prevents it
660 * from doing that.
661 * So technically we probably shouldn't even allow AP
662 * and IBSS in the same interface, but it seems that
663 * some drivers support that, possibly only with fixed
664 * beacon intervals for IBSS.
665 */
666 if (WARN_ON(types & BIT(NL80211_IFTYPE_ADHOC) &&
667 c->beacon_int_min_gcd)) {
668 return -EINVAL;
669 }
670
671 cnt += c->limits[j].max;
672 /*
673 * Don't advertise an unsupported type
674 * in a combination.
675 */
676 if (WARN_ON((wiphy->interface_modes & types) != types))
677 return -EINVAL;
678 }
679
680 if (WARN_ON(all_iftypes & BIT(NL80211_IFTYPE_WDS)))
681 return -EINVAL;
682
683 /* You can't even choose that many! */
684 if (WARN_ON(cnt < c->max_interfaces))
685 return -EINVAL;
686 }
687
688 return 0;
689}
690
691int wiphy_register(struct wiphy *wiphy)
692{
693 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
694 int res;
695 enum nl80211_band band;
696 struct ieee80211_supported_band *sband;
697 bool have_band = false;
698 int i;
699 u16 ifmodes = wiphy->interface_modes;
700
701#ifdef CONFIG_PM
702 if (WARN_ON(wiphy->wowlan &&
703 (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
704 !(wiphy->wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
705 return -EINVAL;
706 if (WARN_ON(wiphy->wowlan &&
707 !wiphy->wowlan->flags && !wiphy->wowlan->n_patterns &&
708 !wiphy->wowlan->tcp))
709 return -EINVAL;
710#endif
711 if (WARN_ON((wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
712 (!rdev->ops->tdls_channel_switch ||
713 !rdev->ops->tdls_cancel_channel_switch)))
714 return -EINVAL;
715
716 if (WARN_ON((wiphy->interface_modes & BIT(NL80211_IFTYPE_NAN)) &&
717 (!rdev->ops->start_nan || !rdev->ops->stop_nan ||
718 !rdev->ops->add_nan_func || !rdev->ops->del_nan_func ||
719 !(wiphy->nan_supported_bands & BIT(NL80211_BAND_2GHZ)))))
720 return -EINVAL;
721
722 if (WARN_ON(wiphy->interface_modes & BIT(NL80211_IFTYPE_WDS)))
723 return -EINVAL;
724
725 if (WARN_ON(wiphy->pmsr_capa && !wiphy->pmsr_capa->ftm.supported))
726 return -EINVAL;
727
728 if (wiphy->pmsr_capa && wiphy->pmsr_capa->ftm.supported) {
729 if (WARN_ON(!wiphy->pmsr_capa->ftm.asap &&
730 !wiphy->pmsr_capa->ftm.non_asap))
731 return -EINVAL;
732 if (WARN_ON(!wiphy->pmsr_capa->ftm.preambles ||
733 !wiphy->pmsr_capa->ftm.bandwidths))
734 return -EINVAL;
735 if (WARN_ON(wiphy->pmsr_capa->ftm.preambles &
736 ~(BIT(NL80211_PREAMBLE_LEGACY) |
737 BIT(NL80211_PREAMBLE_HT) |
738 BIT(NL80211_PREAMBLE_VHT) |
739 BIT(NL80211_PREAMBLE_HE) |
740 BIT(NL80211_PREAMBLE_DMG))))
741 return -EINVAL;
742 if (WARN_ON((wiphy->pmsr_capa->ftm.trigger_based ||
743 wiphy->pmsr_capa->ftm.non_trigger_based) &&
744 !(wiphy->pmsr_capa->ftm.preambles &
745 BIT(NL80211_PREAMBLE_HE))))
746 return -EINVAL;
747 if (WARN_ON(wiphy->pmsr_capa->ftm.bandwidths &
748 ~(BIT(NL80211_CHAN_WIDTH_20_NOHT) |
749 BIT(NL80211_CHAN_WIDTH_20) |
750 BIT(NL80211_CHAN_WIDTH_40) |
751 BIT(NL80211_CHAN_WIDTH_80) |
752 BIT(NL80211_CHAN_WIDTH_80P80) |
753 BIT(NL80211_CHAN_WIDTH_160) |
754 BIT(NL80211_CHAN_WIDTH_5) |
755 BIT(NL80211_CHAN_WIDTH_10))))
756 return -EINVAL;
757 }
758
759 if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) &&
760 (wiphy->regulatory_flags &
761 (REGULATORY_CUSTOM_REG |
762 REGULATORY_STRICT_REG |
763 REGULATORY_COUNTRY_IE_FOLLOW_POWER |
764 REGULATORY_COUNTRY_IE_IGNORE))))
765 return -EINVAL;
766
767 if (WARN_ON(wiphy->coalesce &&
768 (!wiphy->coalesce->n_rules ||
769 !wiphy->coalesce->n_patterns) &&
770 (!wiphy->coalesce->pattern_min_len ||
771 wiphy->coalesce->pattern_min_len >
772 wiphy->coalesce->pattern_max_len)))
773 return -EINVAL;
774
775 if (WARN_ON(wiphy->ap_sme_capa &&
776 !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
777 return -EINVAL;
778
779 if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
780 return -EINVAL;
781
782 if (WARN_ON(wiphy->addresses &&
783 !is_zero_ether_addr(wiphy->perm_addr) &&
784 memcmp(wiphy->perm_addr, wiphy->addresses[0].addr,
785 ETH_ALEN)))
786 return -EINVAL;
787
788 if (WARN_ON(wiphy->max_acl_mac_addrs &&
789 (!(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME) ||
790 !rdev->ops->set_mac_acl)))
791 return -EINVAL;
792
793 /* assure only valid behaviours are flagged by driver
794 * hence subtract 2 as bit 0 is invalid.
795 */
796 if (WARN_ON(wiphy->bss_select_support &&
797 (wiphy->bss_select_support & ~(BIT(__NL80211_BSS_SELECT_ATTR_AFTER_LAST) - 2))))
798 return -EINVAL;
799
800 if (WARN_ON(wiphy_ext_feature_isset(&rdev->wiphy,
801 NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X) &&
802 (!rdev->ops->set_pmk || !rdev->ops->del_pmk)))
803 return -EINVAL;
804
805 if (WARN_ON(!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) &&
806 rdev->ops->update_connect_params))
807 return -EINVAL;
808
809 if (wiphy->addresses)
810 memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN);
811
812 /* sanity check ifmodes */
813 WARN_ON(!ifmodes);
814 ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1;
815 if (WARN_ON(ifmodes != wiphy->interface_modes))
816 wiphy->interface_modes = ifmodes;
817
818 res = wiphy_verify_combinations(wiphy);
819 if (res)
820 return res;
821
822 /* sanity check supported bands/channels */
823 for (band = 0; band < NUM_NL80211_BANDS; band++) {
824 const struct ieee80211_sband_iftype_data *iftd;
825 u16 types = 0;
826 bool have_he = false;
827
828 sband = wiphy->bands[band];
829 if (!sband)
830 continue;
831
832 sband->band = band;
833 if (WARN_ON(!sband->n_channels))
834 return -EINVAL;
835 /*
836 * on 60GHz or sub-1Ghz band, there are no legacy rates, so
837 * n_bitrates is 0
838 */
839 if (WARN_ON((band != NL80211_BAND_60GHZ &&
840 band != NL80211_BAND_S1GHZ) &&
841 !sband->n_bitrates))
842 return -EINVAL;
843
844 if (WARN_ON(band == NL80211_BAND_6GHZ &&
845 (sband->ht_cap.ht_supported ||
846 sband->vht_cap.vht_supported)))
847 return -EINVAL;
848
849 /*
850 * Since cfg80211_disable_40mhz_24ghz is global, we can
851 * modify the sband's ht data even if the driver uses a
852 * global structure for that.
853 */
854 if (cfg80211_disable_40mhz_24ghz &&
855 band == NL80211_BAND_2GHZ &&
856 sband->ht_cap.ht_supported) {
857 sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
858 sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
859 }
860
861 /*
862 * Since we use a u32 for rate bitmaps in
863 * ieee80211_get_response_rate, we cannot
864 * have more than 32 legacy rates.
865 */
866 if (WARN_ON(sband->n_bitrates > 32))
867 return -EINVAL;
868
869 for (i = 0; i < sband->n_channels; i++) {
870 sband->channels[i].orig_flags =
871 sband->channels[i].flags;
872 sband->channels[i].orig_mag = INT_MAX;
873 sband->channels[i].orig_mpwr =
874 sband->channels[i].max_power;
875 sband->channels[i].band = band;
876
877 if (WARN_ON(sband->channels[i].freq_offset >= 1000))
878 return -EINVAL;
879 }
880
881 for_each_sband_iftype_data(sband, i, iftd) {
882 bool has_ap, has_non_ap;
883 u32 ap_bits = BIT(NL80211_IFTYPE_AP) |
884 BIT(NL80211_IFTYPE_P2P_GO);
885
886 if (WARN_ON(!iftd->types_mask))
887 return -EINVAL;
888 if (WARN_ON(types & iftd->types_mask))
889 return -EINVAL;
890
891 /* at least one piece of information must be present */
892 if (WARN_ON(!iftd->he_cap.has_he))
893 return -EINVAL;
894
895 types |= iftd->types_mask;
896
897 if (i == 0)
898 have_he = iftd->he_cap.has_he;
899 else
900 have_he = have_he &&
901 iftd->he_cap.has_he;
902
903 has_ap = iftd->types_mask & ap_bits;
904 has_non_ap = iftd->types_mask & ~ap_bits;
905
906 /*
907 * For EHT 20 MHz STA, the capabilities format differs
908 * but to simplify, don't check 20 MHz but rather check
909 * only if AP and non-AP were mentioned at the same time,
910 * reject if so.
911 */
912 if (WARN_ON(iftd->eht_cap.has_eht &&
913 has_ap && has_non_ap))
914 return -EINVAL;
915 }
916
917 if (WARN_ON(!have_he && band == NL80211_BAND_6GHZ))
918 return -EINVAL;
919
920 have_band = true;
921 }
922
923 if (!have_band) {
924 WARN_ON(1);
925 return -EINVAL;
926 }
927
928 for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) {
929 /*
930 * Validate we have a policy (can be explicitly set to
931 * VENDOR_CMD_RAW_DATA which is non-NULL) and also that
932 * we have at least one of doit/dumpit.
933 */
934 if (WARN_ON(!rdev->wiphy.vendor_commands[i].policy))
935 return -EINVAL;
936 if (WARN_ON(!rdev->wiphy.vendor_commands[i].doit &&
937 !rdev->wiphy.vendor_commands[i].dumpit))
938 return -EINVAL;
939 }
940
941#ifdef CONFIG_PM
942 if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns &&
943 (!rdev->wiphy.wowlan->pattern_min_len ||
944 rdev->wiphy.wowlan->pattern_min_len >
945 rdev->wiphy.wowlan->pattern_max_len)))
946 return -EINVAL;
947#endif
948
949 if (!wiphy->max_num_akm_suites)
950 wiphy->max_num_akm_suites = NL80211_MAX_NR_AKM_SUITES;
951 else if (wiphy->max_num_akm_suites < NL80211_MAX_NR_AKM_SUITES ||
952 wiphy->max_num_akm_suites > CFG80211_MAX_NUM_AKM_SUITES)
953 return -EINVAL;
954
955 /* check and set up bitrates */
956 ieee80211_set_bitrate_flags(wiphy);
957
958 rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH;
959
960 rtnl_lock();
961 wiphy_lock(&rdev->wiphy);
962 res = device_add(&rdev->wiphy.dev);
963 if (res) {
964 wiphy_unlock(&rdev->wiphy);
965 rtnl_unlock();
966 return res;
967 }
968
969 list_add_rcu(&rdev->list, &cfg80211_rdev_list);
970 cfg80211_rdev_list_generation++;
971
972 /* add to debugfs */
973 rdev->wiphy.debugfsdir = debugfs_create_dir(wiphy_name(&rdev->wiphy),
974 ieee80211_debugfs_dir);
975
976 cfg80211_debugfs_rdev_add(rdev);
977 nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
978 wiphy_unlock(&rdev->wiphy);
979
980 /* set up regulatory info */
981 wiphy_regulatory_register(wiphy);
982
983 if (wiphy->regulatory_flags & REGULATORY_CUSTOM_REG) {
984 struct regulatory_request request;
985
986 request.wiphy_idx = get_wiphy_idx(wiphy);
987 request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
988 request.alpha2[0] = '9';
989 request.alpha2[1] = '9';
990
991 nl80211_send_reg_change_event(&request);
992 }
993
994 /* Check that nobody globally advertises any capabilities they do not
995 * advertise on all possible interface types.
996 */
997 if (wiphy->extended_capabilities_len &&
998 wiphy->num_iftype_ext_capab &&
999 wiphy->iftype_ext_capab) {
1000 u8 supported_on_all, j;
1001 const struct wiphy_iftype_ext_capab *capab;
1002
1003 capab = wiphy->iftype_ext_capab;
1004 for (j = 0; j < wiphy->extended_capabilities_len; j++) {
1005 if (capab[0].extended_capabilities_len > j)
1006 supported_on_all =
1007 capab[0].extended_capabilities[j];
1008 else
1009 supported_on_all = 0x00;
1010 for (i = 1; i < wiphy->num_iftype_ext_capab; i++) {
1011 if (j >= capab[i].extended_capabilities_len) {
1012 supported_on_all = 0x00;
1013 break;
1014 }
1015 supported_on_all &=
1016 capab[i].extended_capabilities[j];
1017 }
1018 if (WARN_ON(wiphy->extended_capabilities[j] &
1019 ~supported_on_all))
1020 break;
1021 }
1022 }
1023
1024 rdev->wiphy.registered = true;
1025 rtnl_unlock();
1026
1027 res = rfkill_register(rdev->wiphy.rfkill);
1028 if (res) {
1029 rfkill_destroy(rdev->wiphy.rfkill);
1030 rdev->wiphy.rfkill = NULL;
1031 wiphy_unregister(&rdev->wiphy);
1032 return res;
1033 }
1034
1035 return 0;
1036}
1037EXPORT_SYMBOL(wiphy_register);
1038
1039void wiphy_rfkill_start_polling(struct wiphy *wiphy)
1040{
1041 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1042
1043 if (!rdev->ops->rfkill_poll)
1044 return;
1045 rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
1046 rfkill_resume_polling(wiphy->rfkill);
1047}
1048EXPORT_SYMBOL(wiphy_rfkill_start_polling);
1049
1050void cfg80211_process_wiphy_works(struct cfg80211_registered_device *rdev,
1051 struct wiphy_work *end)
1052{
1053 unsigned int runaway_limit = 100;
1054 unsigned long flags;
1055
1056 lockdep_assert_held(&rdev->wiphy.mtx);
1057
1058 spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1059 while (!list_empty(&rdev->wiphy_work_list)) {
1060 struct wiphy_work *wk;
1061
1062 wk = list_first_entry(&rdev->wiphy_work_list,
1063 struct wiphy_work, entry);
1064 list_del_init(&wk->entry);
1065 spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1066
1067 wk->func(&rdev->wiphy, wk);
1068
1069 spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1070
1071 if (wk == end)
1072 break;
1073
1074 if (WARN_ON(--runaway_limit == 0))
1075 INIT_LIST_HEAD(&rdev->wiphy_work_list);
1076 }
1077 spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1078}
1079
1080void wiphy_unregister(struct wiphy *wiphy)
1081{
1082 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1083
1084 wait_event(rdev->dev_wait, ({
1085 int __count;
1086 wiphy_lock(&rdev->wiphy);
1087 __count = rdev->opencount;
1088 wiphy_unlock(&rdev->wiphy);
1089 __count == 0; }));
1090
1091 if (rdev->wiphy.rfkill)
1092 rfkill_unregister(rdev->wiphy.rfkill);
1093
1094 rtnl_lock();
1095 wiphy_lock(&rdev->wiphy);
1096 nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
1097 rdev->wiphy.registered = false;
1098
1099 WARN_ON(!list_empty(&rdev->wiphy.wdev_list));
1100
1101 /*
1102 * First remove the hardware from everywhere, this makes
1103 * it impossible to find from userspace.
1104 */
1105 debugfs_remove_recursive(rdev->wiphy.debugfsdir);
1106 list_del_rcu(&rdev->list);
1107 synchronize_rcu();
1108
1109 /*
1110 * If this device got a regulatory hint tell core its
1111 * free to listen now to a new shiny device regulatory hint
1112 */
1113 wiphy_regulatory_deregister(wiphy);
1114
1115 cfg80211_rdev_list_generation++;
1116 device_del(&rdev->wiphy.dev);
1117
1118#ifdef CONFIG_PM
1119 if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup)
1120 rdev_set_wakeup(rdev, false);
1121#endif
1122
1123 /* surely nothing is reachable now, clean up work */
1124 cfg80211_process_wiphy_works(rdev, NULL);
1125 wiphy_unlock(&rdev->wiphy);
1126 rtnl_unlock();
1127
1128 /* this has nothing to do now but make sure it's gone */
1129 cancel_work_sync(&rdev->wiphy_work);
1130
1131 cancel_work_sync(&rdev->conn_work);
1132 flush_work(&rdev->event_work);
1133 cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
1134 cancel_delayed_work_sync(&rdev->background_cac_done_wk);
1135 flush_work(&rdev->destroy_work);
1136 flush_work(&rdev->propagate_radar_detect_wk);
1137 flush_work(&rdev->propagate_cac_done_wk);
1138 flush_work(&rdev->mgmt_registrations_update_wk);
1139 flush_work(&rdev->background_cac_abort_wk);
1140
1141 cfg80211_rdev_free_wowlan(rdev);
1142 cfg80211_rdev_free_coalesce(rdev);
1143}
1144EXPORT_SYMBOL(wiphy_unregister);
1145
1146void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
1147{
1148 struct cfg80211_internal_bss *scan, *tmp;
1149 struct cfg80211_beacon_registration *reg, *treg;
1150 rfkill_destroy(rdev->wiphy.rfkill);
1151 list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
1152 list_del(®->list);
1153 kfree(reg);
1154 }
1155 list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
1156 cfg80211_put_bss(&rdev->wiphy, &scan->pub);
1157 mutex_destroy(&rdev->wiphy.mtx);
1158
1159 /*
1160 * The 'regd' can only be non-NULL if we never finished
1161 * initializing the wiphy and thus never went through the
1162 * unregister path - e.g. in failure scenarios. Thus, it
1163 * cannot have been visible to anyone if non-NULL, so we
1164 * can just free it here.
1165 */
1166 kfree(rcu_dereference_raw(rdev->wiphy.regd));
1167
1168 kfree(rdev);
1169}
1170
1171void wiphy_free(struct wiphy *wiphy)
1172{
1173 put_device(&wiphy->dev);
1174}
1175EXPORT_SYMBOL(wiphy_free);
1176
1177void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked,
1178 enum rfkill_hard_block_reasons reason)
1179{
1180 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1181
1182 if (rfkill_set_hw_state_reason(wiphy->rfkill, blocked, reason))
1183 schedule_work(&rdev->rfkill_block);
1184}
1185EXPORT_SYMBOL(wiphy_rfkill_set_hw_state_reason);
1186
1187static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
1188 bool unregister_netdev)
1189{
1190 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
1191 struct cfg80211_cqm_config *cqm_config;
1192 unsigned int link_id;
1193
1194 ASSERT_RTNL();
1195 lockdep_assert_held(&rdev->wiphy.mtx);
1196
1197 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
1198
1199 wdev->registered = false;
1200
1201 if (wdev->netdev) {
1202 sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211");
1203 if (unregister_netdev)
1204 unregister_netdevice(wdev->netdev);
1205 }
1206
1207 list_del_rcu(&wdev->list);
1208 synchronize_net();
1209 rdev->devlist_generation++;
1210
1211 cfg80211_mlme_purge_registrations(wdev);
1212
1213 switch (wdev->iftype) {
1214 case NL80211_IFTYPE_P2P_DEVICE:
1215 cfg80211_stop_p2p_device(rdev, wdev);
1216 break;
1217 case NL80211_IFTYPE_NAN:
1218 cfg80211_stop_nan(rdev, wdev);
1219 break;
1220 default:
1221 break;
1222 }
1223
1224#ifdef CONFIG_CFG80211_WEXT
1225 kfree_sensitive(wdev->wext.keys);
1226 wdev->wext.keys = NULL;
1227#endif
1228 wiphy_work_cancel(wdev->wiphy, &wdev->cqm_rssi_work);
1229 /* deleted from the list, so can't be found from nl80211 any more */
1230 cqm_config = rcu_access_pointer(wdev->cqm_config);
1231 kfree_rcu(cqm_config, rcu_head);
1232
1233 /*
1234 * Ensure that all events have been processed and
1235 * freed.
1236 */
1237 cfg80211_process_wdev_events(wdev);
1238
1239 if (wdev->iftype == NL80211_IFTYPE_STATION ||
1240 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) {
1241 for (link_id = 0; link_id < ARRAY_SIZE(wdev->links); link_id++) {
1242 struct cfg80211_internal_bss *curbss;
1243
1244 curbss = wdev->links[link_id].client.current_bss;
1245
1246 if (WARN_ON(curbss)) {
1247 cfg80211_unhold_bss(curbss);
1248 cfg80211_put_bss(wdev->wiphy, &curbss->pub);
1249 wdev->links[link_id].client.current_bss = NULL;
1250 }
1251 }
1252 }
1253
1254 wdev->connected = false;
1255}
1256
1257void cfg80211_unregister_wdev(struct wireless_dev *wdev)
1258{
1259 _cfg80211_unregister_wdev(wdev, true);
1260}
1261EXPORT_SYMBOL(cfg80211_unregister_wdev);
1262
1263static const struct device_type wiphy_type = {
1264 .name = "wlan",
1265};
1266
1267void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
1268 enum nl80211_iftype iftype, int num)
1269{
1270 lockdep_assert_held(&rdev->wiphy.mtx);
1271
1272 rdev->num_running_ifaces += num;
1273 if (iftype == NL80211_IFTYPE_MONITOR)
1274 rdev->num_running_monitor_ifaces += num;
1275}
1276
1277void cfg80211_leave(struct cfg80211_registered_device *rdev,
1278 struct wireless_dev *wdev)
1279{
1280 struct net_device *dev = wdev->netdev;
1281 struct cfg80211_sched_scan_request *pos, *tmp;
1282
1283 lockdep_assert_held(&rdev->wiphy.mtx);
1284
1285 cfg80211_pmsr_wdev_down(wdev);
1286
1287 cfg80211_stop_background_radar_detection(wdev);
1288
1289 switch (wdev->iftype) {
1290 case NL80211_IFTYPE_ADHOC:
1291 cfg80211_leave_ibss(rdev, dev, true);
1292 break;
1293 case NL80211_IFTYPE_P2P_CLIENT:
1294 case NL80211_IFTYPE_STATION:
1295 list_for_each_entry_safe(pos, tmp, &rdev->sched_scan_req_list,
1296 list) {
1297 if (dev == pos->dev)
1298 cfg80211_stop_sched_scan_req(rdev, pos, false);
1299 }
1300
1301#ifdef CONFIG_CFG80211_WEXT
1302 kfree(wdev->wext.ie);
1303 wdev->wext.ie = NULL;
1304 wdev->wext.ie_len = 0;
1305 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1306#endif
1307 cfg80211_disconnect(rdev, dev,
1308 WLAN_REASON_DEAUTH_LEAVING, true);
1309 break;
1310 case NL80211_IFTYPE_MESH_POINT:
1311 cfg80211_leave_mesh(rdev, dev);
1312 break;
1313 case NL80211_IFTYPE_AP:
1314 case NL80211_IFTYPE_P2P_GO:
1315 cfg80211_stop_ap(rdev, dev, -1, true);
1316 break;
1317 case NL80211_IFTYPE_OCB:
1318 cfg80211_leave_ocb(rdev, dev);
1319 break;
1320 case NL80211_IFTYPE_P2P_DEVICE:
1321 case NL80211_IFTYPE_NAN:
1322 /* cannot happen, has no netdev */
1323 break;
1324 case NL80211_IFTYPE_AP_VLAN:
1325 case NL80211_IFTYPE_MONITOR:
1326 /* nothing to do */
1327 break;
1328 case NL80211_IFTYPE_UNSPECIFIED:
1329 case NL80211_IFTYPE_WDS:
1330 case NUM_NL80211_IFTYPES:
1331 /* invalid */
1332 break;
1333 }
1334}
1335
1336void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
1337 gfp_t gfp)
1338{
1339 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1340 struct cfg80211_event *ev;
1341 unsigned long flags;
1342
1343 trace_cfg80211_stop_iface(wiphy, wdev);
1344
1345 ev = kzalloc(sizeof(*ev), gfp);
1346 if (!ev)
1347 return;
1348
1349 ev->type = EVENT_STOPPED;
1350
1351 spin_lock_irqsave(&wdev->event_lock, flags);
1352 list_add_tail(&ev->list, &wdev->event_list);
1353 spin_unlock_irqrestore(&wdev->event_lock, flags);
1354 queue_work(cfg80211_wq, &rdev->event_work);
1355}
1356EXPORT_SYMBOL(cfg80211_stop_iface);
1357
1358void cfg80211_init_wdev(struct wireless_dev *wdev)
1359{
1360 INIT_LIST_HEAD(&wdev->event_list);
1361 spin_lock_init(&wdev->event_lock);
1362 INIT_LIST_HEAD(&wdev->mgmt_registrations);
1363 INIT_LIST_HEAD(&wdev->pmsr_list);
1364 spin_lock_init(&wdev->pmsr_lock);
1365 INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk);
1366
1367#ifdef CONFIG_CFG80211_WEXT
1368 wdev->wext.default_key = -1;
1369 wdev->wext.default_mgmt_key = -1;
1370 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1371#endif
1372
1373 wiphy_work_init(&wdev->cqm_rssi_work, cfg80211_cqm_rssi_notify_work);
1374
1375 if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT)
1376 wdev->ps = true;
1377 else
1378 wdev->ps = false;
1379 /* allow mac80211 to determine the timeout */
1380 wdev->ps_timeout = -1;
1381
1382 if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1383 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
1384 wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)
1385 wdev->netdev->priv_flags |= IFF_DONT_BRIDGE;
1386
1387 INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk);
1388}
1389
1390void cfg80211_register_wdev(struct cfg80211_registered_device *rdev,
1391 struct wireless_dev *wdev)
1392{
1393 ASSERT_RTNL();
1394 lockdep_assert_held(&rdev->wiphy.mtx);
1395
1396 /*
1397 * We get here also when the interface changes network namespaces,
1398 * as it's registered into the new one, but we don't want it to
1399 * change ID in that case. Checking if the ID is already assigned
1400 * works, because 0 isn't considered a valid ID and the memory is
1401 * 0-initialized.
1402 */
1403 if (!wdev->identifier)
1404 wdev->identifier = ++rdev->wdev_id;
1405 list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
1406 rdev->devlist_generation++;
1407 wdev->registered = true;
1408
1409 if (wdev->netdev &&
1410 sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj,
1411 "phy80211"))
1412 pr_err("failed to add phy80211 symlink to netdev!\n");
1413
1414 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
1415}
1416
1417int cfg80211_register_netdevice(struct net_device *dev)
1418{
1419 struct wireless_dev *wdev = dev->ieee80211_ptr;
1420 struct cfg80211_registered_device *rdev;
1421 int ret;
1422
1423 ASSERT_RTNL();
1424
1425 if (WARN_ON(!wdev))
1426 return -EINVAL;
1427
1428 rdev = wiphy_to_rdev(wdev->wiphy);
1429
1430 lockdep_assert_held(&rdev->wiphy.mtx);
1431
1432 /* we'll take care of this */
1433 wdev->registered = true;
1434 wdev->registering = true;
1435 ret = register_netdevice(dev);
1436 if (ret)
1437 goto out;
1438
1439 cfg80211_register_wdev(rdev, wdev);
1440 ret = 0;
1441out:
1442 wdev->registering = false;
1443 if (ret)
1444 wdev->registered = false;
1445 return ret;
1446}
1447EXPORT_SYMBOL(cfg80211_register_netdevice);
1448
1449static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
1450 unsigned long state, void *ptr)
1451{
1452 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1453 struct wireless_dev *wdev = dev->ieee80211_ptr;
1454 struct cfg80211_registered_device *rdev;
1455 struct cfg80211_sched_scan_request *pos, *tmp;
1456
1457 if (!wdev)
1458 return NOTIFY_DONE;
1459
1460 rdev = wiphy_to_rdev(wdev->wiphy);
1461
1462 WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
1463
1464 switch (state) {
1465 case NETDEV_POST_INIT:
1466 SET_NETDEV_DEVTYPE(dev, &wiphy_type);
1467 wdev->netdev = dev;
1468 /* can only change netns with wiphy */
1469 dev->features |= NETIF_F_NETNS_LOCAL;
1470
1471 cfg80211_init_wdev(wdev);
1472 break;
1473 case NETDEV_REGISTER:
1474 if (!wdev->registered) {
1475 wiphy_lock(&rdev->wiphy);
1476 cfg80211_register_wdev(rdev, wdev);
1477 wiphy_unlock(&rdev->wiphy);
1478 }
1479 break;
1480 case NETDEV_UNREGISTER:
1481 /*
1482 * It is possible to get NETDEV_UNREGISTER multiple times,
1483 * so check wdev->registered.
1484 */
1485 if (wdev->registered && !wdev->registering) {
1486 wiphy_lock(&rdev->wiphy);
1487 _cfg80211_unregister_wdev(wdev, false);
1488 wiphy_unlock(&rdev->wiphy);
1489 }
1490 break;
1491 case NETDEV_GOING_DOWN:
1492 wiphy_lock(&rdev->wiphy);
1493 cfg80211_leave(rdev, wdev);
1494 cfg80211_remove_links(wdev);
1495 wiphy_unlock(&rdev->wiphy);
1496 /* since we just did cfg80211_leave() nothing to do there */
1497 cancel_work_sync(&wdev->disconnect_wk);
1498 cancel_work_sync(&wdev->pmsr_free_wk);
1499 break;
1500 case NETDEV_DOWN:
1501 wiphy_lock(&rdev->wiphy);
1502 cfg80211_update_iface_num(rdev, wdev->iftype, -1);
1503 if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
1504 if (WARN_ON(!rdev->scan_req->notified &&
1505 (!rdev->int_scan_req ||
1506 !rdev->int_scan_req->notified)))
1507 rdev->scan_req->info.aborted = true;
1508 ___cfg80211_scan_done(rdev, false);
1509 }
1510
1511 list_for_each_entry_safe(pos, tmp,
1512 &rdev->sched_scan_req_list, list) {
1513 if (WARN_ON(pos->dev == wdev->netdev))
1514 cfg80211_stop_sched_scan_req(rdev, pos, false);
1515 }
1516
1517 rdev->opencount--;
1518 wiphy_unlock(&rdev->wiphy);
1519 wake_up(&rdev->dev_wait);
1520 break;
1521 case NETDEV_UP:
1522 wiphy_lock(&rdev->wiphy);
1523 cfg80211_update_iface_num(rdev, wdev->iftype, 1);
1524 switch (wdev->iftype) {
1525#ifdef CONFIG_CFG80211_WEXT
1526 case NL80211_IFTYPE_ADHOC:
1527 cfg80211_ibss_wext_join(rdev, wdev);
1528 break;
1529 case NL80211_IFTYPE_STATION:
1530 cfg80211_mgd_wext_connect(rdev, wdev);
1531 break;
1532#endif
1533#ifdef CONFIG_MAC80211_MESH
1534 case NL80211_IFTYPE_MESH_POINT:
1535 {
1536 /* backward compat code... */
1537 struct mesh_setup setup;
1538 memcpy(&setup, &default_mesh_setup,
1539 sizeof(setup));
1540 /* back compat only needed for mesh_id */
1541 setup.mesh_id = wdev->u.mesh.id;
1542 setup.mesh_id_len = wdev->u.mesh.id_up_len;
1543 if (wdev->u.mesh.id_up_len)
1544 __cfg80211_join_mesh(rdev, dev,
1545 &setup,
1546 &default_mesh_config);
1547 break;
1548 }
1549#endif
1550 default:
1551 break;
1552 }
1553 rdev->opencount++;
1554
1555 /*
1556 * Configure power management to the driver here so that its
1557 * correctly set also after interface type changes etc.
1558 */
1559 if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1560 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
1561 rdev->ops->set_power_mgmt &&
1562 rdev_set_power_mgmt(rdev, dev, wdev->ps,
1563 wdev->ps_timeout)) {
1564 /* assume this means it's off */
1565 wdev->ps = false;
1566 }
1567 wiphy_unlock(&rdev->wiphy);
1568 break;
1569 case NETDEV_PRE_UP:
1570 if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype,
1571 wdev->use_4addr, 0))
1572 return notifier_from_errno(-EOPNOTSUPP);
1573
1574 if (rfkill_blocked(rdev->wiphy.rfkill))
1575 return notifier_from_errno(-ERFKILL);
1576 break;
1577 default:
1578 return NOTIFY_DONE;
1579 }
1580
1581 wireless_nlevent_flush();
1582
1583 return NOTIFY_OK;
1584}
1585
1586static struct notifier_block cfg80211_netdev_notifier = {
1587 .notifier_call = cfg80211_netdev_notifier_call,
1588};
1589
1590static void __net_exit cfg80211_pernet_exit(struct net *net)
1591{
1592 struct cfg80211_registered_device *rdev;
1593
1594 rtnl_lock();
1595 for_each_rdev(rdev) {
1596 if (net_eq(wiphy_net(&rdev->wiphy), net))
1597 WARN_ON(cfg80211_switch_netns(rdev, &init_net));
1598 }
1599 rtnl_unlock();
1600}
1601
1602static struct pernet_operations cfg80211_pernet_ops = {
1603 .exit = cfg80211_pernet_exit,
1604};
1605
1606void wiphy_work_queue(struct wiphy *wiphy, struct wiphy_work *work)
1607{
1608 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1609 unsigned long flags;
1610
1611 spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1612 if (list_empty(&work->entry))
1613 list_add_tail(&work->entry, &rdev->wiphy_work_list);
1614 spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1615
1616 queue_work(system_unbound_wq, &rdev->wiphy_work);
1617}
1618EXPORT_SYMBOL_GPL(wiphy_work_queue);
1619
1620void wiphy_work_cancel(struct wiphy *wiphy, struct wiphy_work *work)
1621{
1622 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1623 unsigned long flags;
1624
1625 lockdep_assert_held(&wiphy->mtx);
1626
1627 spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1628 if (!list_empty(&work->entry))
1629 list_del_init(&work->entry);
1630 spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1631}
1632EXPORT_SYMBOL_GPL(wiphy_work_cancel);
1633
1634void wiphy_work_flush(struct wiphy *wiphy, struct wiphy_work *work)
1635{
1636 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1637 unsigned long flags;
1638 bool run;
1639
1640 spin_lock_irqsave(&rdev->wiphy_work_lock, flags);
1641 run = !work || !list_empty(&work->entry);
1642 spin_unlock_irqrestore(&rdev->wiphy_work_lock, flags);
1643
1644 if (run)
1645 cfg80211_process_wiphy_works(rdev, work);
1646}
1647EXPORT_SYMBOL_GPL(wiphy_work_flush);
1648
1649void wiphy_delayed_work_timer(struct timer_list *t)
1650{
1651 struct wiphy_delayed_work *dwork = from_timer(dwork, t, timer);
1652
1653 wiphy_work_queue(dwork->wiphy, &dwork->work);
1654}
1655EXPORT_SYMBOL(wiphy_delayed_work_timer);
1656
1657void wiphy_delayed_work_queue(struct wiphy *wiphy,
1658 struct wiphy_delayed_work *dwork,
1659 unsigned long delay)
1660{
1661 if (!delay) {
1662 wiphy_work_queue(wiphy, &dwork->work);
1663 return;
1664 }
1665
1666 dwork->wiphy = wiphy;
1667 mod_timer(&dwork->timer, jiffies + delay);
1668}
1669EXPORT_SYMBOL_GPL(wiphy_delayed_work_queue);
1670
1671void wiphy_delayed_work_cancel(struct wiphy *wiphy,
1672 struct wiphy_delayed_work *dwork)
1673{
1674 lockdep_assert_held(&wiphy->mtx);
1675
1676 del_timer_sync(&dwork->timer);
1677 wiphy_work_cancel(wiphy, &dwork->work);
1678}
1679EXPORT_SYMBOL_GPL(wiphy_delayed_work_cancel);
1680
1681void wiphy_delayed_work_flush(struct wiphy *wiphy,
1682 struct wiphy_delayed_work *dwork)
1683{
1684 lockdep_assert_held(&wiphy->mtx);
1685
1686 del_timer_sync(&dwork->timer);
1687 wiphy_work_flush(wiphy, &dwork->work);
1688}
1689EXPORT_SYMBOL_GPL(wiphy_delayed_work_flush);
1690
1691static int __init cfg80211_init(void)
1692{
1693 int err;
1694
1695 err = register_pernet_device(&cfg80211_pernet_ops);
1696 if (err)
1697 goto out_fail_pernet;
1698
1699 err = wiphy_sysfs_init();
1700 if (err)
1701 goto out_fail_sysfs;
1702
1703 err = register_netdevice_notifier(&cfg80211_netdev_notifier);
1704 if (err)
1705 goto out_fail_notifier;
1706
1707 err = nl80211_init();
1708 if (err)
1709 goto out_fail_nl80211;
1710
1711 ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
1712
1713 err = regulatory_init();
1714 if (err)
1715 goto out_fail_reg;
1716
1717 cfg80211_wq = alloc_ordered_workqueue("cfg80211", WQ_MEM_RECLAIM);
1718 if (!cfg80211_wq) {
1719 err = -ENOMEM;
1720 goto out_fail_wq;
1721 }
1722
1723 return 0;
1724
1725out_fail_wq:
1726 regulatory_exit();
1727out_fail_reg:
1728 debugfs_remove(ieee80211_debugfs_dir);
1729 nl80211_exit();
1730out_fail_nl80211:
1731 unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1732out_fail_notifier:
1733 wiphy_sysfs_exit();
1734out_fail_sysfs:
1735 unregister_pernet_device(&cfg80211_pernet_ops);
1736out_fail_pernet:
1737 return err;
1738}
1739fs_initcall(cfg80211_init);
1740
1741static void __exit cfg80211_exit(void)
1742{
1743 debugfs_remove(ieee80211_debugfs_dir);
1744 nl80211_exit();
1745 unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1746 wiphy_sysfs_exit();
1747 regulatory_exit();
1748 unregister_pernet_device(&cfg80211_pernet_ops);
1749 destroy_workqueue(cfg80211_wq);
1750}
1751module_exit(cfg80211_exit);