Hi Jiri, I love your patch! Perhaps something to improve: [auto build test WARNING on wireless-next/main] [also build test WARNING on wireless/main jberg-mac80211-next/master jberg-mac80211/master v5.17-rc4 next-20220215] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Jiri-Kosina/mac80211-fix-RCU-usage-in-ieee80211_tx_h_select_key/20220215-234935 base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main config: i386-randconfig-s002-20220214 (https://download.01.org/0day-ci/archive/20220216/202202160406.p1c7XduC-lkp@xxxxxxxxx/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/cdfe17d7fc283e125686bdd9a6bbc6fd60909bd7 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Jiri-Kosina/mac80211-fix-RCU-usage-in-ieee80211_tx_h_select_key/20220215-234935 git checkout cdfe17d7fc283e125686bdd9a6bbc6fd60909bd7 # save the config file to linux build tree mkdir build_dir make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash net/mac80211/ If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> sparse warnings: (new ones prefixed by >>) >> net/mac80211/tx.c:652:29: sparse: sparse: incorrect type in assignment (different base types) @@ expected int ret @@ got restricted ieee80211_tx_result [usertype] @@ net/mac80211/tx.c:652:29: sparse: expected int ret net/mac80211/tx.c:652:29: sparse: got restricted ieee80211_tx_result [usertype] net/mac80211/tx.c:661:21: sparse: sparse: incorrect type in assignment (different base types) @@ expected int ret @@ got restricted ieee80211_tx_result [usertype] @@ net/mac80211/tx.c:661:21: sparse: expected int ret net/mac80211/tx.c:661:21: sparse: got restricted ieee80211_tx_result [usertype] net/mac80211/tx.c:664:13: sparse: sparse: incorrect type in assignment (different base types) @@ expected int ret @@ got restricted ieee80211_tx_result [usertype] @@ net/mac80211/tx.c:664:13: sparse: expected int ret net/mac80211/tx.c:664:13: sparse: got restricted ieee80211_tx_result [usertype] >> net/mac80211/tx.c:667:16: sparse: sparse: incorrect type in return expression (different base types) @@ expected restricted ieee80211_tx_result @@ got int ret @@ net/mac80211/tx.c:667:16: sparse: expected restricted ieee80211_tx_result net/mac80211/tx.c:667:16: sparse: got int ret vim +652 net/mac80211/tx.c 579 580 static ieee80211_tx_result debug_noinline 581 ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx) 582 { 583 int ret; 584 struct ieee80211_key *key; 585 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); 586 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; 587 588 if (unlikely(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT)) { 589 tx->key = NULL; 590 return TX_CONTINUE; 591 } 592 593 rcu_read_lock(); 594 595 if (tx->sta && 596 (key = rcu_dereference(tx->sta->ptk[tx->sta->ptk_idx]))) 597 tx->key = key; 598 else if (ieee80211_is_group_privacy_action(tx->skb) && 599 (key = rcu_dereference(tx->sdata->default_multicast_key))) 600 tx->key = key; 601 else if (ieee80211_is_mgmt(hdr->frame_control) && 602 is_multicast_ether_addr(hdr->addr1) && 603 ieee80211_is_robust_mgmt_frame(tx->skb) && 604 (key = rcu_dereference(tx->sdata->default_mgmt_key))) 605 tx->key = key; 606 else if (is_multicast_ether_addr(hdr->addr1) && 607 (key = rcu_dereference(tx->sdata->default_multicast_key))) 608 tx->key = key; 609 else if (!is_multicast_ether_addr(hdr->addr1) && 610 (key = rcu_dereference(tx->sdata->default_unicast_key))) 611 tx->key = key; 612 else 613 tx->key = NULL; 614 615 if (tx->key) { 616 bool skip_hw = false; 617 618 /* TODO: add threshold stuff again */ 619 620 switch (tx->key->conf.cipher) { 621 case WLAN_CIPHER_SUITE_WEP40: 622 case WLAN_CIPHER_SUITE_WEP104: 623 case WLAN_CIPHER_SUITE_TKIP: 624 if (!ieee80211_is_data_present(hdr->frame_control)) 625 tx->key = NULL; 626 break; 627 case WLAN_CIPHER_SUITE_CCMP: 628 case WLAN_CIPHER_SUITE_CCMP_256: 629 case WLAN_CIPHER_SUITE_GCMP: 630 case WLAN_CIPHER_SUITE_GCMP_256: 631 if (!ieee80211_is_data_present(hdr->frame_control) && 632 !ieee80211_use_mfp(hdr->frame_control, tx->sta, 633 tx->skb) && 634 !ieee80211_is_group_privacy_action(tx->skb)) 635 tx->key = NULL; 636 else 637 skip_hw = (tx->key->conf.flags & 638 IEEE80211_KEY_FLAG_SW_MGMT_TX) && 639 ieee80211_is_mgmt(hdr->frame_control); 640 break; 641 case WLAN_CIPHER_SUITE_AES_CMAC: 642 case WLAN_CIPHER_SUITE_BIP_CMAC_256: 643 case WLAN_CIPHER_SUITE_BIP_GMAC_128: 644 case WLAN_CIPHER_SUITE_BIP_GMAC_256: 645 if (!ieee80211_is_mgmt(hdr->frame_control)) 646 tx->key = NULL; 647 break; 648 } 649 650 if (unlikely(tx->key && tx->key->flags & KEY_FLAG_TAINTED && 651 !ieee80211_is_deauth(hdr->frame_control))) { > 652 ret = TX_DROP; 653 goto out; 654 } 655 656 if (!skip_hw && tx->key && 657 tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) 658 info->control.hw_key = &tx->key->conf; 659 } else if (ieee80211_is_data_present(hdr->frame_control) && tx->sta && 660 test_sta_flag(tx->sta, WLAN_STA_USES_ENCRYPTION)) { 661 ret = TX_DROP; 662 goto out; 663 } 664 ret = TX_CONTINUE; 665 out: 666 rcu_read_unlock(); > 667 return ret; 668 } 669 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx