From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [ath:ath-next 24/34] net/wireless/nl80211.c:4433 nl80211_set_wiphy() warn: iterator used outside loop: 'wdev'
Date: Wed, 14 Oct 2026 05:47:16 +0200 [thread overview]
Message-ID: <202610140518.ynVDJha8-lkp@intel.com> (raw)
Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: Jeff Johnson <jjohnson@kernel.org>
CC: ath12k@lists.infradead.org
TO: Johannes Berg <johannes.berg@intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/ath/ath.git ath-next
head: cd026e68fdbf88b9cc522b76c7a9d92c9a41f709
commit: ef27674b8471b5d1c80fe5ebfaa4f2b07dfb1096 [24/34] wifi: cfg80211: protect wiphy names with cfg80211_mutex
:::::: branch date: 16 hours ago
:::::: commit date: 16 hours ago
config: sparc-randconfig-r2200-20261013 (https://download.01.org/0day-ci/archive/20261014/202610140518.ynVDJha8-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 14.3.0
smatch: v0.5.0-9187-g5189e3fb
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202610140518.ynVDJha8-lkp@intel.com/
New smatch warnings:
net/wireless/nl80211.c:4433 nl80211_set_wiphy() warn: iterator used outside loop: 'wdev'
Old smatch warnings:
net/wireless/nl80211.c:4915 nl80211_send_iface() error: we previously assumed 'rdev->ops->get_channel' could be null (see line 4838)
net/wireless/nl80211.c:9136 nl80211_dump_station() warn: 'wdev' is an error pointer or valid
net/wireless/nl80211.c:9137 nl80211_dump_station() error: 'wdev' dereferencing possible ERR_PTR()
net/wireless/nl80211.c:20272 nl80211_pre_doit() error: 'wdev' dereferencing possible ERR_PTR()
vim +/wdev +4433 net/wireless/nl80211.c
264637941cf45c Roopni Devanathan 2025-06-15 4370
556829657397b9 Johannes Berg 2007-09-20 4371 static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
556829657397b9 Johannes Berg 2007-09-20 4372 {
a05829a7222e9d Johannes Berg 2021-01-22 4373 struct cfg80211_registered_device *rdev = NULL;
f444de05d20e27 Johannes Berg 2010-05-05 4374 struct net_device *netdev = NULL;
ef27674b8471b5 Johannes Berg 2026-10-11 4375 struct wireless_dev *wdev = NULL;
a1e567c83f5414 Bill Jordan 2010-09-10 4376 int result = 0, rem_txq_params = 0;
318884875bdddc Jouni Malinen 2008-10-30 4377 struct nlattr *nl_txq_params;
ef27674b8471b5 Johannes Berg 2026-10-11 4378 u32 changed, wdev_id = 0;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4379 u8 retry_short = 0, retry_long = 0;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4380 u32 frag_threshold = 0, rts_threshold = 0;
81077e82c3f591 Lukáš Turek 2009-12-21 4381 u8 coverage_class = 0;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4382 u32 txq_limit = 0, txq_memory_limit = 0, txq_quantum = 0;
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4383 int radio_idx = -1;
556829657397b9 Johannes Berg 2007-09-20 4384
ef27674b8471b5 Johannes Berg 2026-10-11 4385 /* keeps the wiphy registered and its netns stable */
ef27674b8471b5 Johannes Berg 2026-10-11 4386 mutex_lock(&cfg80211_mutex);
f444de05d20e27 Johannes Berg 2010-05-05 4387 /*
f444de05d20e27 Johannes Berg 2010-05-05 4388 * Try to find the wiphy and netdev. Normally this
f444de05d20e27 Johannes Berg 2010-05-05 4389 * function shouldn't need the netdev, but this is
f444de05d20e27 Johannes Berg 2010-05-05 4390 * done for backward compatibility -- previously
f444de05d20e27 Johannes Berg 2010-05-05 4391 * setting the channel was done per wiphy, but now
f444de05d20e27 Johannes Berg 2010-05-05 4392 * it is per netdev. Previous userland like hostapd
f444de05d20e27 Johannes Berg 2010-05-05 4393 * also passed a netdev to set_wiphy, so that it is
f444de05d20e27 Johannes Berg 2010-05-05 4394 * possible to let that go to the right netdev!
f444de05d20e27 Johannes Berg 2010-05-05 4395 */
4bbf4d56583dd5 Johannes Berg 2009-03-24 4396
f444de05d20e27 Johannes Berg 2010-05-05 4397 if (info->attrs[NL80211_ATTR_IFINDEX]) {
f444de05d20e27 Johannes Berg 2010-05-05 4398 int ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]);
f444de05d20e27 Johannes Berg 2010-05-05 4399
ef27674b8471b5 Johannes Berg 2026-10-11 4400 rcu_read_lock();
ef27674b8471b5 Johannes Berg 2026-10-11 4401 netdev = dev_get_by_index_rcu(genl_info_net(info), ifindex);
ef27674b8471b5 Johannes Berg 2026-10-11 4402 if (netdev && netdev->ieee80211_ptr) {
f26cbf401be935 Zhao, Gang 2014-04-21 4403 rdev = wiphy_to_rdev(netdev->ieee80211_ptr->wiphy);
ef27674b8471b5 Johannes Berg 2026-10-11 4404 wdev_id = netdev->ieee80211_ptr->identifier;
ef27674b8471b5 Johannes Berg 2026-10-11 4405 }
ef27674b8471b5 Johannes Berg 2026-10-11 4406 rcu_read_unlock();
f444de05d20e27 Johannes Berg 2010-05-05 4407 }
f444de05d20e27 Johannes Berg 2010-05-05 4408
ef27674b8471b5 Johannes Berg 2026-10-11 4409 if (!rdev) {
ef27674b8471b5 Johannes Berg 2026-10-11 4410 /* RCU for the wdev list walk, cfg80211_mutex keeps rdev */
ef27674b8471b5 Johannes Berg 2026-10-11 4411 rcu_read_lock();
878d9ec7367816 Johannes Berg 2012-06-15 4412 rdev = __cfg80211_rdev_from_attrs(genl_info_net(info),
878d9ec7367816 Johannes Berg 2012-06-15 4413 info->attrs);
ef27674b8471b5 Johannes Berg 2026-10-11 4414 rcu_read_unlock();
a05829a7222e9d Johannes Berg 2021-01-22 4415 if (IS_ERR(rdev)) {
ef27674b8471b5 Johannes Berg 2026-10-11 4416 mutex_unlock(&cfg80211_mutex);
4c476991062a0a Johannes Berg 2010-10-04 4417 return PTR_ERR(rdev);
a05829a7222e9d Johannes Berg 2021-01-22 4418 }
ef27674b8471b5 Johannes Berg 2026-10-11 4419 }
f444de05d20e27 Johannes Berg 2010-05-05 4420
f42d22d3f79639 Johannes Berg 2024-11-22 4421 guard(wiphy)(&rdev->wiphy);
a05829a7222e9d Johannes Berg 2021-01-22 4422
ef27674b8471b5 Johannes Berg 2026-10-11 4423 /* the netdev may have been unregistered after the lookup */
ef27674b8471b5 Johannes Berg 2026-10-11 4424 if (wdev_id) {
ef27674b8471b5 Johannes Berg 2026-10-11 4425 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
ef27674b8471b5 Johannes Berg 2026-10-11 4426 if (wdev->identifier == wdev_id)
ef27674b8471b5 Johannes Berg 2026-10-11 4427 break;
ef27674b8471b5 Johannes Berg 2026-10-11 4428 }
ef27674b8471b5 Johannes Berg 2026-10-11 4429 if (list_entry_is_head(wdev, &rdev->wiphy.wdev_list, list)) {
ef27674b8471b5 Johannes Berg 2026-10-11 4430 mutex_unlock(&cfg80211_mutex);
ef27674b8471b5 Johannes Berg 2026-10-11 4431 return -ENODEV;
ef27674b8471b5 Johannes Berg 2026-10-11 4432 }
ef27674b8471b5 Johannes Berg 2026-10-11 @4433 netdev = wdev->netdev;
ef27674b8471b5 Johannes Berg 2026-10-11 4434 } else {
ef27674b8471b5 Johannes Berg 2026-10-11 4435 netdev = NULL;
ef27674b8471b5 Johannes Berg 2026-10-11 4436 }
ef27674b8471b5 Johannes Berg 2026-10-11 4437
f444de05d20e27 Johannes Berg 2010-05-05 4438 /*
f444de05d20e27 Johannes Berg 2010-05-05 4439 * end workaround code, by now the rdev is available
f444de05d20e27 Johannes Berg 2010-05-05 4440 * and locked, and wdev may or may not be NULL.
f444de05d20e27 Johannes Berg 2010-05-05 4441 */
4bbf4d56583dd5 Johannes Berg 2009-03-24 4442
4bbf4d56583dd5 Johannes Berg 2009-03-24 4443 if (info->attrs[NL80211_ATTR_WIPHY_NAME])
318884875bdddc Jouni Malinen 2008-10-30 4444 result = cfg80211_dev_rename(
318884875bdddc Jouni Malinen 2008-10-30 4445 rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME]));
ef27674b8471b5 Johannes Berg 2026-10-11 4446 mutex_unlock(&cfg80211_mutex);
4bbf4d56583dd5 Johannes Berg 2009-03-24 4447
318884875bdddc Jouni Malinen 2008-10-30 4448 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4449 return result;
318884875bdddc Jouni Malinen 2008-10-30 4450
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4451 if (info->attrs[NL80211_ATTR_WIPHY_RADIO_INDEX]) {
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4452 /* Radio idx is not expected for non-multi radio wiphy */
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4453 if (rdev->wiphy.n_radio <= 0)
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4454 return -EINVAL;
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4455
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4456 radio_idx = nla_get_u8(
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4457 info->attrs[NL80211_ATTR_WIPHY_RADIO_INDEX]);
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4458 if (radio_idx >= rdev->wiphy.n_radio)
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4459 return -EINVAL;
264637941cf45c Roopni Devanathan 2025-06-15 4460
264637941cf45c Roopni Devanathan 2025-06-15 4461 return nl80211_set_wiphy_radio(info, rdev, radio_idx);
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4462 }
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4463
318884875bdddc Jouni Malinen 2008-10-30 4464 if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) {
318884875bdddc Jouni Malinen 2008-10-30 4465 struct ieee80211_txq_params txq_params;
318884875bdddc Jouni Malinen 2008-10-30 4466 struct nlattr *tb[NL80211_TXQ_ATTR_MAX + 1];
318884875bdddc Jouni Malinen 2008-10-30 4467
f42d22d3f79639 Johannes Berg 2024-11-22 4468 if (!rdev->ops->set_txq_params)
f42d22d3f79639 Johannes Berg 2024-11-22 4469 return -EOPNOTSUPP;
318884875bdddc Jouni Malinen 2008-10-30 4470
f42d22d3f79639 Johannes Berg 2024-11-22 4471 if (!netdev)
f42d22d3f79639 Johannes Berg 2024-11-22 4472 return -EINVAL;
f70f01c2ebbe31 Eliad Peller 2011-09-25 4473
133a3ff2c93422 Johannes Berg 2011-11-03 4474 if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
f42d22d3f79639 Johannes Berg 2024-11-22 4475 netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
f42d22d3f79639 Johannes Berg 2024-11-22 4476 return -EINVAL;
133a3ff2c93422 Johannes Berg 2011-11-03 4477
f42d22d3f79639 Johannes Berg 2024-11-22 4478 if (!netif_running(netdev))
f42d22d3f79639 Johannes Berg 2024-11-22 4479 return -ENETDOWN;
2b5f8b0b44e17e Johannes Berg 2012-04-02 4480
318884875bdddc Jouni Malinen 2008-10-30 4481 nla_for_each_nested(nl_txq_params,
318884875bdddc Jouni Malinen 2008-10-30 4482 info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS],
318884875bdddc Jouni Malinen 2008-10-30 4483 rem_txq_params) {
8cb081746c031f Johannes Berg 2019-04-26 4484 result = nla_parse_nested_deprecated(tb,
8cb081746c031f Johannes Berg 2019-04-26 4485 NL80211_TXQ_ATTR_MAX,
bfe2c7b1cce4a1 Johannes Berg 2016-10-26 4486 nl_txq_params,
fe52145f91fe81 Johannes Berg 2017-04-12 4487 txq_params_policy,
fe52145f91fe81 Johannes Berg 2017-04-12 4488 info->extack);
ae811e21df28de Johannes Berg 2014-01-24 4489 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4490 return result;
f42d22d3f79639 Johannes Berg 2024-11-22 4491
318884875bdddc Jouni Malinen 2008-10-30 4492 result = parse_txq_params(tb, &txq_params);
318884875bdddc Jouni Malinen 2008-10-30 4493 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4494 return result;
318884875bdddc Jouni Malinen 2008-10-30 4495
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4496 txq_params.link_id =
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4497 nl80211_link_id_or_invalid(info->attrs);
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4498
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4499 if (txq_params.link_id >= 0 &&
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4500 !(netdev->ieee80211_ptr->valid_links &
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4501 BIT(txq_params.link_id)))
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4502 result = -ENOLINK;
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4503 else if (txq_params.link_id >= 0 &&
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4504 !netdev->ieee80211_ptr->valid_links)
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4505 result = -EINVAL;
9d2bb84d54a403 Shaul Triebitz 2022-08-02 4506 else
e35e4d28b687d4 Hila Gonen 2012-06-27 4507 result = rdev_set_txq_params(rdev, netdev,
318884875bdddc Jouni Malinen 2008-10-30 4508 &txq_params);
318884875bdddc Jouni Malinen 2008-10-30 4509 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4510 return result;
318884875bdddc Jouni Malinen 2008-10-30 4511 }
318884875bdddc Jouni Malinen 2008-10-30 4512 }
556829657397b9 Johannes Berg 2007-09-20 4513
72bdcf34380917 Jouni Malinen 2008-11-26 4514 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
69c3f2d30c3576 Ilan Peer 2022-06-12 4515 int link_id = nl80211_link_id_or_invalid(info->attrs);
69c3f2d30c3576 Ilan Peer 2022-06-12 4516
4e2f3d67e3afef Johannes Berg 2022-06-20 4517 if (wdev) {
e16821bcfb364b Jouni Malinen 2014-04-28 4518 result = __nl80211_set_channel(
e16821bcfb364b Jouni Malinen 2014-04-28 4519 rdev,
e16821bcfb364b Jouni Malinen 2014-04-28 4520 nl80211_can_set_dev_channel(wdev) ? netdev : NULL,
69c3f2d30c3576 Ilan Peer 2022-06-12 4521 info, link_id);
4e2f3d67e3afef Johannes Berg 2022-06-20 4522 } else {
69c3f2d30c3576 Ilan Peer 2022-06-12 4523 result = __nl80211_set_channel(rdev, netdev, info, link_id);
4e2f3d67e3afef Johannes Berg 2022-06-20 4524 }
69c3f2d30c3576 Ilan Peer 2022-06-12 4525
72bdcf34380917 Jouni Malinen 2008-11-26 4526 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4527 return result;
72bdcf34380917 Jouni Malinen 2008-11-26 4528 }
72bdcf34380917 Jouni Malinen 2008-11-26 4529
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4530 if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) {
c8442118ad9cd0 Johannes Berg 2012-10-24 4531 struct wireless_dev *txp_wdev = wdev;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4532 enum nl80211_tx_power_setting type;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4533 int idx, mbm = 0;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4534
c8442118ad9cd0 Johannes Berg 2012-10-24 4535 if (!(rdev->wiphy.features & NL80211_FEATURE_VIF_TXPOWER))
c8442118ad9cd0 Johannes Berg 2012-10-24 4536 txp_wdev = NULL;
c8442118ad9cd0 Johannes Berg 2012-10-24 4537
f42d22d3f79639 Johannes Berg 2024-11-22 4538 if (!rdev->ops->set_tx_power)
f42d22d3f79639 Johannes Berg 2024-11-22 4539 return -EOPNOTSUPP;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4540
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4541 idx = NL80211_ATTR_WIPHY_TX_POWER_SETTING;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4542 type = nla_get_u32(info->attrs[idx]);
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4543
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4544 if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] &&
f42d22d3f79639 Johannes Berg 2024-11-22 4545 (type != NL80211_TX_POWER_AUTOMATIC))
f42d22d3f79639 Johannes Berg 2024-11-22 4546 return -EINVAL;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4547
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4548 if (type != NL80211_TX_POWER_AUTOMATIC) {
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4549 idx = NL80211_ATTR_WIPHY_TX_POWER_LEVEL;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4550 mbm = nla_get_u32(info->attrs[idx]);
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4551 }
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4552
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4553 result = rdev_set_tx_power(rdev, txp_wdev, radio_idx, type,
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4554 mbm);
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4555 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4556 return result;
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4557 }
98d2ff8bec82fc Juuso Oikarinen 2010-06-23 4558
afe0cbf87500f0 Bruno Randolf 2010-11-10 4559 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] &&
afe0cbf87500f0 Bruno Randolf 2010-11-10 4560 info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) {
afe0cbf87500f0 Bruno Randolf 2010-11-10 4561 u32 tx_ant, rx_ant;
7a087e7484c9e4 Kirtika Ruchandani 2016-05-29 4562
7f531e03abf016 Bruno Randolf 2010-12-16 4563 if ((!rdev->wiphy.available_antennas_tx &&
7f531e03abf016 Bruno Randolf 2010-12-16 4564 !rdev->wiphy.available_antennas_rx) ||
f42d22d3f79639 Johannes Berg 2024-11-22 4565 !rdev->ops->set_antenna)
f42d22d3f79639 Johannes Berg 2024-11-22 4566 return -EOPNOTSUPP;
afe0cbf87500f0 Bruno Randolf 2010-11-10 4567
afe0cbf87500f0 Bruno Randolf 2010-11-10 4568 tx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX]);
afe0cbf87500f0 Bruno Randolf 2010-11-10 4569 rx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]);
afe0cbf87500f0 Bruno Randolf 2010-11-10 4570
a7ffac9591a2a0 Bruno Randolf 2010-12-08 4571 /* reject antenna configurations which don't match the
7f531e03abf016 Bruno Randolf 2010-12-16 4572 * available antenna masks, except for the "all" mask */
7f531e03abf016 Bruno Randolf 2010-12-16 4573 if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) ||
f42d22d3f79639 Johannes Berg 2024-11-22 4574 (~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas_rx)))
f42d22d3f79639 Johannes Berg 2024-11-22 4575 return -EINVAL;
a7ffac9591a2a0 Bruno Randolf 2010-12-08 4576
7f531e03abf016 Bruno Randolf 2010-12-16 4577 tx_ant = tx_ant & rdev->wiphy.available_antennas_tx;
7f531e03abf016 Bruno Randolf 2010-12-16 4578 rx_ant = rx_ant & rdev->wiphy.available_antennas_rx;
a7ffac9591a2a0 Bruno Randolf 2010-12-08 4579
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4580 result = rdev_set_antenna(rdev, radio_idx, tx_ant, rx_ant);
afe0cbf87500f0 Bruno Randolf 2010-11-10 4581 if (result)
f42d22d3f79639 Johannes Berg 2024-11-22 4582 return result;
afe0cbf87500f0 Bruno Randolf 2010-11-10 4583 }
afe0cbf87500f0 Bruno Randolf 2010-11-10 4584
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4585 changed = 0;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4586
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4587 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4588 retry_short = nla_get_u8(
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4589 info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]);
7f2b8562c2ee6e Ying Xue 2014-01-15 4590
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4591 changed |= WIPHY_PARAM_RETRY_SHORT;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4592 }
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4593
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4594 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4595 retry_long = nla_get_u8(
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4596 info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]);
7f2b8562c2ee6e Ying Xue 2014-01-15 4597
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4598 changed |= WIPHY_PARAM_RETRY_LONG;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4599 }
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4600
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4601 if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4602 frag_threshold = nla_get_u32(
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4603 info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]);
f42d22d3f79639 Johannes Berg 2024-11-22 4604 if (frag_threshold < 256)
f42d22d3f79639 Johannes Berg 2024-11-22 4605 return -EINVAL;
7f2b8562c2ee6e Ying Xue 2014-01-15 4606
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4607 if (frag_threshold != (u32) -1) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4608 /*
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4609 * Fragments (apart from the last one) are required to
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4610 * have even length. Make the fragmentation code
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4611 * simpler by stripping LSB should someone try to use
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4612 * odd threshold value.
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4613 */
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4614 frag_threshold &= ~0x1;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4615 }
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4616 changed |= WIPHY_PARAM_FRAG_THRESHOLD;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4617 }
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4618
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4619 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4620 rts_threshold = nla_get_u32(
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4621 info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]);
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4622 changed |= WIPHY_PARAM_RTS_THRESHOLD;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4623 }
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4624
81077e82c3f591 Lukáš Turek 2009-12-21 4625 if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) {
f42d22d3f79639 Johannes Berg 2024-11-22 4626 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK])
f42d22d3f79639 Johannes Berg 2024-11-22 4627 return -EINVAL;
3057dbfdab1b86 Lorenzo Bianconi 2014-09-04 4628
81077e82c3f591 Lukáš Turek 2009-12-21 4629 coverage_class = nla_get_u8(
81077e82c3f591 Lukáš Turek 2009-12-21 4630 info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]);
81077e82c3f591 Lukáš Turek 2009-12-21 4631 changed |= WIPHY_PARAM_COVERAGE_CLASS;
81077e82c3f591 Lukáš Turek 2009-12-21 4632 }
81077e82c3f591 Lukáš Turek 2009-12-21 4633
3057dbfdab1b86 Lorenzo Bianconi 2014-09-04 4634 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) {
f42d22d3f79639 Johannes Berg 2024-11-22 4635 if (!(rdev->wiphy.features & NL80211_FEATURE_ACKTO_ESTIMATION))
f42d22d3f79639 Johannes Berg 2024-11-22 4636 return -EOPNOTSUPP;
3057dbfdab1b86 Lorenzo Bianconi 2014-09-04 4637
3057dbfdab1b86 Lorenzo Bianconi 2014-09-04 4638 changed |= WIPHY_PARAM_DYN_ACK;
81077e82c3f591 Lukáš Turek 2009-12-21 4639 }
81077e82c3f591 Lukáš Turek 2009-12-21 4640
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4641 if (info->attrs[NL80211_ATTR_TXQ_LIMIT]) {
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4642 if (!wiphy_ext_feature_isset(&rdev->wiphy,
f42d22d3f79639 Johannes Berg 2024-11-22 4643 NL80211_EXT_FEATURE_TXQS))
f42d22d3f79639 Johannes Berg 2024-11-22 4644 return -EOPNOTSUPP;
f42d22d3f79639 Johannes Berg 2024-11-22 4645
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4646 txq_limit = nla_get_u32(
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4647 info->attrs[NL80211_ATTR_TXQ_LIMIT]);
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4648 changed |= WIPHY_PARAM_TXQ_LIMIT;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4649 }
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4650
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4651 if (info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]) {
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4652 if (!wiphy_ext_feature_isset(&rdev->wiphy,
f42d22d3f79639 Johannes Berg 2024-11-22 4653 NL80211_EXT_FEATURE_TXQS))
f42d22d3f79639 Johannes Berg 2024-11-22 4654 return -EOPNOTSUPP;
f42d22d3f79639 Johannes Berg 2024-11-22 4655
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4656 txq_memory_limit = nla_get_u32(
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4657 info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]);
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4658 changed |= WIPHY_PARAM_TXQ_MEMORY_LIMIT;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4659 }
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4660
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4661 if (info->attrs[NL80211_ATTR_TXQ_QUANTUM]) {
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4662 if (!wiphy_ext_feature_isset(&rdev->wiphy,
f42d22d3f79639 Johannes Berg 2024-11-22 4663 NL80211_EXT_FEATURE_TXQS))
f42d22d3f79639 Johannes Berg 2024-11-22 4664 return -EOPNOTSUPP;
f42d22d3f79639 Johannes Berg 2024-11-22 4665
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4666 txq_quantum = nla_get_u32(
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4667 info->attrs[NL80211_ATTR_TXQ_QUANTUM]);
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4668 changed |= WIPHY_PARAM_TXQ_QUANTUM;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4669 }
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4670
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4671 if (changed) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4672 u8 old_retry_short, old_retry_long;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4673 u32 old_frag_threshold, old_rts_threshold;
264637941cf45c Roopni Devanathan 2025-06-15 4674 u8 old_coverage_class, i;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4675 u32 old_txq_limit, old_txq_memory_limit, old_txq_quantum;
264637941cf45c Roopni Devanathan 2025-06-15 4676 u32 *old_radio_rts_threshold = NULL;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4677
f42d22d3f79639 Johannes Berg 2024-11-22 4678 if (!rdev->ops->set_wiphy_params)
f42d22d3f79639 Johannes Berg 2024-11-22 4679 return -EOPNOTSUPP;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4680
264637941cf45c Roopni Devanathan 2025-06-15 4681 if (rdev->wiphy.n_radio) {
264637941cf45c Roopni Devanathan 2025-06-15 4682 old_radio_rts_threshold = kcalloc(rdev->wiphy.n_radio,
264637941cf45c Roopni Devanathan 2025-06-15 4683 sizeof(u32),
264637941cf45c Roopni Devanathan 2025-06-15 4684 GFP_KERNEL);
264637941cf45c Roopni Devanathan 2025-06-15 4685 if (!old_radio_rts_threshold)
264637941cf45c Roopni Devanathan 2025-06-15 4686 return -ENOMEM;
264637941cf45c Roopni Devanathan 2025-06-15 4687 }
264637941cf45c Roopni Devanathan 2025-06-15 4688
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4689 old_retry_short = rdev->wiphy.retry_short;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4690 old_retry_long = rdev->wiphy.retry_long;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4691 old_frag_threshold = rdev->wiphy.frag_threshold;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4692 old_rts_threshold = rdev->wiphy.rts_threshold;
264637941cf45c Roopni Devanathan 2025-06-15 4693 if (old_radio_rts_threshold) {
264637941cf45c Roopni Devanathan 2025-06-15 4694 for (i = 0 ; i < rdev->wiphy.n_radio; i++)
264637941cf45c Roopni Devanathan 2025-06-15 4695 old_radio_rts_threshold[i] =
264637941cf45c Roopni Devanathan 2025-06-15 4696 rdev->wiphy.radio_cfg[i].rts_threshold;
264637941cf45c Roopni Devanathan 2025-06-15 4697 }
81077e82c3f591 Lukáš Turek 2009-12-21 4698 old_coverage_class = rdev->wiphy.coverage_class;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4699 old_txq_limit = rdev->wiphy.txq_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4700 old_txq_memory_limit = rdev->wiphy.txq_memory_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4701 old_txq_quantum = rdev->wiphy.txq_quantum;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4702
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4703 if (changed & WIPHY_PARAM_RETRY_SHORT)
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4704 rdev->wiphy.retry_short = retry_short;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4705 if (changed & WIPHY_PARAM_RETRY_LONG)
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4706 rdev->wiphy.retry_long = retry_long;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4707 if (changed & WIPHY_PARAM_FRAG_THRESHOLD)
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4708 rdev->wiphy.frag_threshold = frag_threshold;
9eda41e3226380 Stanislaw Gruszka 2026-09-19 4709 if (changed & WIPHY_PARAM_RTS_THRESHOLD) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4710 rdev->wiphy.rts_threshold = rts_threshold;
9eda41e3226380 Stanislaw Gruszka 2026-09-19 4711 if (old_radio_rts_threshold) {
264637941cf45c Roopni Devanathan 2025-06-15 4712 for (i = 0; i < rdev->wiphy.n_radio; i++)
264637941cf45c Roopni Devanathan 2025-06-15 4713 rdev->wiphy.radio_cfg[i].rts_threshold =
264637941cf45c Roopni Devanathan 2025-06-15 4714 rdev->wiphy.rts_threshold;
264637941cf45c Roopni Devanathan 2025-06-15 4715 }
9eda41e3226380 Stanislaw Gruszka 2026-09-19 4716 }
81077e82c3f591 Lukáš Turek 2009-12-21 4717 if (changed & WIPHY_PARAM_COVERAGE_CLASS)
81077e82c3f591 Lukáš Turek 2009-12-21 4718 rdev->wiphy.coverage_class = coverage_class;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4719 if (changed & WIPHY_PARAM_TXQ_LIMIT)
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4720 rdev->wiphy.txq_limit = txq_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4721 if (changed & WIPHY_PARAM_TXQ_MEMORY_LIMIT)
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4722 rdev->wiphy.txq_memory_limit = txq_memory_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4723 if (changed & WIPHY_PARAM_TXQ_QUANTUM)
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4724 rdev->wiphy.txq_quantum = txq_quantum;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4725
b74947b4f6ff7c Roopni Devanathan 2025-06-15 4726 result = rdev_set_wiphy_params(rdev, radio_idx, changed);
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4727 if (result) {
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4728 rdev->wiphy.retry_short = old_retry_short;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4729 rdev->wiphy.retry_long = old_retry_long;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4730 rdev->wiphy.frag_threshold = old_frag_threshold;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4731 rdev->wiphy.rts_threshold = old_rts_threshold;
264637941cf45c Roopni Devanathan 2025-06-15 4732 if (old_radio_rts_threshold) {
264637941cf45c Roopni Devanathan 2025-06-15 4733 for (i = 0 ; i < rdev->wiphy.n_radio; i++)
264637941cf45c Roopni Devanathan 2025-06-15 4734 rdev->wiphy.radio_cfg[i].rts_threshold =
264637941cf45c Roopni Devanathan 2025-06-15 4735 old_radio_rts_threshold[i];
264637941cf45c Roopni Devanathan 2025-06-15 4736 }
81077e82c3f591 Lukáš Turek 2009-12-21 4737 rdev->wiphy.coverage_class = old_coverage_class;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4738 rdev->wiphy.txq_limit = old_txq_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4739 rdev->wiphy.txq_memory_limit = old_txq_memory_limit;
52539ca89f365d Toke Høiland-Jørgensen 2018-05-08 4740 rdev->wiphy.txq_quantum = old_txq_quantum;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4741 }
264637941cf45c Roopni Devanathan 2025-06-15 4742
264637941cf45c Roopni Devanathan 2025-06-15 4743 kfree(old_radio_rts_threshold);
264637941cf45c Roopni Devanathan 2025-06-15 4744 return result;
b9a5f8cab751d3 Jouni Malinen 2009-04-20 4745 }
a05829a7222e9d Johannes Berg 2021-01-22 4746
f42d22d3f79639 Johannes Berg 2024-11-22 4747 return 0;
556829657397b9 Johannes Berg 2007-09-20 4748 }
556829657397b9 Johannes Berg 2007-09-20 4749
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-10-14 3:48 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202610140518.ynVDJha8-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.