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