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-2021 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        spin_lock_init(&rdev->mgmt_registrations_lock);
 528
 529#ifdef CONFIG_CFG80211_DEFAULT_PS
 530        rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
 531#endif
 532
 533        wiphy_net_set(&rdev->wiphy, &init_net);
 534
 535        rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
 536        rdev->wiphy.rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
 537                                          &rdev->wiphy.dev, RFKILL_TYPE_WLAN,
 538                                          &rdev->rfkill_ops, rdev);
 539
 540        if (!rdev->wiphy.rfkill) {
 541                wiphy_free(&rdev->wiphy);
 542                return NULL;
 543        }
 544
 545        INIT_WORK(&rdev->rfkill_block, cfg80211_rfkill_block_work);
 546        INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
 547        INIT_WORK(&rdev->event_work, cfg80211_event_work);
 548
 549        init_waitqueue_head(&rdev->dev_wait);
 550
 551        /*
 552         * Initialize wiphy parameters to IEEE 802.11 MIB default values.
 553         * Fragmentation and RTS threshold are disabled by default with the
 554         * special -1 value.
 555         */
 556        rdev->wiphy.retry_short = 7;
 557        rdev->wiphy.retry_long = 4;
 558        rdev->wiphy.frag_threshold = (u32) -1;
 559        rdev->wiphy.rts_threshold = (u32) -1;
 560        rdev->wiphy.coverage_class = 0;
 561
 562        rdev->wiphy.max_num_csa_counters = 1;
 563
 564        rdev->wiphy.max_sched_scan_plans = 1;
 565        rdev->wiphy.max_sched_scan_plan_interval = U32_MAX;
 566
 567        return &rdev->wiphy;
 568}
 569EXPORT_SYMBOL(wiphy_new_nm);
 570
 571static int wiphy_verify_combinations(struct wiphy *wiphy)
 572{
 573        const struct ieee80211_iface_combination *c;
 574        int i, j;
 575
 576        for (i = 0; i < wiphy->n_iface_combinations; i++) {
 577                u32 cnt = 0;
 578                u16 all_iftypes = 0;
 579
 580                c = &wiphy->iface_combinations[i];
 581
 582                /*
 583                 * Combinations with just one interface aren't real,
 584                 * however we make an exception for DFS.
 585                 */
 586                if (WARN_ON((c->max_interfaces < 2) && !c->radar_detect_widths))
 587                        return -EINVAL;
 588
 589                /* Need at least one channel */
 590                if (WARN_ON(!c->num_different_channels))
 591                        return -EINVAL;
 592
 593                /* DFS only works on one channel. */
 594                if (WARN_ON(c->radar_detect_widths &&
 595                            (c->num_different_channels > 1)))
 596                        return -EINVAL;
 597
 598                if (WARN_ON(!c->n_limits))
 599                        return -EINVAL;
 600
 601                for (j = 0; j < c->n_limits; j++) {
 602                        u16 types = c->limits[j].types;
 603
 604                        /* interface types shouldn't overlap */
 605                        if (WARN_ON(types & all_iftypes))
 606                                return -EINVAL;
 607                        all_iftypes |= types;
 608
 609                        if (WARN_ON(!c->limits[j].max))
 610                                return -EINVAL;
 611
 612                        /* Shouldn't list software iftypes in combinations! */
 613                        if (WARN_ON(wiphy->software_iftypes & types))
 614                                return -EINVAL;
 615
 616                        /* Only a single P2P_DEVICE can be allowed */
 617                        if (WARN_ON(types & BIT(NL80211_IFTYPE_P2P_DEVICE) &&
 618                                    c->limits[j].max > 1))
 619                                return -EINVAL;
 620
 621                        /* Only a single NAN can be allowed */
 622                        if (WARN_ON(types & BIT(NL80211_IFTYPE_NAN) &&
 623                                    c->limits[j].max > 1))
 624                                return -EINVAL;
 625
 626                        /*
 627                         * This isn't well-defined right now. If you have an
 628                         * IBSS interface, then its beacon interval may change
 629                         * by joining other networks, and nothing prevents it
 630                         * from doing that.
 631                         * So technically we probably shouldn't even allow AP
 632                         * and IBSS in the same interface, but it seems that
 633                         * some drivers support that, possibly only with fixed
 634                         * beacon intervals for IBSS.
 635                         */
 636                        if (WARN_ON(types & BIT(NL80211_IFTYPE_ADHOC) &&
 637                                    c->beacon_int_min_gcd)) {
 638                                return -EINVAL;
 639                        }
 640
 641                        cnt += c->limits[j].max;
 642                        /*
 643                         * Don't advertise an unsupported type
 644                         * in a combination.
 645                         */
 646                        if (WARN_ON((wiphy->interface_modes & types) != types))
 647                                return -EINVAL;
 648                }
 649
 650                if (WARN_ON(all_iftypes & BIT(NL80211_IFTYPE_WDS)))
 651                        return -EINVAL;
 652
 653                /* You can't even choose that many! */
 654                if (WARN_ON(cnt < c->max_interfaces))
 655                        return -EINVAL;
 656        }
 657
 658        return 0;
 659}
 660
 661int wiphy_register(struct wiphy *wiphy)
 662{
 663        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 664        int res;
 665        enum nl80211_band band;
 666        struct ieee80211_supported_band *sband;
 667        bool have_band = false;
 668        int i;
 669        u16 ifmodes = wiphy->interface_modes;
 670
 671#ifdef CONFIG_PM
 672        if (WARN_ON(wiphy->wowlan &&
 673                    (wiphy->wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) &&
 674                    !(wiphy->wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY)))
 675                return -EINVAL;
 676        if (WARN_ON(wiphy->wowlan &&
 677                    !wiphy->wowlan->flags && !wiphy->wowlan->n_patterns &&
 678                    !wiphy->wowlan->tcp))
 679                return -EINVAL;
 680#endif
 681        if (WARN_ON((wiphy->features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH) &&
 682                    (!rdev->ops->tdls_channel_switch ||
 683                     !rdev->ops->tdls_cancel_channel_switch)))
 684                return -EINVAL;
 685
 686        if (WARN_ON((wiphy->interface_modes & BIT(NL80211_IFTYPE_NAN)) &&
 687                    (!rdev->ops->start_nan || !rdev->ops->stop_nan ||
 688                     !rdev->ops->add_nan_func || !rdev->ops->del_nan_func ||
 689                     !(wiphy->nan_supported_bands & BIT(NL80211_BAND_2GHZ)))))
 690                return -EINVAL;
 691
 692        if (WARN_ON(wiphy->interface_modes & BIT(NL80211_IFTYPE_WDS)))
 693                return -EINVAL;
 694
 695        if (WARN_ON(wiphy->pmsr_capa && !wiphy->pmsr_capa->ftm.supported))
 696                return -EINVAL;
 697
 698        if (wiphy->pmsr_capa && wiphy->pmsr_capa->ftm.supported) {
 699                if (WARN_ON(!wiphy->pmsr_capa->ftm.asap &&
 700                            !wiphy->pmsr_capa->ftm.non_asap))
 701                        return -EINVAL;
 702                if (WARN_ON(!wiphy->pmsr_capa->ftm.preambles ||
 703                            !wiphy->pmsr_capa->ftm.bandwidths))
 704                        return -EINVAL;
 705                if (WARN_ON(wiphy->pmsr_capa->ftm.preambles &
 706                                ~(BIT(NL80211_PREAMBLE_LEGACY) |
 707                                  BIT(NL80211_PREAMBLE_HT) |
 708                                  BIT(NL80211_PREAMBLE_VHT) |
 709                                  BIT(NL80211_PREAMBLE_HE) |
 710                                  BIT(NL80211_PREAMBLE_DMG))))
 711                        return -EINVAL;
 712                if (WARN_ON((wiphy->pmsr_capa->ftm.trigger_based ||
 713                             wiphy->pmsr_capa->ftm.non_trigger_based) &&
 714                            !(wiphy->pmsr_capa->ftm.preambles &
 715                              BIT(NL80211_PREAMBLE_HE))))
 716                        return -EINVAL;
 717                if (WARN_ON(wiphy->pmsr_capa->ftm.bandwidths &
 718                                ~(BIT(NL80211_CHAN_WIDTH_20_NOHT) |
 719                                  BIT(NL80211_CHAN_WIDTH_20) |
 720                                  BIT(NL80211_CHAN_WIDTH_40) |
 721                                  BIT(NL80211_CHAN_WIDTH_80) |
 722                                  BIT(NL80211_CHAN_WIDTH_80P80) |
 723                                  BIT(NL80211_CHAN_WIDTH_160) |
 724                                  BIT(NL80211_CHAN_WIDTH_5) |
 725                                  BIT(NL80211_CHAN_WIDTH_10))))
 726                        return -EINVAL;
 727        }
 728
 729        /*
 730         * if a wiphy has unsupported modes for regulatory channel enforcement,
 731         * opt-out of enforcement checking
 732         */
 733        if (wiphy->interface_modes & ~(BIT(NL80211_IFTYPE_STATION) |
 734                                       BIT(NL80211_IFTYPE_P2P_CLIENT) |
 735                                       BIT(NL80211_IFTYPE_AP) |
 736                                       BIT(NL80211_IFTYPE_P2P_GO) |
 737                                       BIT(NL80211_IFTYPE_ADHOC) |
 738                                       BIT(NL80211_IFTYPE_P2P_DEVICE) |
 739                                       BIT(NL80211_IFTYPE_NAN) |
 740                                       BIT(NL80211_IFTYPE_AP_VLAN) |
 741                                       BIT(NL80211_IFTYPE_MONITOR)))
 742                wiphy->regulatory_flags |= REGULATORY_IGNORE_STALE_KICKOFF;
 743
 744        if (WARN_ON((wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) &&
 745                    (wiphy->regulatory_flags &
 746                                        (REGULATORY_CUSTOM_REG |
 747                                         REGULATORY_STRICT_REG |
 748                                         REGULATORY_COUNTRY_IE_FOLLOW_POWER |
 749                                         REGULATORY_COUNTRY_IE_IGNORE))))
 750                return -EINVAL;
 751
 752        if (WARN_ON(wiphy->coalesce &&
 753                    (!wiphy->coalesce->n_rules ||
 754                     !wiphy->coalesce->n_patterns) &&
 755                    (!wiphy->coalesce->pattern_min_len ||
 756                     wiphy->coalesce->pattern_min_len >
 757                        wiphy->coalesce->pattern_max_len)))
 758                return -EINVAL;
 759
 760        if (WARN_ON(wiphy->ap_sme_capa &&
 761                    !(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME)))
 762                return -EINVAL;
 763
 764        if (WARN_ON(wiphy->addresses && !wiphy->n_addresses))
 765                return -EINVAL;
 766
 767        if (WARN_ON(wiphy->addresses &&
 768                    !is_zero_ether_addr(wiphy->perm_addr) &&
 769                    memcmp(wiphy->perm_addr, wiphy->addresses[0].addr,
 770                           ETH_ALEN)))
 771                return -EINVAL;
 772
 773        if (WARN_ON(wiphy->max_acl_mac_addrs &&
 774                    (!(wiphy->flags & WIPHY_FLAG_HAVE_AP_SME) ||
 775                     !rdev->ops->set_mac_acl)))
 776                return -EINVAL;
 777
 778        /* assure only valid behaviours are flagged by driver
 779         * hence subtract 2 as bit 0 is invalid.
 780         */
 781        if (WARN_ON(wiphy->bss_select_support &&
 782                    (wiphy->bss_select_support & ~(BIT(__NL80211_BSS_SELECT_ATTR_AFTER_LAST) - 2))))
 783                return -EINVAL;
 784
 785        if (WARN_ON(wiphy_ext_feature_isset(&rdev->wiphy,
 786                                            NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X) &&
 787                    (!rdev->ops->set_pmk || !rdev->ops->del_pmk)))
 788                return -EINVAL;
 789
 790        if (WARN_ON(!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) &&
 791                    rdev->ops->update_connect_params))
 792                return -EINVAL;
 793
 794        if (wiphy->addresses)
 795                memcpy(wiphy->perm_addr, wiphy->addresses[0].addr, ETH_ALEN);
 796
 797        /* sanity check ifmodes */
 798        WARN_ON(!ifmodes);
 799        ifmodes &= ((1 << NUM_NL80211_IFTYPES) - 1) & ~1;
 800        if (WARN_ON(ifmodes != wiphy->interface_modes))
 801                wiphy->interface_modes = ifmodes;
 802
 803        res = wiphy_verify_combinations(wiphy);
 804        if (res)
 805                return res;
 806
 807        /* sanity check supported bands/channels */
 808        for (band = 0; band < NUM_NL80211_BANDS; band++) {
 809                u16 types = 0;
 810                bool have_he = false;
 811
 812                sband = wiphy->bands[band];
 813                if (!sband)
 814                        continue;
 815
 816                sband->band = band;
 817                if (WARN_ON(!sband->n_channels))
 818                        return -EINVAL;
 819                /*
 820                 * on 60GHz or sub-1Ghz band, there are no legacy rates, so
 821                 * n_bitrates is 0
 822                 */
 823                if (WARN_ON((band != NL80211_BAND_60GHZ &&
 824                             band != NL80211_BAND_S1GHZ) &&
 825                            !sband->n_bitrates))
 826                        return -EINVAL;
 827
 828                if (WARN_ON(band == NL80211_BAND_6GHZ &&
 829                            (sband->ht_cap.ht_supported ||
 830                             sband->vht_cap.vht_supported)))
 831                        return -EINVAL;
 832
 833                /*
 834                 * Since cfg80211_disable_40mhz_24ghz is global, we can
 835                 * modify the sband's ht data even if the driver uses a
 836                 * global structure for that.
 837                 */
 838                if (cfg80211_disable_40mhz_24ghz &&
 839                    band == NL80211_BAND_2GHZ &&
 840                    sband->ht_cap.ht_supported) {
 841                        sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
 842                        sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
 843                }
 844
 845                /*
 846                 * Since we use a u32 for rate bitmaps in
 847                 * ieee80211_get_response_rate, we cannot
 848                 * have more than 32 legacy rates.
 849                 */
 850                if (WARN_ON(sband->n_bitrates > 32))
 851                        return -EINVAL;
 852
 853                for (i = 0; i < sband->n_channels; i++) {
 854                        sband->channels[i].orig_flags =
 855                                sband->channels[i].flags;
 856                        sband->channels[i].orig_mag = INT_MAX;
 857                        sband->channels[i].orig_mpwr =
 858                                sband->channels[i].max_power;
 859                        sband->channels[i].band = band;
 860
 861                        if (WARN_ON(sband->channels[i].freq_offset >= 1000))
 862                                return -EINVAL;
 863                }
 864
 865                for (i = 0; i < sband->n_iftype_data; i++) {
 866                        const struct ieee80211_sband_iftype_data *iftd;
 867
 868                        iftd = &sband->iftype_data[i];
 869
 870                        if (WARN_ON(!iftd->types_mask))
 871                                return -EINVAL;
 872                        if (WARN_ON(types & iftd->types_mask))
 873                                return -EINVAL;
 874
 875                        /* at least one piece of information must be present */
 876                        if (WARN_ON(!iftd->he_cap.has_he))
 877                                return -EINVAL;
 878
 879                        types |= iftd->types_mask;
 880
 881                        if (i == 0)
 882                                have_he = iftd->he_cap.has_he;
 883                        else
 884                                have_he = have_he &&
 885                                          iftd->he_cap.has_he;
 886                }
 887
 888                if (WARN_ON(!have_he && band == NL80211_BAND_6GHZ))
 889                        return -EINVAL;
 890
 891                have_band = true;
 892        }
 893
 894        if (!have_band) {
 895                WARN_ON(1);
 896                return -EINVAL;
 897        }
 898
 899        for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) {
 900                /*
 901                 * Validate we have a policy (can be explicitly set to
 902                 * VENDOR_CMD_RAW_DATA which is non-NULL) and also that
 903                 * we have at least one of doit/dumpit.
 904                 */
 905                if (WARN_ON(!rdev->wiphy.vendor_commands[i].policy))
 906                        return -EINVAL;
 907                if (WARN_ON(!rdev->wiphy.vendor_commands[i].doit &&
 908                            !rdev->wiphy.vendor_commands[i].dumpit))
 909                        return -EINVAL;
 910        }
 911
 912#ifdef CONFIG_PM
 913        if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns &&
 914                    (!rdev->wiphy.wowlan->pattern_min_len ||
 915                     rdev->wiphy.wowlan->pattern_min_len >
 916                                rdev->wiphy.wowlan->pattern_max_len)))
 917                return -EINVAL;
 918#endif
 919
 920        /* check and set up bitrates */
 921        ieee80211_set_bitrate_flags(wiphy);
 922
 923        rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH;
 924
 925        rtnl_lock();
 926        res = device_add(&rdev->wiphy.dev);
 927        if (res) {
 928                rtnl_unlock();
 929                return res;
 930        }
 931
 932        list_add_rcu(&rdev->list, &cfg80211_rdev_list);
 933        cfg80211_rdev_list_generation++;
 934
 935        /* add to debugfs */
 936        rdev->wiphy.debugfsdir = debugfs_create_dir(wiphy_name(&rdev->wiphy),
 937                                                    ieee80211_debugfs_dir);
 938
 939        cfg80211_debugfs_rdev_add(rdev);
 940        nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY);
 941
 942        /* set up regulatory info */
 943        wiphy_regulatory_register(wiphy);
 944
 945        if (wiphy->regulatory_flags & REGULATORY_CUSTOM_REG) {
 946                struct regulatory_request request;
 947
 948                request.wiphy_idx = get_wiphy_idx(wiphy);
 949                request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
 950                request.alpha2[0] = '9';
 951                request.alpha2[1] = '9';
 952
 953                nl80211_send_reg_change_event(&request);
 954        }
 955
 956        /* Check that nobody globally advertises any capabilities they do not
 957         * advertise on all possible interface types.
 958         */
 959        if (wiphy->extended_capabilities_len &&
 960            wiphy->num_iftype_ext_capab &&
 961            wiphy->iftype_ext_capab) {
 962                u8 supported_on_all, j;
 963                const struct wiphy_iftype_ext_capab *capab;
 964
 965                capab = wiphy->iftype_ext_capab;
 966                for (j = 0; j < wiphy->extended_capabilities_len; j++) {
 967                        if (capab[0].extended_capabilities_len > j)
 968                                supported_on_all =
 969                                        capab[0].extended_capabilities[j];
 970                        else
 971                                supported_on_all = 0x00;
 972                        for (i = 1; i < wiphy->num_iftype_ext_capab; i++) {
 973                                if (j >= capab[i].extended_capabilities_len) {
 974                                        supported_on_all = 0x00;
 975                                        break;
 976                                }
 977                                supported_on_all &=
 978                                        capab[i].extended_capabilities[j];
 979                        }
 980                        if (WARN_ON(wiphy->extended_capabilities[j] &
 981                                    ~supported_on_all))
 982                                break;
 983                }
 984        }
 985
 986        rdev->wiphy.registered = true;
 987        rtnl_unlock();
 988
 989        res = rfkill_register(rdev->wiphy.rfkill);
 990        if (res) {
 991                rfkill_destroy(rdev->wiphy.rfkill);
 992                rdev->wiphy.rfkill = NULL;
 993                wiphy_unregister(&rdev->wiphy);
 994                return res;
 995        }
 996
 997        return 0;
 998}
 999EXPORT_SYMBOL(wiphy_register);
