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