1/*
2 * This is the linux wireless configuration interface.
3 *
4 * Copyright 2006-2010		Johannes Berg <johannes@sipsolutions.net>
5 * Copyright 2013-2014  Intel Mobile Communications GmbH
6 */
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9
10#include <linux/if.h>
11#include <linux/module.h>
12#include <linux/err.h>
13#include <linux/list.h>
14#include <linux/slab.h>
15#include <linux/nl80211.h>
16#include <linux/debugfs.h>
17#include <linux/notifier.h>
18#include <linux/device.h>
19#include <linux/etherdevice.h>
20#include <linux/rtnetlink.h>
21#include <linux/sched.h>
22#include <net/genetlink.h>
23#include <net/cfg80211.h>
24#include "nl80211.h"
25#include "core.h"
26#include "sysfs.h"
27#include "debugfs.h"
28#include "wext-compat.h"
29#include "rdev-ops.h"
30
31/* name for sysfs, %d is appended */
32#define PHY_NAME "phy"
33
34MODULE_AUTHOR("Johannes Berg");
35MODULE_LICENSE("GPL");
36MODULE_DESCRIPTION("wireless configuration support");
37MODULE_ALIAS_GENL_FAMILY(NL80211_GENL_NAME);
38
39/* RCU-protected (and RTNL for writers) */
40LIST_HEAD(cfg80211_rdev_list);
41int cfg80211_rdev_list_generation;
42
43/* for debugfs */
44static struct dentry *ieee80211_debugfs_dir;
45
46/* for the cleanup, scan and event works */
47struct workqueue_struct *cfg80211_wq;
48
49static bool cfg80211_disable_40mhz_24ghz;
50module_param(cfg80211_disable_40mhz_24ghz, bool, 0644);
51MODULE_PARM_DESC(cfg80211_disable_40mhz_24ghz,
52		 "Disable 40MHz support in the 2.4GHz band");
53
54struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
55{
56	struct cfg80211_registered_device *result = NULL, *rdev;
57
58	ASSERT_RTNL();
59
60	list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
61		if (rdev->wiphy_idx == wiphy_idx) {
62			result = rdev;
63			break;
64		}
65	}
66
67	return result;
68}
69
70int get_wiphy_idx(struct wiphy *wiphy)
71{
72	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
73
74	return rdev->wiphy_idx;
75}
76
77struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
78{
79	struct cfg80211_registered_device *rdev;
80
81	ASSERT_RTNL();
82
83	rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx);
84	if (!rdev)
85		return NULL;
86	return &rdev->wiphy;
87}
88
89static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev,
90				   const char *newname)
91{
92	struct cfg80211_registered_device *rdev2;
93	int wiphy_idx, taken = -1, digits;
94
95	ASSERT_RTNL();
96
97	/* prohibit calling the thing phy%d when %d is not its number */
98	sscanf(newname, PHY_NAME "%d%n", &wiphy_idx, &taken);
99	if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) {
100		/* count number of places needed to print wiphy_idx */
101		digits = 1;
102		while (wiphy_idx /= 10)
103			digits++;
104		/*
105		 * deny the name if it is phy<idx> where <idx> is printed
106		 * without leading zeroes. taken == strlen(newname) here
107		 */
108		if (taken == strlen(PHY_NAME) + digits)
109			return -EINVAL;
110	}
111
112	/* Ensure another device does not already have this name. */
113	list_for_each_entry(rdev2, &cfg80211_rdev_list, list)
114		if (strcmp(newname, wiphy_name(&rdev2->wiphy)) == 0)
115			return -EINVAL;
116
117	return 0;
118}
119
120int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
121			char *newname)
122{
123	int result;
124
125	ASSERT_RTNL();
126
127	/* Ignore nop renames */
128	if (strcmp(newname, wiphy_name(&rdev->wiphy)) == 0)
129		return 0;
130
131	result = cfg80211_dev_check_name(rdev, newname);
132	if (result < 0)
133		return result;
134
135	result = device_rename(&rdev->wiphy.dev, newname);
136	if (result)
137		return result;
138
139	if (rdev->wiphy.debugfsdir &&
140	    !debugfs_rename(rdev->wiphy.debugfsdir->d_parent,
141			    rdev->wiphy.debugfsdir,
142			    rdev->wiphy.debugfsdir->d_parent,
143			    newname))
144		pr_err("failed to rename debugfs dir to %s!\n", newname);
145
146	nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
147
148	return 0;
149}
150
151int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
152			  struct net *net)
153{
154	struct wireless_dev *wdev;
155	int err = 0;
156
157	if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK))
158		return -EOPNOTSUPP;
159
160	list_for_each_entry(wdev, &rdev->wdev_list, list) {
161		if (!wdev->netdev)
162			continue;
163		wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
164		err = dev_change_net_namespace(wdev->netdev, net, "wlan%d");
165		if (err)
166			break;
167		wdev->netdev->features |= NETIF_F_NETNS_LOCAL;
168	}
169
170	if (err) {
171		/* failed -- clean up to old netns */
172		net = wiphy_net(&rdev->wiphy);
173
174		list_for_each_entry_continue_reverse(wdev, &rdev->wdev_list,
175						     list) {
176			if (!wdev->netdev)
177				continue;
178			wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL;
179			err = dev_change_net_namespace(wdev->netdev, net,
180							"wlan%d");
181			WARN_ON(err);
182			wdev->netdev->features |= NETIF_F_NETNS_LOCAL;
183		}
184
185		return err;
186	}
187
188	wiphy_net_set(&rdev->wiphy, net);
189
190	err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev));
191	WARN_ON(err);
192
193	return 0;
194}
195
196static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
197{
198	struct cfg80211_registered_device *rdev = data;
199
200	rdev_rfkill_poll(rdev);
201}
202
203void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
204			      struct wireless_dev *wdev)
205{
206	ASSERT_RTNL();
207
208	if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE))
209		return;
210
211	if (!wdev->p2p_started)
212		return;
213
214	rdev_stop_p2p_device(rdev, wdev);
215	wdev->p2p_started = false;
216
217	rdev->opencount--;
218
219	if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
220		if (WARN_ON(!rdev->scan_req->notified))
221			rdev->scan_req->aborted = true;
222		___cfg80211_scan_done(rdev, false);
223	}
224}
225
226void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy)
227{
228	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
229	struct wireless_dev *wdev;
230
231	ASSERT_RTNL();
232
233	list_for_each_entry(wdev, &rdev->wdev_list, list) {
234		if (wdev->netdev) {
235			dev_close(wdev->netdev);
236			continue;
237		}
238		/* otherwise, check iftype */
239		switch (wdev->iftype) {
240		case NL80211_IFTYPE_P2P_DEVICE:
241			cfg80211_stop_p2p_device(rdev, wdev);
242			break;
243		default:
244			break;
245		}
246	}
247}
248EXPORT_SYMBOL_GPL(cfg80211_shutdown_all_interfaces);
249
250static int cfg80211_rfkill_set_block(void *data, bool blocked)
251{
252	struct cfg80211_registered_device *rdev = data;
253
254	if (!blocked)
255		return 0;
256
257	rtnl_lock();
258	cfg80211_shutdown_all_interfaces(&rdev->wiphy);
259	rtnl_unlock();
260
261	return 0;
262}
263
264static void cfg80211_rfkill_sync_work(struct work_struct *work)
265{
266	struct cfg80211_registered_device *rdev;
267
268	rdev = container_of(work, struct cfg80211_registered_device, rfkill_sync);
269	cfg80211_rfkill_set_block(rdev, rfkill_blocked(rdev->rfkill));
270}
271
272static void cfg80211_event_work(struct work_struct *work)
273{
274	struct cfg80211_registered_device *rdev;
275
276	rdev = container_of(work, struct cfg80211_registered_device,
277			    event_work);
278
279	rtnl_lock();
280	cfg80211_process_rdev_events(rdev);
281	rtnl_unlock();
282}
283
284void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev)
285{
286	struct cfg80211_iface_destroy *item;
287
288	ASSERT_RTNL();
289
290	spin_lock_irq(&rdev->destroy_list_lock);
291	while ((item = list_first_entry_or_null(&rdev->destroy_list,
292						struct cfg80211_iface_destroy,
293						list))) {
294		struct wireless_dev *wdev, *tmp;
295		u32 nlportid = item->nlportid;
296
297		list_del(&item->list);
298		kfree(item);
299		spin_unlock_irq(&rdev->destroy_list_lock);
300
301		list_for_each_entry_safe(wdev, tmp, &rdev->wdev_list, list) {
302			if (nlportid == wdev->owner_nlportid)
303				rdev_del_virtual_intf(rdev, wdev);
304		}
305
306		spin_lock_irq(&rdev->destroy_list_lock);
307	}
308	spin_unlock_irq(&rdev->destroy_list_lock);
309}
310
311static void cfg80211_destroy_iface_wk(struct work_struct *work)
312{
313	struct cfg80211_registered_device *rdev;
314
315	rdev = container_of(work, struct cfg80211_registered_device,
316			    destroy_work);
317
318	rtnl_lock();
319	cfg80211_destroy_ifaces(rdev);
320	rtnl_unlock();
321}
322
323static void cfg80211_sched_scan_stop_wk(struct work_struct *work)
324{
325	struct cfg80211_registered_device *rdev;
326
327	rdev = container_of(work, struct cfg80211_registered_device,
328			   sched_scan_stop_wk);
329
330	rtnl_lock();
331
332	__cfg80211_stop_sched_scan(rdev, false);
333
334	rtnl_unlock();
335}
336
337/* exported functions */
338
339struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
340			   const char *requested_name)
341{
342	static atomic_t wiphy_counter = ATOMIC_INIT(0);
343
344	struct cfg80211_registered_device *rdev;
345	int alloc_size;
346
347	WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key));
348	WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc));
349	WARN_ON(ops->connect && !ops->disconnect);
350	WARN_ON(ops->join_ibss && !ops->leave_ibss);
351	WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf);
352	WARN_ON(ops->add_station && !ops->del_station);
353	WARN_ON(ops->add_mpath && !ops->del_mpath);
354	WARN_ON(ops->join_mesh && !ops->leave_mesh);
355
356	alloc_size = sizeof(*rdev) + sizeof_priv;
357
358	rdev = kzalloc(alloc_size, GFP_KERNEL);
359	if (!rdev)
360		return NULL;
361
362	rdev->ops = ops;
363
364	rdev->wiphy_idx = atomic_inc_return(&wiphy_counter);
365
366	if (unlikely(rdev->wiphy_idx < 0)) {
367		/* ugh, wrapped! */
368		atomic_dec(&wiphy_counter);
369		kfree(rdev);
370		return NULL;
371	}
372
373	/* atomic_inc_return makes it start at 1, make it start at 0 */
374	rdev->wiphy_idx--;
375
376	/* give it a proper name */
377	if (requested_name && requested_name[0]) {
378		int rv;
379
380		rtnl_lock();
381		rv = cfg80211_dev_check_name(rdev, requested_name);
382
383		if (rv < 0) {
384			rtnl_unlock();
385			goto use_default_name;
386		}
387
388		rv = dev_set_name(&rdev->wiphy.dev, "%s", requested_name);
389		rtnl_unlock();
390		if (rv)
391			goto use_default_name;
392	} else {
393use_default_name:
394		/* NOTE:  This is *probably* safe w/out holding rtnl because of
395		 * the restrictions on phy names.  Probably this call could
396		 * fail if some other part of the kernel (re)named a device
397		 * phyX.  But, might should add some locking and check return
398		 * value, and use a different name if this one exists?
399		 */
400		dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
401	}
402
403	INIT_LIST_HEAD(&rdev->wdev_list);
404	INIT_LIST_HEAD(&rdev->beacon_registrations);
405	spin_lock_init(&rdev->beacon_registrations_lock);
406	spin_lock_init(&rdev->bss_lock);
407	INIT_LIST_HEAD(&rdev->bss_list);
408	INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done);
409	INIT_WORK(&rdev->sched_scan_results_wk, __cfg80211_sched_scan_results);
410	INIT_LIST_HEAD(&rdev->mlme_unreg);
411	spin_lock_init(&rdev->mlme_unreg_lock);
412	INIT_WORK(&rdev->mlme_unreg_wk, cfg80211_mlme_unreg_wk);
413	INIT_DELAYED_WORK(&rdev->dfs_update_channels_wk,
414			  cfg80211_dfs_channels_update_work);
415#ifdef CONFIG_CFG80211_WEXT
416	rdev->wiphy.wext = &cfg80211_wext_handler;
417#endif
418
419	device_initialize(&rdev->wiphy.dev);
420	rdev->wiphy.dev.class = &ieee80211_class;
421	rdev->wiphy.dev.platform_data = rdev;
422	device_enable_async_suspend(&rdev->wiphy.dev);
423
424	INIT_LIST_HEAD(&rdev->destroy_list);
425	spin_lock_init(&rdev->destroy_list_lock);
426	INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk);
427	INIT_WORK(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk);
428
429#ifdef CONFIG_CFG80211_DEFAULT_PS
430	rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
431#endif
432
433	wiphy_net_set(&rdev->wiphy, &init_net);
434
435	rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
436	rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
437				   &rdev->wiphy.dev, RFKILL_TYPE_WLAN,
438				   &rdev->rfkill_ops, rdev);
439
440	if (!rdev->rfkill) {
441		kfree(rdev);
442		return NULL;
443	}
444
445	INIT_WORK(&rdev->rfkill_sync, cfg80211_rfkill_sync_work);
446	INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
447	INIT_WORK(&rdev->event_work, cfg80211_event_work);
448
449	init_waitqueue_head(&rdev->dev_wait);
450
451	/*
452	 * Initialize wiphy parameters to IEEE 802.11 MIB default values.
453	 * Fragmentation and RTS threshold are disabled by default with the
454	 * special -1 value.
455	 */
456	rdev->wiphy.retry_short = 7;
457	rdev->wiphy.retry_long = 4;
458	rdev->wiphy.frag_threshold = (u32) -1;
459	rdev->wiphy.rts_threshold = (u32) -1;
460	rdev->wiphy.coverage_class = 0;
461
462	rdev->wiphy.max_num_csa_counters = 1;
463
464	rdev->wiphy.max_sched_scan_plans = 1;
465	rdev->wiphy.max_sched_scan_plan_interval = U32_MAX;
466
467	return &rdev->wiphy;
468}
469EXPORT_SYMBOL(wiphy_new_nm);
470
471static int wiphy_verify_combinations(struct wiphy *wiphy)
472{
473	const struct ieee80211_iface_combination *c;
474	int i, j;
475
476	for (i = 0; i < wiphy->n_iface_combinations; i++) {
477		u32 cnt = 0;
478		u16 all_iftypes = 0;
479
480		c = &wiphy->iface_combinations[i];
481
482		/*
483		 * Combinations with just one interface aren't real,
484		 * however we make an exception for DFS.
485		 */
486		if (WARN_ON((c->max_interfaces < 2) && !c->radar_detect_widths))
487			return -EINVAL;
488
489		/* Need at least one channel */
490		if (WARN_ON(!c->num_different_channels))
491			return -EINVAL;
492
493		/*
494		 * Put a sane limit on maximum number of different
495		 * channels to simplify channel accounting code.
496		 */
497		if (WARN_ON(c->num_different_channels >
498				CFG80211_MAX_NUM_DIFFERENT_CHANNELS))
499			return -EINVAL;
500
501		/* DFS only works on one channel. */
502		if (WARN_ON(c->radar_detect_widths &&
503			    (c->num_different_channels > 1)))
504			return -EINVAL;
505
506		if (WARN_ON(!c->n_limits))
507			return -EINVAL;
508
509		for (j = 0; j < c->n_limits; j++) {
510			u16 types = c->limits[j].types;
511
512			/* interface types shouldn't overlap */
513			if (WARN_ON(types & all_iftypes))
514				return -EINVAL;
515			all_iftypes |= types;
516
517			if (WARN_ON(!c->limits[j].max))
518				return -EINVAL;
519
520			/* Shouldn't list software iftypes in combinations! */
521			if (WARN_ON(wiphy->software_iftypes & types))
522				return -EINVAL;
523
524			/* Only a single P2P_DEVICE can be allowed */
525			if (WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
526				    c->limits[j].max > 1))
527				return -EINVAL;
528
529			cnt += c->limits[j].max;
530			/*
531			 * Don't advertise an unsupported type
532			 * in a combination.
533			 */
534			if (WARN_ON((wiphy->interface_modes & types) != types))
535				return -EINVAL;
536		}
537
538		/* You can't even choose that many! */
539		if (WARN_ON(cnt < c->max_interfaces))
540			return -EINVAL;
541	}
542
543	return 0;
544}
545
546int wiphy_register(struct wiphy *wiphy)
547{
548	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
549	int res;
550	enum ieee80211_band band;
551	struct ieee80211_supported_band *sband;
552	bool have_band = false;
553	int i;
554	u16 ifmodes = wiphy->interface_modes;
555
556#ifdef CONFIG_PM
557	if (WARN_ON(wiphy->wowlan &&
558		    (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
559		    !(wiphy->wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
560		return -EINVAL;
561	if (WARN_ON(wiphy->wowlan &&
562		    !wiphy->wowlan->flags && !wiphy->wowlan->n_patterns &&
563		    !wiphy->wowlan->tcp))
564		return -EINVAL;
565#endif
566	if (WARN_ON((wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
567		    (!rdev->ops->tdls_channel_switch ||
568		     !rdev->ops->tdls_cancel_channel_switch)))
569		return -EINVAL;
570
571	/*
572	 * if a wiphy has unsupported modes for regulatory channel enforcement,
573	 * opt-out of enforcement checking
574	 */
575	if (wiphy->interface_modes & ~(BIT(NL80211_IFTYPE_STATION) |
576				       BIT(NL80211_IFTYPE_P2P_CLIENT) |
577				       BIT(NL80211_IFTYPE_AP) |
578				       BIT(NL80211_IFTYPE_P2P_GO) |
579				       BIT(NL80211_IFTYPE_ADHOC) |
580				       BIT(NL80211_IFTYPE_P2P_DEVICE) |
581				       BIT(NL80211_IFTYPE_AP_VLAN) |
582				       BIT(NL80211_IFTYPE_MONITOR)))
583		wiphy->regulatory_flags |= REGULATORY_IGNORE_STALE_KICKOFF;
584
585	if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) &&
586		    (wiphy->regulatory_flags &
587					(REGULATORY_CUSTOM_REG |
588					 REGULATORY_STRICT_REG |
589					 REGULATORY_COUNTRY_IE_FOLLOW_POWER |
590					 REGULATORY_COUNTRY_IE_IGNORE))))
591		return -EINVAL;
592
593	if (WARN_ON(wiphy->coalesce &&
594		    (!wiphy->coalesce->n_rules ||
595		     !wiphy->coalesce->n_patterns) &&
596		    (!wiphy->coalesce->pattern_min_len ||
597		     wiphy->coalesce->pattern_min_len >
598			wiphy->coalesce->pattern_max_len)))
599		return -EINVAL;
600
601	if (WARN_ON(wiphy->ap_sme_capa &&
602		    !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
603		return -EINVAL;
604
605	if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
606		return -EINVAL;
607
608	if (WARN_ON(wiphy->addresses &&
609		    !is_zero_ether_addr(wiphy->perm_addr) &&
610		    memcmp(wiphy->perm_addr, wiphy->addresses[0].addr,
611			   ETH_ALEN)))
612		return -EINVAL;
613
614	if (WARN_ON(wiphy->max_acl_mac_addrs &&
615		    (!(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME) ||
616		     !rdev->ops->set_mac_acl)))
617		return -EINVAL;
618
619	if (wiphy->addresses)
620		memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN);
621
622	/* sanity check ifmodes */
623	WARN_ON(!ifmodes);
624	ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1;
625	if (WARN_ON(ifmodes != wiphy->interface_modes))
626		wiphy->interface_modes = ifmodes;
627
628	res = wiphy_verify_combinations(wiphy);
629	if (res)
630		return res;
631
632	/* sanity check supported bands/channels */
633	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
634		sband = wiphy->bands[band];
635		if (!sband)
636			continue;
637
638		sband->band = band;
639		if (WARN_ON(!sband->n_channels))
640			return -EINVAL;
641		/*
642		 * on 60GHz band, there are no legacy rates, so
643		 * n_bitrates is 0
644		 */
645		if (WARN_ON(band != IEEE80211_BAND_60GHZ &&
646			    !sband->n_bitrates))
647			return -EINVAL;
648
649		/*
650		 * Since cfg80211_disable_40mhz_24ghz is global, we can
651		 * modify the sband's ht data even if the driver uses a
652		 * global structure for that.
653		 */
654		if (cfg80211_disable_40mhz_24ghz &&
655		    band == IEEE80211_BAND_2GHZ &&
656		    sband->ht_cap.ht_supported) {
657			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
658			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
659		}
660
661		/*
662		 * Since we use a u32 for rate bitmaps in
663		 * ieee80211_get_response_rate, we cannot
664		 * have more than 32 legacy rates.
665		 */
666		if (WARN_ON(sband->n_bitrates > 32))
667			return -EINVAL;
668
669		for (i = 0; i < sband->n_channels; i++) {
670			sband->channels[i].orig_flags =
671				sband->channels[i].flags;
672			sband->channels[i].orig_mag = INT_MAX;
673			sband->channels[i].orig_mpwr =
674				sband->channels[i].max_power;
675			sband->channels[i].band = band;
676		}
677
678		have_band = true;
679	}
680
681	if (!have_band) {
682		WARN_ON(1);
683		return -EINVAL;
684	}
685
686#ifdef CONFIG_PM
687	if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns &&
688		    (!rdev->wiphy.wowlan->pattern_min_len ||
689		     rdev->wiphy.wowlan->pattern_min_len >
690				rdev->wiphy.wowlan->pattern_max_len)))
691		return -EINVAL;
692#endif
693
694	/* check and set up bitrates */
695	ieee80211_set_bitrate_flags(wiphy);
696
697	rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH;
698
699	rtnl_lock();
700	res = device_add(&rdev->wiphy.dev);
701	if (res) {
702		rtnl_unlock();
703		return res;
704	}
705
706	/* set up regulatory info */
707	wiphy_regulatory_register(wiphy);
708
709	list_add_rcu(&rdev->list, &cfg80211_rdev_list);
710	cfg80211_rdev_list_generation++;
711
712	/* add to debugfs */
713	rdev->wiphy.debugfsdir =
714		debugfs_create_dir(wiphy_name(&rdev->wiphy),
715				   ieee80211_debugfs_dir);
716	if (IS_ERR(rdev->wiphy.debugfsdir))
717		rdev->wiphy.debugfsdir = NULL;
718
719	cfg80211_debugfs_rdev_add(rdev);
720	nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
721
722	if (wiphy->regulatory_flags & REGULATORY_CUSTOM_REG) {
723		struct regulatory_request request;
724
725		request.wiphy_idx = get_wiphy_idx(wiphy);
726		request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
727		request.alpha2[0] = '9';
728		request.alpha2[1] = '9';
729
730		nl80211_send_reg_change_event(&request);
731	}
732
733	rdev->wiphy.registered = true;
734	rtnl_unlock();
735
736	res = rfkill_register(rdev->rfkill);
737	if (res) {
738		rfkill_destroy(rdev->rfkill);
739		rdev->rfkill = NULL;
740		wiphy_unregister(&rdev->wiphy);
741		return res;
742	}
743
744	return 0;
745}
746EXPORT_SYMBOL(wiphy_register);
747
748void wiphy_rfkill_start_polling(struct wiphy *wiphy)
749{
750	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
751
752	if (!rdev->ops->rfkill_poll)
753		return;
754	rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
755	rfkill_resume_polling(rdev->rfkill);
756}
757EXPORT_SYMBOL(wiphy_rfkill_start_polling);
758
759void wiphy_rfkill_stop_polling(struct wiphy *wiphy)
760{
761	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
762
763	rfkill_pause_polling(rdev->rfkill);
764}
765EXPORT_SYMBOL(wiphy_rfkill_stop_polling);
766
767void wiphy_unregister(struct wiphy *wiphy)
768{
769	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
770
771	wait_event(rdev->dev_wait, ({
772		int __count;
773		rtnl_lock();
774		__count = rdev->opencount;
775		rtnl_unlock();
776		__count == 0; }));
777
778	if (rdev->rfkill)
779		rfkill_unregister(rdev->rfkill);
780
781	rtnl_lock();
782	nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
783	rdev->wiphy.registered = false;
784
785	WARN_ON(!list_empty(&rdev->wdev_list));
786
787	/*
788	 * First remove the hardware from everywhere, this makes
789	 * it impossible to find from userspace.
790	 */
791	debugfs_remove_recursive(rdev->wiphy.debugfsdir);
792	list_del_rcu(&rdev->list);
793	synchronize_rcu();
794
795	/*
796	 * If this device got a regulatory hint tell core its
797	 * free to listen now to a new shiny device regulatory hint
798	 */
799	wiphy_regulatory_deregister(wiphy);
800
801	cfg80211_rdev_list_generation++;
802	device_del(&rdev->wiphy.dev);
803
804	rtnl_unlock();
805
806	flush_work(&rdev->scan_done_wk);
807	cancel_work_sync(&rdev->conn_work);
808	flush_work(&rdev->event_work);
809	cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
810	flush_work(&rdev->destroy_work);
811	flush_work(&rdev->sched_scan_stop_wk);
812	flush_work(&rdev->mlme_unreg_wk);
813
814#ifdef CONFIG_PM
815	if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup)
816		rdev_set_wakeup(rdev, false);
817#endif
818	cfg80211_rdev_free_wowlan(rdev);
819	cfg80211_rdev_free_coalesce(rdev);
820}
821EXPORT_SYMBOL(wiphy_unregister);
822
823void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
824{
825	struct cfg80211_internal_bss *scan, *tmp;
826	struct cfg80211_beacon_registration *reg, *treg;
827	rfkill_destroy(rdev->rfkill);
828	list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
829		list_del(&reg->list);
830		kfree(reg);
831	}
832	list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
833		cfg80211_put_bss(&rdev->wiphy, &scan->pub);
834	kfree(rdev);
835}
836
837void wiphy_free(struct wiphy *wiphy)
838{
839	put_device(&wiphy->dev);
840}
841EXPORT_SYMBOL(wiphy_free);
842
843void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
844{
845	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
846
847	if (rfkill_set_hw_state(rdev->rfkill, blocked))
848		schedule_work(&rdev->rfkill_sync);
849}
850EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
851
852void cfg80211_unregister_wdev(struct wireless_dev *wdev)
853{
854	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
855
856	ASSERT_RTNL();
857
858	if (WARN_ON(wdev->netdev))
859		return;
860
861	list_del_rcu(&wdev->list);
862	rdev->devlist_generation++;
863
864	switch (wdev->iftype) {
865	case NL80211_IFTYPE_P2P_DEVICE:
866		cfg80211_mlme_purge_registrations(wdev);
867		cfg80211_stop_p2p_device(rdev, wdev);
868		break;
869	default:
870		WARN_ON_ONCE(1);
871		break;
872	}
873}
874EXPORT_SYMBOL(cfg80211_unregister_wdev);
875
876static const struct device_type wiphy_type = {
877	.name	= "wlan",
878};
879
880void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
881			       enum nl80211_iftype iftype, int num)
882{
883	ASSERT_RTNL();
884
885	rdev->num_running_ifaces += num;
886	if (iftype == NL80211_IFTYPE_MONITOR)
887		rdev->num_running_monitor_ifaces += num;
888}
889
890void __cfg80211_leave(struct cfg80211_registered_device *rdev,
891		      struct wireless_dev *wdev)
892{
893	struct net_device *dev = wdev->netdev;
894	struct cfg80211_sched_scan_request *sched_scan_req;
895
896	ASSERT_RTNL();
897	ASSERT_WDEV_LOCK(wdev);
898
899	switch (wdev->iftype) {
900	case NL80211_IFTYPE_ADHOC:
901		__cfg80211_leave_ibss(rdev, dev, true);
902		break;
903	case NL80211_IFTYPE_P2P_CLIENT:
904	case NL80211_IFTYPE_STATION:
905		sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
906		if (sched_scan_req && dev == sched_scan_req->dev)
907			__cfg80211_stop_sched_scan(rdev, false);
908
909#ifdef CONFIG_CFG80211_WEXT
910		kfree(wdev->wext.ie);
911		wdev->wext.ie = NULL;
912		wdev->wext.ie_len = 0;
913		wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
914#endif
915		cfg80211_disconnect(rdev, dev,
916				    WLAN_REASON_DEAUTH_LEAVING, true);
917		break;
918	case NL80211_IFTYPE_MESH_POINT:
919		__cfg80211_leave_mesh(rdev, dev);
920		break;
921	case NL80211_IFTYPE_AP:
922	case NL80211_IFTYPE_P2P_GO:
923		__cfg80211_stop_ap(rdev, dev, true);
924		break;
925	case NL80211_IFTYPE_OCB:
926		__cfg80211_leave_ocb(rdev, dev);
927		break;
928	case NL80211_IFTYPE_WDS:
929		/* must be handled by mac80211/driver, has no APIs */
930		break;
931	case NL80211_IFTYPE_P2P_DEVICE:
932		/* cannot happen, has no netdev */
933		break;
934	case NL80211_IFTYPE_AP_VLAN:
935	case NL80211_IFTYPE_MONITOR:
936		/* nothing to do */
937		break;
938	case NL80211_IFTYPE_UNSPECIFIED:
939	case NUM_NL80211_IFTYPES:
940		/* invalid */
941		break;
942	}
943}
944
945void cfg80211_leave(struct cfg80211_registered_device *rdev,
946		    struct wireless_dev *wdev)
947{
948	wdev_lock(wdev);
949	__cfg80211_leave(rdev, wdev);
950	wdev_unlock(wdev);
951}
952
953void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
954			 gfp_t gfp)
955{
956	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
957	struct cfg80211_event *ev;
958	unsigned long flags;
959
960	trace_cfg80211_stop_iface(wiphy, wdev);
961
962	ev = kzalloc(sizeof(*ev), gfp);
963	if (!ev)
964		return;
965
966	ev->type = EVENT_STOPPED;
967
968	spin_lock_irqsave(&wdev->event_lock, flags);
969	list_add_tail(&ev->list, &wdev->event_list);
970	spin_unlock_irqrestore(&wdev->event_lock, flags);
971	queue_work(cfg80211_wq, &rdev->event_work);
972}
973EXPORT_SYMBOL(cfg80211_stop_iface);
974
975static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
976					 unsigned long state, void *ptr)
977{
978	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
979	struct wireless_dev *wdev = dev->ieee80211_ptr;
980	struct cfg80211_registered_device *rdev;
981	struct cfg80211_sched_scan_request *sched_scan_req;
982
983	if (!wdev)
984		return NOTIFY_DONE;
985
986	rdev = wiphy_to_rdev(wdev->wiphy);
987
988	WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
989
990	switch (state) {
991	case NETDEV_POST_INIT:
992		SET_NETDEV_DEVTYPE(dev, &wiphy_type);
993		break;
994	case NETDEV_REGISTER:
995		/*
996		 * NB: cannot take rdev->mtx here because this may be
997		 * called within code protected by it when interfaces
998		 * are added with nl80211.
999		 */
1000		mutex_init(&wdev->mtx);
1001		INIT_LIST_HEAD(&wdev->event_list);
1002		spin_lock_init(&wdev->event_lock);
1003		INIT_LIST_HEAD(&wdev->mgmt_registrations);
1004		spin_lock_init(&wdev->mgmt_registrations_lock);
1005
1006		wdev->identifier = ++rdev->wdev_id;
1007		list_add_rcu(&wdev->list, &rdev->wdev_list);
1008		rdev->devlist_generation++;
1009		/* can only change netns with wiphy */
1010		dev->features |= NETIF_F_NETNS_LOCAL;
1011
1012		if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj,
1013				      "phy80211")) {
1014			pr_err("failed to add phy80211 symlink to netdev!\n");
1015		}
1016		wdev->netdev = dev;
1017#ifdef CONFIG_CFG80211_WEXT
1018		wdev->wext.default_key = -1;
1019		wdev->wext.default_mgmt_key = -1;
1020		wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1021#endif
1022
1023		if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT)
1024			wdev->ps = true;
1025		else
1026			wdev->ps = false;
1027		/* allow mac80211 to determine the timeout */
1028		wdev->ps_timeout = -1;
1029
1030		if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1031		     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
1032		     wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)
1033			dev->priv_flags |= IFF_DONT_BRIDGE;
1034		break;
1035	case NETDEV_GOING_DOWN:
1036		cfg80211_leave(rdev, wdev);
1037		break;
1038	case NETDEV_DOWN:
1039		cfg80211_update_iface_num(rdev, wdev->iftype, -1);
1040		if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
1041			if (WARN_ON(!rdev->scan_req->notified))
1042				rdev->scan_req->aborted = true;
1043			___cfg80211_scan_done(rdev, false);
1044		}
1045
1046		sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
1047		if (WARN_ON(sched_scan_req &&
1048			    sched_scan_req->dev == wdev->netdev)) {
1049			__cfg80211_stop_sched_scan(rdev, false);
1050		}
1051
1052		rdev->opencount--;
1053		wake_up(&rdev->dev_wait);
1054		break;
1055	case NETDEV_UP:
1056		cfg80211_update_iface_num(rdev, wdev->iftype, 1);
1057		wdev_lock(wdev);
1058		switch (wdev->iftype) {
1059#ifdef CONFIG_CFG80211_WEXT
1060		case NL80211_IFTYPE_ADHOC:
1061			cfg80211_ibss_wext_join(rdev, wdev);
1062			break;
1063		case NL80211_IFTYPE_STATION:
1064			cfg80211_mgd_wext_connect(rdev, wdev);
1065			break;
1066#endif
1067#ifdef CONFIG_MAC80211_MESH
1068		case NL80211_IFTYPE_MESH_POINT:
1069			{
1070				/* backward compat code... */
1071				struct mesh_setup setup;
1072				memcpy(&setup, &default_mesh_setup,
1073						sizeof(setup));
1074				 /* back compat only needed for mesh_id */
1075				setup.mesh_id = wdev->ssid;
1076				setup.mesh_id_len = wdev->mesh_id_up_len;
1077				if (wdev->mesh_id_up_len)
1078					__cfg80211_join_mesh(rdev, dev,
1079							&setup,
1080							&default_mesh_config);
1081				break;
1082			}
1083#endif
1084		default:
1085			break;
1086		}
1087		wdev_unlock(wdev);
1088		rdev->opencount++;
1089
1090		/*
1091		 * Configure power management to the driver here so that its
1092		 * correctly set also after interface type changes etc.
1093		 */
1094		if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1095		     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
1096		    rdev->ops->set_power_mgmt)
1097			if (rdev_set_power_mgmt(rdev, dev, wdev->ps,
1098						wdev->ps_timeout)) {
1099				/* assume this means it's off */
1100				wdev->ps = false;
1101			}
1102		break;
1103	case NETDEV_UNREGISTER:
1104		/*
1105		 * It is possible to get NETDEV_UNREGISTER
1106		 * multiple times. To detect that, check
1107		 * that the interface is still on the list
1108		 * of registered interfaces, and only then
1109		 * remove and clean it up.
1110		 */
1111		if (!list_empty(&wdev->list)) {
1112			sysfs_remove_link(&dev->dev.kobj, "phy80211");
1113			list_del_rcu(&wdev->list);
1114			rdev->devlist_generation++;
1115			cfg80211_mlme_purge_registrations(wdev);
1116#ifdef CONFIG_CFG80211_WEXT
1117			kzfree(wdev->wext.keys);
1118#endif
1119		}
1120		/*
1121		 * synchronise (so that we won't find this netdev
1122		 * from other code any more) and then clear the list
1123		 * head so that the above code can safely check for
1124		 * !list_empty() to avoid double-cleanup.
1125		 */
1126		synchronize_rcu();
1127		INIT_LIST_HEAD(&wdev->list);
1128		/*
1129		 * Ensure that all events have been processed and
1130		 * freed.
1131		 */
1132		cfg80211_process_wdev_events(wdev);
1133
1134		if (WARN_ON(wdev->current_bss)) {
1135			cfg80211_unhold_bss(wdev->current_bss);
1136			cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
1137			wdev->current_bss = NULL;
1138		}
1139		break;
1140	case NETDEV_PRE_UP:
1141		if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
1142			return notifier_from_errno(-EOPNOTSUPP);
1143		if (rfkill_blocked(rdev->rfkill))
1144			return notifier_from_errno(-ERFKILL);
1145		break;
1146	default:
1147		return NOTIFY_DONE;
1148	}
1149
1150	wireless_nlevent_flush();
1151
1152	return NOTIFY_OK;
1153}
1154
1155static struct notifier_block cfg80211_netdev_notifier = {
1156	.notifier_call = cfg80211_netdev_notifier_call,
1157};
1158
1159static void __net_exit cfg80211_pernet_exit(struct net *net)
1160{
1161	struct cfg80211_registered_device *rdev;
1162
1163	rtnl_lock();
1164	list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
1165		if (net_eq(wiphy_net(&rdev->wiphy), net))
1166			WARN_ON(cfg80211_switch_netns(rdev, &init_net));
1167	}
1168	rtnl_unlock();
1169}
1170
1171static struct pernet_operations cfg80211_pernet_ops = {
1172	.exit = cfg80211_pernet_exit,
1173};
1174
1175static int __init cfg80211_init(void)
1176{
1177	int err;
1178
1179	err = register_pernet_device(&cfg80211_pernet_ops);
1180	if (err)
1181		goto out_fail_pernet;
1182
1183	err = wiphy_sysfs_init();
1184	if (err)
1185		goto out_fail_sysfs;
1186
1187	err = register_netdevice_notifier(&cfg80211_netdev_notifier);
1188	if (err)
1189		goto out_fail_notifier;
1190
1191	err = nl80211_init();
1192	if (err)
1193		goto out_fail_nl80211;
1194
1195	ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
1196
1197	err = regulatory_init();
1198	if (err)
1199		goto out_fail_reg;
1200
1201	cfg80211_wq = create_singlethread_workqueue("cfg80211");
1202	if (!cfg80211_wq) {
1203		err = -ENOMEM;
1204		goto out_fail_wq;
1205	}
1206
1207	return 0;
1208
1209out_fail_wq:
1210	regulatory_exit();
1211out_fail_reg:
1212	debugfs_remove(ieee80211_debugfs_dir);
1213	nl80211_exit();
1214out_fail_nl80211:
1215	unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1216out_fail_notifier:
1217	wiphy_sysfs_exit();
1218out_fail_sysfs:
1219	unregister_pernet_device(&cfg80211_pernet_ops);
1220out_fail_pernet:
1221	return err;
1222}
1223subsys_initcall(cfg80211_init);
1224
1225static void __exit cfg80211_exit(void)
1226{
1227	debugfs_remove(ieee80211_debugfs_dir);
1228	nl80211_exit();
1229	unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1230	wiphy_sysfs_exit();
1231	regulatory_exit();
1232	unregister_pernet_device(&cfg80211_pernet_ops);
1233	destroy_workqueue(cfg80211_wq);
1234}
1235module_exit(cfg80211_exit);
1236