1000
1001void wiphy_rfkill_start_polling(struct wiphy *wiphy)
1002{
1003        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1004
1005        if (!rdev->ops->rfkill_poll)
1006                return;
1007        rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
1008        rfkill_resume_polling(wiphy->rfkill);
1009}
1010EXPORT_SYMBOL(wiphy_rfkill_start_polling);
1011
1012void wiphy_unregister(struct wiphy *wiphy)
1013{
1014        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1015
1016        wait_event(rdev->dev_wait, ({
1017                int __count;
1018                wiphy_lock(&rdev->wiphy);
1019                __count = rdev->opencount;
1020                wiphy_unlock(&rdev->wiphy);
1021                __count == 0; }));
1022
1023        if (rdev->wiphy.rfkill)
1024                rfkill_unregister(rdev->wiphy.rfkill);
1025
1026        rtnl_lock();
1027        wiphy_lock(&rdev->wiphy);
1028        nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY);
1029        rdev->wiphy.registered = false;
1030
1031        WARN_ON(!list_empty(&rdev->wiphy.wdev_list));
1032
1033        /*
1034         * First remove the hardware from everywhere, this makes
1035         * it impossible to find from userspace.
1036         */
1037        debugfs_remove_recursive(rdev->wiphy.debugfsdir);
1038        list_del_rcu(&rdev->list);
1039        synchronize_rcu();
1040
1041        /*
1042         * If this device got a regulatory hint tell core its
1043         * free to listen now to a new shiny device regulatory hint
1044         */
1045        wiphy_regulatory_deregister(wiphy);
1046
1047        cfg80211_rdev_list_generation++;
1048        device_del(&rdev->wiphy.dev);
1049
1050        wiphy_unlock(&rdev->wiphy);
1051        rtnl_unlock();
1052
1053        flush_work(&rdev->scan_done_wk);
1054        cancel_work_sync(&rdev->conn_work);
1055        flush_work(&rdev->event_work);
1056        cancel_delayed_work_sync(&rdev->dfs_update_channels_wk);
1057        flush_work(&rdev->destroy_work);
1058        flush_work(&rdev->sched_scan_stop_wk);
1059        flush_work(&rdev->propagate_radar_detect_wk);
1060        flush_work(&rdev->propagate_cac_done_wk);
1061        flush_work(&rdev->mgmt_registrations_update_wk);
1062
1063#ifdef CONFIG_PM
1064        if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup)
1065                rdev_set_wakeup(rdev, false);
1066#endif
1067        cfg80211_rdev_free_wowlan(rdev);
1068        cfg80211_rdev_free_coalesce(rdev);
1069}
1070EXPORT_SYMBOL(wiphy_unregister);
1071
1072void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
1073{
1074        struct cfg80211_internal_bss *scan, *tmp;
1075        struct cfg80211_beacon_registration *reg, *treg;
1076        rfkill_destroy(rdev->wiphy.rfkill);
1077        list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) {
1078                list_del(&reg->list);
1079                kfree(reg);
1080        }
1081        list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
1082                cfg80211_put_bss(&rdev->wiphy, &scan->pub);
1083        mutex_destroy(&rdev->wiphy.mtx);
1084        kfree(rdev);
1085}
1086
1087void wiphy_free(struct wiphy *wiphy)
1088{
1089        put_device(&wiphy->dev);
1090}
1091EXPORT_SYMBOL(wiphy_free);
1092
1093void wiphy_rfkill_set_hw_state_reason(struct wiphy *wiphy, bool blocked,
1094                                      enum rfkill_hard_block_reasons reason)
1095{
1096        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1097
1098        if (rfkill_set_hw_state_reason(wiphy->rfkill, blocked, reason))
1099                schedule_work(&rdev->rfkill_block);
1100}
1101EXPORT_SYMBOL(wiphy_rfkill_set_hw_state_reason);
1102
1103void cfg80211_cqm_config_free(struct wireless_dev *wdev)
1104{
1105        kfree(wdev->cqm_config);
1106        wdev->cqm_config = NULL;
1107}
1108
1109static void _cfg80211_unregister_wdev(struct wireless_dev *wdev,
1110                                      bool unregister_netdev)
1111{
1112        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
1113
1114        ASSERT_RTNL();
1115        lockdep_assert_held(&rdev->wiphy.mtx);
1116
1117        flush_work(&wdev->pmsr_free_wk);
1118
1119        nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE);
1120
1121        wdev->registered = false;
1122
1123        if (wdev->netdev) {
1124                sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211");
1125                if (unregister_netdev)
1126                        unregister_netdevice(wdev->netdev);
1127        }
1128
1129        list_del_rcu(&wdev->list);
1130        synchronize_net();
1131        rdev->devlist_generation++;
1132
1133        cfg80211_mlme_purge_registrations(wdev);
1134
1135        switch (wdev->iftype) {
1136        case NL80211_IFTYPE_P2P_DEVICE:
1137                cfg80211_stop_p2p_device(rdev, wdev);
1138                break;
1139        case NL80211_IFTYPE_NAN:
1140                cfg80211_stop_nan(rdev, wdev);
1141                break;
1142        default:
1143                break;
1144        }
1145
1146#ifdef CONFIG_CFG80211_WEXT
1147        kfree_sensitive(wdev->wext.keys);
1148        wdev->wext.keys = NULL;
1149#endif
1150        /* only initialized if we have a netdev */
1151        if (wdev->netdev)
1152                flush_work(&wdev->disconnect_wk);
1153
1154        cfg80211_cqm_config_free(wdev);
1155
1156        /*
1157         * Ensure that all events have been processed and
1158         * freed.
1159         */
1160        cfg80211_process_wdev_events(wdev);
1161
1162        if (WARN_ON(wdev->current_bss)) {
1163                cfg80211_unhold_bss(wdev->current_bss);
1164                cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub);
1165                wdev->current_bss = NULL;
1166        }
1167}
1168
1169void cfg80211_unregister_wdev(struct wireless_dev *wdev)
1170{
1171        _cfg80211_unregister_wdev(wdev, true);
1172}
1173EXPORT_SYMBOL(cfg80211_unregister_wdev);
1174
1175static const struct device_type wiphy_type = {
1176        .name   = "wlan",
1177};
1178
1179void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev,
1180                               enum nl80211_iftype iftype, int num)
1181{
1182        lockdep_assert_held(&rdev->wiphy.mtx);
1183
1184        rdev->num_running_ifaces += num;
1185        if (iftype == NL80211_IFTYPE_MONITOR)
1186                rdev->num_running_monitor_ifaces += num;
1187}
1188
1189void __cfg80211_leave(struct cfg80211_registered_device *rdev,
1190                      struct wireless_dev *wdev)
1191{
1192        struct net_device *dev = wdev->netdev;
1193        struct cfg80211_sched_scan_request *pos, *tmp;
1194
1195        lockdep_assert_held(&rdev->wiphy.mtx);
1196        ASSERT_WDEV_LOCK(wdev);
1197
1198        cfg80211_pmsr_wdev_down(wdev);
1199
1200        switch (wdev->iftype) {
1201        case NL80211_IFTYPE_ADHOC:
1202                __cfg80211_leave_ibss(rdev, dev, true);
1203                break;
1204        case NL80211_IFTYPE_P2P_CLIENT:
1205        case NL80211_IFTYPE_STATION:
1206                list_for_each_entry_safe(pos, tmp, &rdev->sched_scan_req_list,
1207                                         list) {
1208                        if (dev == pos->dev)
1209                                cfg80211_stop_sched_scan_req(rdev, pos, false);
1210                }
1211
1212#ifdef CONFIG_CFG80211_WEXT
1213                kfree(wdev->wext.ie);
1214                wdev->wext.ie = NULL;
1215                wdev->wext.ie_len = 0;
1216                wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1217#endif
1218                cfg80211_disconnect(rdev, dev,
1219                                    WLAN_REASON_DEAUTH_LEAVING, true);
1220                break;
1221        case NL80211_IFTYPE_MESH_POINT:
1222                __cfg80211_leave_mesh(rdev, dev);
1223                break;
1224        case NL80211_IFTYPE_AP:
1225        case NL80211_IFTYPE_P2P_GO:
1226                __cfg80211_stop_ap(rdev, dev, true);
1227                break;
1228        case NL80211_IFTYPE_OCB:
1229                __cfg80211_leave_ocb(rdev, dev);
1230                break;
1231        case NL80211_IFTYPE_P2P_DEVICE:
1232        case NL80211_IFTYPE_NAN:
1233                /* cannot happen, has no netdev */
1234                break;
1235        case NL80211_IFTYPE_AP_VLAN:
1236        case NL80211_IFTYPE_MONITOR:
1237                /* nothing to do */
1238                break;
1239        case NL80211_IFTYPE_UNSPECIFIED:
1240        case NL80211_IFTYPE_WDS:
1241        case NUM_NL80211_IFTYPES:
1242                /* invalid */
1243                break;
1244        }
1245}
1246
1247void cfg80211_leave(struct cfg80211_registered_device *rdev,
1248                    struct wireless_dev *wdev)
1249{
1250        wdev_lock(wdev);
1251        __cfg80211_leave(rdev, wdev);
1252        wdev_unlock(wdev);
1253}
1254
1255void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
1256                         gfp_t gfp)
1257{
1258        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
1259        struct cfg80211_event *ev;
1260        unsigned long flags;
1261
1262        trace_cfg80211_stop_iface(wiphy, wdev);
1263
1264        ev = kzalloc(sizeof(*ev), gfp);
1265        if (!ev)
1266                return;
1267
1268        ev->type = EVENT_STOPPED;
1269
1270        spin_lock_irqsave(&wdev->event_lock, flags);
1271        list_add_tail(&ev->list, &wdev->event_list);
1272        spin_unlock_irqrestore(&wdev->event_lock, flags);
1273        queue_work(cfg80211_wq, &rdev->event_work);
1274}
1275EXPORT_SYMBOL(cfg80211_stop_iface);
1276
1277void cfg80211_init_wdev(struct wireless_dev *wdev)
1278{
1279        mutex_init(&wdev->mtx);
1280        INIT_LIST_HEAD(&wdev->event_list);
1281        spin_lock_init(&wdev->event_lock);
1282        INIT_LIST_HEAD(&wdev->mgmt_registrations);
1283        INIT_LIST_HEAD(&wdev->pmsr_list);
1284        spin_lock_init(&wdev->pmsr_lock);
1285        INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk);
1286
1287#ifdef CONFIG_CFG80211_WEXT
1288        wdev->wext.default_key = -1;
1289        wdev->wext.default_mgmt_key = -1;
1290        wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
1291#endif
1292
1293        if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT)
1294                wdev->ps = true;
1295        else
1296                wdev->ps = false;
1297        /* allow mac80211 to determine the timeout */
1298        wdev->ps_timeout = -1;
1299
1300        if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1301             wdev->iftype == NL80211_IFTYPE_P2P_CLIENT ||
1302             wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr)
1303                wdev->netdev->priv_flags |= IFF_DONT_BRIDGE;
1304
1305        INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk);
1306}
1307
1308void cfg80211_register_wdev(struct cfg80211_registered_device *rdev,
1309                            struct wireless_dev *wdev)
1310{
1311        ASSERT_RTNL();
1312        lockdep_assert_held(&rdev->wiphy.mtx);
1313
1314        /*
1315         * We get here also when the interface changes network namespaces,
1316         * as it's registered into the new one, but we don't want it to
1317         * change ID in that case. Checking if the ID is already assigned
1318         * works, because 0 isn't considered a valid ID and the memory is
1319         * 0-initialized.
1320         */
1321        if (!wdev->identifier)
1322                wdev->identifier = ++rdev->wdev_id;
1323        list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list);
1324        rdev->devlist_generation++;
1325        wdev->registered = true;
1326
1327        if (wdev->netdev &&
1328            sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj,
1329                              "phy80211"))
1330                pr_err("failed to add phy80211 symlink to netdev!\n");
1331
1332        nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE);
1333}
1334
1335int cfg80211_register_netdevice(struct net_device *dev)
1336{
1337        struct wireless_dev *wdev = dev->ieee80211_ptr;
1338        struct cfg80211_registered_device *rdev;
1339        int ret;
1340
1341        ASSERT_RTNL();
1342
1343        if (WARN_ON(!wdev))
1344                return -EINVAL;
1345
1346        rdev = wiphy_to_rdev(wdev->wiphy);
1347
1348        lockdep_assert_held(&rdev->wiphy.mtx);
1349
1350        /* we'll take care of this */
1351        wdev->registered = true;
1352        wdev->registering = true;
1353        ret = register_netdevice(dev);
1354        if (ret)
1355                goto out;
1356
1357        cfg80211_register_wdev(rdev, wdev);
1358        ret = 0;
1359out:
1360        wdev->registering = false;
1361        if (ret)
1362                wdev->registered = false;
1363        return ret;
1364}
1365EXPORT_SYMBOL(cfg80211_register_netdevice);
1366
1367static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
1368                                         unsigned long state, void *ptr)
1369{
1370        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1371        struct wireless_dev *wdev = dev->ieee80211_ptr;
1372        struct cfg80211_registered_device *rdev;
1373        struct cfg80211_sched_scan_request *pos, *tmp;
1374
1375        if (!wdev)
1376                return NOTIFY_DONE;
1377
1378        rdev = wiphy_to_rdev(wdev->wiphy);
1379
1380        WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
1381
1382        switch (state) {
1383        case NETDEV_POST_INIT:
1384                SET_NETDEV_DEVTYPE(dev, &wiphy_type);
1385                wdev->netdev = dev;
1386                /* can only change netns with wiphy */
1387                dev->features |= NETIF_F_NETNS_LOCAL;
1388
1389                cfg80211_init_wdev(wdev);
1390                break;
1391        case NETDEV_REGISTER:
1392                if (!wdev->registered) {
1393                        wiphy_lock(&rdev->wiphy);
1394                        cfg80211_register_wdev(rdev, wdev);
1395                        wiphy_unlock(&rdev->wiphy);
1396                }
1397                break;
1398        case NETDEV_UNREGISTER:
1399                /*
1400                 * It is possible to get NETDEV_UNREGISTER multiple times,
1401                 * so check wdev->registered.
1402                 */
1403                if (wdev->registered && !wdev->registering) {
1404                        wiphy_lock(&rdev->wiphy);
1405                        _cfg80211_unregister_wdev(wdev, false);
1406                        wiphy_unlock(&rdev->wiphy);
1407                }
1408                break;
1409        case NETDEV_GOING_DOWN:
1410                wiphy_lock(&rdev->wiphy);
1411                cfg80211_leave(rdev, wdev);
1412                wiphy_unlock(&rdev->wiphy);
1413                break;
1414        case NETDEV_DOWN:
1415                wiphy_lock(&rdev->wiphy);
1416                cfg80211_update_iface_num(rdev, wdev->iftype, -1);
1417                if (rdev->scan_req && rdev->scan_req->wdev == wdev) {
1418                        if (WARN_ON(!rdev->scan_req->notified &&
1419                                    (!rdev->int_scan_req ||
1420                                     !rdev->int_scan_req->notified)))
1421                                rdev->scan_req->info.aborted = true;
1422                        ___cfg80211_scan_done(rdev, false);
1423                }
1424
1425                list_for_each_entry_safe(pos, tmp,
1426                                         &rdev->sched_scan_req_list, list) {
1427                        if (WARN_ON(pos->dev == wdev->netdev))
1428                                cfg80211_stop_sched_scan_req(rdev, pos, false);
1429                }
1430
1431                rdev->opencount--;
1432                wiphy_unlock(&rdev->wiphy);
1433                wake_up(&rdev->dev_wait);
1434                break;
1435        case NETDEV_UP:
1436                wiphy_lock(&rdev->wiphy);
1437                cfg80211_update_iface_num(rdev, wdev->iftype, 1);
1438                wdev_lock(wdev);
1439                switch (wdev->iftype) {
1440#ifdef CONFIG_CFG80211_WEXT
1441                case NL80211_IFTYPE_ADHOC:
1442                        cfg80211_ibss_wext_join(rdev, wdev);
1443                        break;
1444                case NL80211_IFTYPE_STATION:
1445                        cfg80211_mgd_wext_connect(rdev, wdev);
1446                        break;
1447#endif
1448#ifdef CONFIG_MAC80211_MESH
1449                case NL80211_IFTYPE_MESH_POINT:
1450                        {
1451                                /* backward compat code... */
1452                                struct mesh_setup setup;
1453                                memcpy(&setup, &default_mesh_setup,
1454                                                sizeof(setup));
1455                                 /* back compat only needed for mesh_id */
1456                                setup.mesh_id = wdev->ssid;
1457                                setup.mesh_id_len = wdev->mesh_id_up_len;
1458                                if (wdev->mesh_id_up_len)
1459                                        __cfg80211_join_mesh(rdev, dev,
1460                                                        &setup,
1461                                                        &default_mesh_config);
1462                                break;
1463                        }
1464#endif
1465                default:
1466                        break;
1467                }
1468                wdev_unlock(wdev);
1469                rdev->opencount++;
1470
1471                /*
1472                 * Configure power management to the driver here so that its
1473                 * correctly set also after interface type changes etc.
1474                 */
1475                if ((wdev->iftype == NL80211_IFTYPE_STATION ||
1476                     wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
1477                    rdev->ops->set_power_mgmt &&
1478                    rdev_set_power_mgmt(rdev, dev, wdev->ps,
1479                                        wdev->ps_timeout)) {
1480                        /* assume this means it's off */
1481                        wdev->ps = false;
1482                }
1483                wiphy_unlock(&rdev->wiphy);
1484                break;
1485        case NETDEV_PRE_UP:
1486                if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype,
1487                                             wdev->use_4addr, 0))
1488                        return notifier_from_errno(-EOPNOTSUPP);
1489
1490                if (rfkill_blocked(rdev->wiphy.rfkill))
1491                        return notifier_from_errno(-ERFKILL);
1492                break;
1493        default:
1494                return NOTIFY_DONE;
1495        }
1496
1497        wireless_nlevent_flush();
1498
1499        return NOTIFY_OK;
1500}
1501
1502static struct notifier_block cfg80211_netdev_notifier = {
1503        .notifier_call = cfg80211_netdev_notifier_call,
1504};
1505
1506static void __net_exit cfg80211_pernet_exit(struct net *net)
1507{
1508        struct cfg80211_registered_device *rdev;
1509
1510        rtnl_lock();
1511        list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
1512                if (net_eq(wiphy_net(&rdev->wiphy), net))
1513                        WARN_ON(cfg80211_switch_netns(rdev, &init_net));
1514        }
1515        rtnl_unlock();
1516}
1517
1518static struct pernet_operations cfg80211_pernet_ops = {
1519        .exit = cfg80211_pernet_exit,
1520};
1521
1522static int __init cfg80211_init(void)
1523{
1524        int err;
1525
1526        err = register_pernet_device(&cfg80211_pernet_ops);
1527        if (err)
1528                goto out_fail_pernet;
1529
1530        err = wiphy_sysfs_init();
1531        if (err)
1532                goto out_fail_sysfs;
1533
1534        err = register_netdevice_notifier(&cfg80211_netdev_notifier);
1535        if (err)
1536                goto out_fail_notifier;
1537
1538        err = nl80211_init();
1539        if (err)
1540                goto out_fail_nl80211;
1541
1542        ieee80211_debugfs_dir = debugfs_create_dir("ieee80211", NULL);
1543
1544        err = regulatory_init();
1545        if (err)
1546                goto out_fail_reg;
1547
1548        cfg80211_wq = alloc_ordered_workqueue("cfg80211", WQ_MEM_RECLAIM);
1549        if (!cfg80211_wq) {
1550                err = -ENOMEM;
1551                goto out_fail_wq;
1552        }
1553
1554        return 0;
1555
1556out_fail_wq:
1557        regulatory_exit();
1558out_fail_reg:
1559        debugfs_remove(ieee80211_debugfs_dir);
1560        nl80211_exit();
1561out_fail_nl80211:
1562        unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1563out_fail_notifier:
1564        wiphy_sysfs_exit();
1565out_fail_sysfs:
1566        unregister_pernet_device(&cfg80211_pernet_ops);
1567out_fail_pernet:
1568        return err;
1569}
1570fs_initcall(cfg80211_init);
1571
1572static void __exit cfg80211_exit(void)
1573{
1574        debugfs_remove(ieee80211_debugfs_dir);
1575        nl80211_exit();
1576        unregister_netdevice_notifier(&cfg80211_netdev_notifier);
1577        wiphy_sysfs_exit();
1578        regulatory_exit();
1579        unregister_pernet_device(&cfg80211_pernet_ops);
1580        destroy_workqueue(cfg80211_wq);
1581}
1582module_exit(cfg80211_exit);
1583