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_DELAYED_WORK(&rdev->dfs_update_channels_wk,
411			  cfg80211_dfs_channels_update_work);
412#ifdef CONFIG_CFG80211_WEXT
413	rdev->wiphy.wext = &cfg80211_wext_handler;
414#endif
415
416	device_initialize(&rdev->wiphy.dev);
417	rdev->wiphy.dev.class = &ieee80211_class;
418	rdev->wiphy.dev.platform_data = rdev;
419
420	INIT_LIST_HEAD(&rdev->destroy_list);
421	spin_lock_init(&rdev->destroy_list_lock);
422	INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk);
423	INIT_WORK(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk);
424
425#ifdef CONFIG_CFG80211_DEFAULT_PS
426	rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
427#endif
428
429	wiphy_net_set(&rdev->wiphy, &init_net);
430
431	rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
432	rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
433				   &rdev->wiphy.dev, RFKILL_TYPE_WLAN,
434				   &rdev->rfkill_ops, rdev);
435
436	if (!rdev->rfkill) {
437		kfree(rdev);
438		return NULL;
439	}
440
441	INIT_WORK(&rdev->rfkill_sync, cfg80211_rfkill_sync_work);
442	INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
443	INIT_WORK(&rdev->event_work, cfg80211_event_work);
444
445	init_waitqueue_head(&rdev->dev_wait);
446
447	/*
448	 * Initialize wiphy parameters to IEEE 802.11 MIB default values.
449	 * Fragmentation and RTS threshold are disabled by default with the
450	 * special -1 value.
451	 */
452	rdev->wiphy.retry_short = 7;
453	rdev->wiphy.retry_long = 4;
454	rdev->wiphy.frag_threshold = (u32) -1;
455	rdev->wiphy.rts_threshold = (u32) -1;
456	rdev->wiphy.coverage_class = 0;
457
458	rdev->wiphy.max_num_csa_counters = 1;
459
460	return &rdev->wiphy;
461}
462EXPORT_SYMBOL(wiphy_new_nm);
463
464static int wiphy_verify_combinations(struct wiphy *wiphy)
465{
466	const struct ieee80211_iface_combination *c;
467	int i, j;
468
469	for (i = 0; i < wiphy->n_iface_combinations; i++) {
470		u32 cnt = 0;
471		u16 all_iftypes = 0;
472
473		c = &wiphy->iface_combinations[i];
474
475		/*
476		 * Combinations with just one interface aren't real,
477		 * however we make an exception for DFS.
478		 */
479		if (WARN_ON((c->max_interfaces < 2) && !c->radar_detect_widths))
480			return -EINVAL;
481
482		/* Need at least one channel */
483		if (WARN_ON(!c->num_different_channels))
484			return -EINVAL;
485
486		/*
487		 * Put a sane limit on maximum number of different
488		 * channels to simplify channel accounting code.
489		 */
490		if (WARN_ON(c->num_different_channels >
491				CFG80211_MAX_NUM_DIFFERENT_CHANNELS))
492			return -EINVAL;
493
494		/* DFS only works on one channel. */
495		if (WARN_ON(c->radar_detect_widths &&
496			    (c->num_different_channels > 1)))
497			return -EINVAL;
498
499		if (WARN_ON(!c->n_limits))
500			return -EINVAL;
501
502		for (j = 0; j < c->n_limits; j++) {
503			u16 types = c->limits[j].types;
504
505			/* interface types shouldn't overlap */
506			if (WARN_ON(types & all_iftypes))
507				return -EINVAL;
508			all_iftypes |= types;
509
510			if (WARN_ON(!c->limits[j].max))
511				return -EINVAL;
512
513			/* Shouldn't list software iftypes in combinations! */
514			if (WARN_ON(wiphy->software_iftypes & types))
515				return -EINVAL;
516
517			/* Only a single P2P_DEVICE can be allowed */
518			if (WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
519				    c->limits[j].max > 1))
520				return -EINVAL;
521
522			cnt += c->limits[j].max;
523			/*
524			 * Don't advertise an unsupported type
525			 * in a combination.
526			 */
527			if (WARN_ON((wiphy->interface_modes & types) != types))
528				return -EINVAL;
529		}
530
531		/* You can't even choose that many! */
532		if (WARN_ON(cnt < c->max_interfaces))
533			return -EINVAL;
534	}
535
536	return 0;
537}
538
539int wiphy_register(struct wiphy *wiphy)
540{
541	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
542	int res;
543	enum ieee80211_band band;
544	struct ieee80211_supported_band *sband;
545	bool have_band = false;
546	int i;
547	u16 ifmodes = wiphy->interface_modes;
548
549#ifdef CONFIG_PM
550	if (WARN_ON(wiphy->wowlan &&
551		    (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
552		    !(wiphy->wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
553		return -EINVAL;
554	if (WARN_ON(wiphy->wowlan &&
555		    !wiphy->wowlan->flags && !wiphy->wowlan->n_patterns &&
556		    !wiphy->wowlan->tcp))
557		return -EINVAL;
558#endif
559	if (WARN_ON((wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
560		    (!rdev->ops->tdls_channel_switch ||
561		     !rdev->ops->tdls_cancel_channel_switch)))
562		return -EINVAL;
563
564	/*
565	 * if a wiphy has unsupported modes for regulatory channel enforcement,
566	 * opt-out of enforcement checking
567	 */
568	if (wiphy->interface_modes & ~(BIT(NL80211_IFTYPE_STATION) |
569				       BIT(NL80211_IFTYPE_P2P_CLIENT) |
570				       BIT(NL80211_IFTYPE_AP) |
571				       BIT(NL80211_IFTYPE_P2P_GO) |
572				       BIT(NL80211_IFTYPE_ADHOC) |
573				       BIT(NL80211_IFTYPE_P2P_DEVICE) |
574				       BIT(NL80211_IFTYPE_AP_VLAN) |
575				       BIT(NL80211_IFTYPE_MONITOR)))
576		wiphy->regulatory_flags |= REGULATORY_IGNORE_STALE_KICKOFF;
577
578	if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) &&
579		    (wiphy->regulatory_flags &
580					(REGULATORY_CUSTOM_REG |
581					 REGULATORY_STRICT_REG |
582					 REGULATORY_COUNTRY_IE_FOLLOW_POWER |
583					 REGULATORY_COUNTRY_IE_IGNORE))))
584		return -EINVAL;
585
586	if (WARN_ON(wiphy->coalesce &&
587		    (!wiphy->coalesce->n_rules ||
588		     !wiphy->coalesce->n_patterns) &&
589		    (!wiphy->coalesce->pattern_min_len ||
590		     wiphy->coalesce->pattern_min_len >
591			wiphy->coalesce->pattern_max_len)))
592		return -EINVAL;
593
594	if (WARN_ON(wiphy->ap_sme_capa &&
595		    !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
596		return -EINVAL;
597
598	if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
599		return -EINVAL;
600
601	if (WARN_ON(wiphy->addresses &&
602		    !is_zero_ether_addr(wiphy->perm_addr) &&
603		    memcmp(wiphy->perm_addr, wiphy->addresses[0].addr,
604			   ETH_ALEN)))
605		return -EINVAL;
606
607	if (WARN_ON(wiphy->max_acl_mac_addrs &&
608		    (!(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME) ||
609		     !rdev->ops->set_mac_acl)))
610		return -EINVAL;
611
612	if (wiphy->addresses)
613		memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN);
614
615	/* sanity check ifmodes */
616	WARN_ON(!ifmodes);
617	ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1;
618	if (WARN_ON(ifmodes != wiphy->interface_modes))
619		wiphy->interface_modes = ifmodes;
620
621	res = wiphy_verify_combinations(wiphy);
622	if (res)
623		return res;
624
625	/* sanity check supported bands/channels */
626	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
627		sband = wiphy->bands[band];
628		if (!sband)
629			continue;
630
631		sband->band = band;
632		if (WARN_ON(!sband->n_channels))
633			return -EINVAL;
634		/*
635		 * on 60gHz band, there are no legacy rates, so
636		 * n_bitrates is 0
637		 */
638		if (WARN_ON(band != IEEE80211_BAND_60GHZ &&
639			    !sband->n_bitrates))
640			return -EINVAL;
641
642		/*
643		 * Since cfg80211_disable_40mhz_24ghz is global, we can
644		 * modify the sband's ht data even if the driver uses a
645		 * global structure for that.
646		 */
647		if (cfg80211_disable_40mhz_24ghz &&
648		    band == IEEE80211_BAND_2GHZ &&
649		    sband->ht_cap.ht_supported) {
650			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
651			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
652		}
653
654		/*
655		 * Since we use a u32 for rate bitmaps in
656		 * ieee80211_get_response_rate, we cannot
657		 * have more than 32 legacy rates.
658		 */
659		if (WARN_ON(sband->n_bitrates > 32))
660			return -EINVAL;
661
662		for (i = 0; i < sband->n_channels; i++) {
663			sband->channels[i].orig_flags =
664				sband->channels[i].flags;
665			sband->channels[i].orig_mag = INT_MAX;
666			sband->channels[i].orig_mpwr =
667				sband->channels[i].max_power;
668			sband->channels[i].band = band;
669		}
670
671		have_band = true;
672	}
673
674	if (!have_band) {
675		WARN_ON(1);
676		return -EINVAL;
677	}
678
679#ifdef CONFIG_PM
680	if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns &&
681		    (!rdev->wiphy.wowlan->pattern_min_len ||
682		     rdev->wiphy.wowlan->pattern_min_len >
683				rdev->wiphy.wowlan->pattern_max_len)))
684		return -EINVAL;
685#endif
686
687	/* check and set up bitrates */
688	ieee80211_set_bitrate_flags(wiphy);
689
690	rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH;
691
692	rtnl_lock();
693	res = device_add(&rdev->wiphy.dev);
694	if (res) {
695		rtnl_unlock();
696		return res;
697	}
698
699	/* set up regulatory info */
700	wiphy_regulatory_register(wiphy);
701
702	list_add_rcu(&rdev->list, &cfg80211_rdev_list);
703	cfg80211_rdev_list_generation++;
704
705	/* add to debugfs */
706	rdev->wiphy.debugfsdir =
707		debugfs_create_dir(wiphy_name(&rdev->wiphy),
708				   ieee80211_debugfs_dir);
709	if (IS_ERR(rdev->wiphy.debugfsdir))
710		rdev->wiphy.debugfsdir = NULL;
711
712	cfg80211_debugfs_rdev_add(rdev);
713	nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
714
715	if (wiphy->regulatory_flags & REGULATORY_CUSTOM_REG) {
716		struct regulatory_request request;
717
718		request.wiphy_idx = get_wiphy_idx(wiphy);
719		request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
720		request.alpha2[0] = '9';
721		request.alpha2[1] = '9';
722
723		nl80211_send_reg_change_event(&request);
724	}
725
726	rdev->wiphy.registered = true;
727	rtnl_unlock();
728
729	res = rfkill_register(rdev->rfkill);
730	if (res) {
731		rfkill_destroy(rdev->rfkill);
732		rdev->rfkill = NULL;
733		wiphy_unregister(&rdev->wiphy);
734		return res;
735	}
736
737	return 0;
738}
739EXPORT_SYMBOL(wiphy_register);
740
741void wiphy_rfkill_start_polling(struct wiphy *wiphy)
742{
743	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
744
745	if (!rdev->ops->rfkill_poll)
746		return;
747	rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
748	rfkill_resume_polling(rdev->rfkill);
749}
750EXPORT_SYMBOL(wiphy_rfkill_start_polling);
751
752void wiphy_rfkill_stop_polling(struct wiphy *wiphy)
753{
754	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
755
756	rfkill_pause_polling(rdev->rfkill);
757}
758EXPORT_SYMBOL(wiphy_rfkill_stop_polling);
759
760void wiphy_unregister(struct wiphy *wiphy)
761{
762	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
763
764	wait_event(rdev->dev_wait, ({
765		int __count;
766		rtnl_lock();
767		__count = rdev->opencount;
768		rtnl_unlock();
769		__count == 0; }));
770
771	if (rdev->rfkill)
772		rfkill_unregister(rdev->rfkill);
773
774	rtnl_lock();
775	nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
776	rdev->wiphy.registered = false;
777
778	WARN_ON(!list_empty(&rdev->wdev_list));
779
780	/*
781	 * First remove the hardware from everywhere, this makes
782	 * it impossible to find from userspace.
783	 */
784	debugfs_remove_recursive(rdev->wiphy.debugfsdir);
785	list_del_rcu(&rdev->list);
786	synchronize_rcu();
787
788	/*
789	 * If this device got a regulatory hint tell core its
790	 * free to listen now to a new shiny device regulatory hint
791	 */
792	wiphy_regulatory_deregister(wiphy);
793
794	cfg80211_rdev_list_generation++;
795	device_del(&rdev->wiphy.dev);
796
797	rtnl_unlock();
798
799	flush_work(&rdev->scan_done_wk);
800	cancel_work_sync(&rdev->conn_work);
801	flush_work(&rdev->event_work);
802	cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
803	flush_work(&rdev->destroy_work);
804	flush_work(&rdev->sched_scan_stop_wk);
805
806#ifdef CONFIG_PM
807	if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup)
808		rdev_set_wakeup(rdev, false);
809#endif
810	cfg80211_rdev_free_wowlan(rdev);
811	cfg80211_rdev_free_coalesce(rdev);
812}
813EXPORT_SYMBOL(wiphy_unregister);
814
815void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
816{
817	struct cfg80211_internal_bss *scan, *tmp;
818	struct cfg80211_beacon_registration *reg, *treg;
819	rfkill_destroy(rdev->rfkill);
820	list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
821		list_del(&reg->list);
822		kfree(reg);
823	}
824	list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
825		cfg80211_put_bss(&rdev->wiphy, &scan->pub);
826	kfree(rdev);
827}
828
829void wiphy_free(struct wiphy *wiphy)
830{
831	put_device(&wiphy->dev);
832}
833EXPORT_SYMBOL(wiphy_free);
834
835void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
836{
837	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
838
839	if (rfkill_set_hw_state(rdev->rfkill, blocked))
840		schedule_work(&rdev->rfkill_sync);
841}
842EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
843
844void cfg80211_unregister_wdev(struct wireless_dev *wdev)
845{
846	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
847
848	ASSERT_RTNL();
849
850	if (WARN_ON(wdev->netdev))
851		return;
852
853	list_del_rcu(&wdev->list);
854	rdev->devlist_generation++;
855
856	switch (wdev->iftype) {
857	case NL80211_IFTYPE_P2P_DEVICE:
858		cfg80211_stop_p2p_device(rdev, wdev);
859		break;
860	default:
861		WARN_ON_ONCE(1);
862		break;
863	}
864}
865EXPORT_SYMBOL(cfg80211_unregister_wdev);
866
867static const struct device_type wiphy_type = {
868	.name	= "wlan",
869};
870
871void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
872			       enum nl80211_iftype iftype, int num)
873{
874	ASSERT_RTNL();
875
876	rdev->num_running_ifaces += num;
877	if (iftype == NL80211_IFTYPE_MONITOR)
878		rdev->num_running_monitor_ifaces += num;
879}
880
881void __cfg80211_leave(struct cfg80211_registered_device *rdev,
882		      struct wireless_dev *wdev)
883{
884	struct net_device *dev = wdev->netdev;
885	struct cfg80211_sched_scan_request *sched_scan_req;
886
887	ASSERT_RTNL();
888	ASSERT_WDEV_LOCK(wdev);
889
890	switch (wdev->iftype) {
891	case NL80211_IFTYPE_ADHOC:
892		__cfg80211_leave_ibss(rdev, dev, true);
893		break;
894	case NL80211_IFTYPE_P2P_CLIENT:
895	case NL80211_IFTYPE_STATION:
896		sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
897		if (sched_scan_req && dev == sched_scan_req->dev)
898			__cfg80211_stop_sched_scan(rdev, false);
899
900#ifdef CONFIG_CFG80211_WEXT
901		kfree(wdev->wext.ie);
902		wdev->wext.ie = NULL;
903		wdev->wext.ie_len = 0;
904		wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
905#endif
906		cfg80211_disconnect(rdev, dev,
907				    WLAN_REASON_DEAUTH_LEAVING, true);
908		break;
909	case NL80211_IFTYPE_MESH_POINT:
910		__cfg80211_leave_mesh(rdev, dev);
911		break;
912	case NL80211_IFTYPE_AP:
913	case NL80211_IFTYPE_P2P_GO:
914		__cfg80211_stop_ap(rdev, dev, true);
915		break;
916	case NL80211_IFTYPE_OCB:
917		__cfg80211_leave_ocb(rdev, dev);
918		break;
919	case NL80211_IFTYPE_WDS:
920		/* must be handled by mac80211/driver, has no APIs */
921		break;
922	case NL80211_IFTYPE_P2P_DEVICE:
923		/* cannot happen, has no netdev */
924		break;
925	case NL80211_IFTYPE_AP_VLAN:
926	case NL80211_IFTYPE_MONITOR:
927		/* nothing to do */
928		break;
929	case NL80211_IFTYPE_UNSPECIFIED:
930	case NUM_NL80211_IFTYPES:
931		/* invalid */
932		break;
933	}
934}
935
936void cfg80211_leave(struct cfg80211_registered_device *rdev,
937		    struct wireless_dev *wdev)
938{
939	wdev_lock(wdev);
940	__cfg80211_leave(rdev, wdev);
941	wdev_unlock(wdev);
942}
943
944void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
945			 gfp_t gfp)
946{
947	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
948	struct cfg80211_event *ev;
949	unsigned long flags;
950
951	trace_cfg80211_stop_iface(wiphy, wdev);
952
953	ev = kzalloc(sizeof(*ev), gfp);
954	if (!ev)
955		return;
956
957	ev->type = EVENT_STOPPED;
958
959	spin_lock_irqsave(&wdev->event_lock, flags);
960	list_add_tail(&ev->list, &wdev->event_list);
961	spin_unlock_irqrestore(&wdev->event_lock, flags);
962	queue_work(cfg80211_wq, &rdev->event_work);
963}
964EXPORT_SYMBOL(cfg80211_stop_iface);
965
966static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
967					 unsigned long state, void *ptr)
968{
969	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
970	struct wireless_dev *wdev = dev->ieee80211_ptr;
971	struct cfg80211_registered_device *rdev;
972	struct cfg80211_sched_scan_request *sched_scan_req;
973
974	if (!wdev)
975		return NOTIFY_DONE;
976
977	rdev = wiphy_to_rdev(wdev->wiphy);
978
979	WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
980
981	switch (state) {
982	case NETDEV_POST_INIT:
983		SET_NETDEV_DEVTYPE(dev, &wiphy_type);
984		break;
985	case NETDEV_REGISTER:
986		/*
987		 * NB: cannot take rdev->mtx here because this may be
988		 * called within code protected by it when interfaces
989		 * are added with nl80211.
990		 */
991		mutex_init(&wdev->mtx);
992		INIT_LIST_HEAD(&wdev->event_list);
993		spin_lock_init(&wdev->event_lock);
994		INIT_LIST_HEAD(&wdev->mgmt_registrations);
995		spin_lock_init(&wdev->mgmt_registrations_lock);
996
997		wdev->identifier = ++rdev->wdev_id;
998		list_add_rcu(&wdev->list, &rdev->wdev_list);
999		rdev->devlist_generation++;
1000		/* can only change netns with wiphy */
1001		dev->features |= NETIF_F_NETNS_LOCAL;
1002
1003		if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj,
1004				      "phy80211")) {
1005			pr_err("failed to add phy80211 symlink to netdev!\n");
1006		}
1007		wdev->netdev = dev;
1008#ifdef CONFIG_CFG80211_WEXT
1009		wdev->wext.default_key = -1;
1010		wdev->wext.default_mgmt_key = -1;
1011		wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1012#endif
1013
1014		if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT)
1015			wdev->ps = true;
1016		else
1017			wdev->ps = false;
1018		/* allow mac80211 to determine the timeout */
1019		wdev->ps_timeout = -1;
1020
1021		if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1022		     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
1023		     wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)
1024			dev->priv_flags |= IFF_DONT_BRIDGE;
1025		break;
1026	case NETDEV_GOING_DOWN:
1027		cfg80211_leave(rdev, wdev);
1028		break;
1029	case NETDEV_DOWN:
1030		cfg80211_update_iface_num(rdev, wdev->iftype, -1);
1031		if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
1032			if (WARN_ON(!rdev->scan_req->notified))
1033				rdev->scan_req->aborted = true;
1034			___cfg80211_scan_done(rdev, false);
1035		}
1036
1037		sched_scan_req = rtnl_dereference(rdev->sched_scan_req);
1038		if (WARN_ON(sched_scan_req &&
1039			    sched_scan_req->dev == wdev->netdev)) {
1040			__cfg80211_stop_sched_scan(rdev, false);
1041		}
1042
1043		rdev->opencount--;
1044		wake_up(&rdev->dev_wait);
1045		break;
1046	case NETDEV_UP:
1047		cfg80211_update_iface_num(rdev, wdev->iftype, 1);
1048		wdev_lock(wdev);
1049		switch (wdev->iftype) {
1050#ifdef CONFIG_CFG80211_WEXT
1051		case NL80211_IFTYPE_ADHOC:
1052			cfg80211_ibss_wext_join(rdev, wdev);
1053			break;
1054		case NL80211_IFTYPE_STATION:
1055			cfg80211_mgd_wext_connect(rdev, wdev);
1056			break;
1057#endif
1058#ifdef CONFIG_MAC80211_MESH
1059		case NL80211_IFTYPE_MESH_POINT:
1060			{
1061				/* backward compat code... */
1062				struct mesh_setup setup;
1063				memcpy(&setup, &default_mesh_setup,
1064						sizeof(setup));
1065				 /* back compat only needed for mesh_id */
1066				setup.mesh_id = wdev->ssid;
1067				setup.mesh_id_len = wdev->mesh_id_up_len;
1068				if (wdev->mesh_id_up_len)
1069					__cfg80211_join_mesh(rdev, dev,
1070							&setup,
1071							&default_mesh_config);
1072				break;
1073			}
1074#endif
1075		default:
1076			break;
1077		}
1078		wdev_unlock(wdev);
1079		rdev->opencount++;
1080
1081		/*
1082		 * Configure power management to the driver here so that its
1083		 * correctly set also after interface type changes etc.
1084		 */
1085		if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1086		     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
1087		    rdev->ops->set_power_mgmt)
1088			if (rdev_set_power_mgmt(rdev, dev, wdev->ps,
1089						wdev->ps_timeout)) {
1090				/* assume this means it's off */
1091				wdev->ps = false;
1092			}
1093		break;
1094	case NETDEV_UNREGISTER:
1095		/*
1096		 * It is possible to get NETDEV_UNREGISTER
1097		 * multiple times. To detect that, check
1098		 * that the interface is still on the list
1099		 * of registered interfaces, and only then
1100		 * remove and clean it up.
1101		 */
1102		if (!list_empty(&wdev->list)) {
1103			sysfs_remove_link(&dev->dev.kobj, "phy80211");
1104			list_del_rcu(&wdev->list);
1105			rdev->devlist_generation++;
1106			cfg80211_mlme_purge_registrations(wdev);
1107#ifdef CONFIG_CFG80211_WEXT
1108			kzfree(wdev->wext.keys);
1109#endif
1110		}
1111		/*
1112		 * synchronise (so that we won't find this netdev
1113		 * from other code any more) and then clear the list
1114		 * head so that the above code can safely check for
1115		 * !list_empty() to avoid double-cleanup.
1116		 */
1117		synchronize_rcu();
1118		INIT_LIST_HEAD(&wdev->list);
1119		/*
1120		 * Ensure that all events have been processed and
1121		 * freed.
1122		 */
1123		cfg80211_process_wdev_events(wdev);
1124
1125		if (WARN_ON(wdev->current_bss)) {
1126			cfg80211_unhold_bss(wdev->current_bss);
1127			cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
1128			wdev->current_bss = NULL;
1129		}
1130		break;
1131	case NETDEV_PRE_UP:
1132		if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
1133			return notifier_from_errno(-EOPNOTSUPP);
1134		if (rfkill_blocked(rdev->rfkill))
1135			return notifier_from_errno(-ERFKILL);
1136		break;
1137	default:
1138		return NOTIFY_DONE;
1139	}
1140
1141	wireless_nlevent_flush();
1142
1143	return NOTIFY_OK;
1144}
1145
1146static struct notifier_block cfg80211_netdev_notifier = {
1147	.notifier_call = cfg80211_netdev_notifier_call,
1148};
1149
1150static void __net_exit cfg80211_pernet_exit(struct net *net)
1151{
1152	struct cfg80211_registered_device *rdev;
1153
1154	rtnl_lock();
1155	list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
1156		if (net_eq(wiphy_net(&rdev->wiphy), net))
1157			WARN_ON(cfg80211_switch_netns(rdev, &init_net));
1158	}
1159	rtnl_unlock();
1160}
1161
1162static struct pernet_operations cfg80211_pernet_ops = {
1163	.exit = cfg80211_pernet_exit,
1164};
1165
1166static int __init cfg80211_init(void)
1167{
1168	int err;
1169
1170	err = register_pernet_device(&cfg80211_pernet_ops);
1171	if (err)
1172		goto out_fail_pernet;
1173
1174	err = wiphy_sysfs_init();
1175	if (err)
1176		goto out_fail_sysfs;
1177
1178	err = register_netdevice_notifier(&cfg80211_netdev_notifier);
1179	if (err)
1180		goto out_fail_notifier;
1181
1182	err = nl80211_init();
1183	if (err)
1184		goto out_fail_nl80211;
1185
1186	ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
1187
1188	err = regulatory_init();
1189	if (err)
1190		goto out_fail_reg;
1191
1192	cfg80211_wq = create_singlethread_workqueue("cfg80211");
1193	if (!cfg80211_wq) {
1194		err = -ENOMEM;
1195		goto out_fail_wq;
1196	}
1197
1198	return 0;
1199
1200out_fail_wq:
1201	regulatory_exit();
1202out_fail_reg:
1203	debugfs_remove(ieee80211_debugfs_dir);
1204	nl80211_exit();
1205out_fail_nl80211:
1206	unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1207out_fail_notifier:
1208	wiphy_sysfs_exit();
1209out_fail_sysfs:
1210	unregister_pernet_device(&cfg80211_pernet_ops);
1211out_fail_pernet:
1212	return err;
1213}
1214subsys_initcall(cfg80211_init);
1215
1216static void __exit cfg80211_exit(void)
1217{
1218	debugfs_remove(ieee80211_debugfs_dir);
1219	nl80211_exit();
1220	unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1221	wiphy_sysfs_exit();
1222	regulatory_exit();
1223	unregister_pernet_device(&cfg80211_pernet_ops);
1224	destroy_workqueue(cfg80211_wq);
1225}
1226module_exit(cfg80211_exit);
1227