Public bug reported:

On
Linux wittgenstein 5.8.0-33-generic #36-Ubuntu SMP Wed Dec 9 09:14:40 UTC 2020 
x86_64 x86_64 x86_64 GNU/Linux

Distributor ID: Ubuntu
Description:    Ubuntu 20.10
Release:        20.10
Codename:       groovy

iwd manages to trigger the following warn:

[   47.003606] NET: Registered protocol family 38
[   47.306287] ------------[ cut here ]------------
[   47.306318] WARNING: CPU: 1 PID: 1143 at net/wireless/nl80211.c:7288 
nl80211_get_reg_do+0x1fc/0x230 [cfg80211]
[   47.306318] Modules linked in: ccm algif_aead des_generic libdes arc4 
algif_skcipher cmac md4 algif_hash af_alg binfmt_misc zfs(PO) zunicode(PO) 
zavl(PO) icp(PO) nls_iso8859_1 zcommon(PO) znvpair(PO) spl(O) zlua(PO) 
snd_hda_codec_hdmi x86_pkg_temp_thermal snd_hda_codec_realtek intel_powerclamp 
snd_hda_codec_generic coretemp snd_hda_intel iwlmvm snd_intel_dspcfg mac80211 
snd_hda_codec kvm_intel typec_displayport snd_hda_core kvm snd_hwdep snd_pcm 
joydev mei_hdcp libarc4 thinkpad_acpi nvram intel_rapl_msr ledtrig_audio 
snd_seq_midi rapl snd_seq_midi_event snd_rawmidi intel_cstate input_leds 
serio_raw uvcvideo snd_seq efi_pstore iwlwifi rmi_smbus btusb rmi_core btrtl 
snd_seq_device btbcm snd_timer videobuf2_vmalloc btintel videobuf2_memops 
videobuf2_v4l2 bluetooth videobuf2_common snd wmi_bmof intel_wmi_thunderbolt 
videodev ucsi_acpi cfg80211 processor_thermal_device typec_ucsi 
intel_xhci_usb_role_switch mc roles ecdh_generic int3400_thermal typec mac_hid 
soundcore ecc mei_me int3403_thermal
[   47.306348]  intel_rapl_common acpi_thermal_rel acpi_pad 
int340x_thermal_zone mei intel_soc_dts_iosf intel_pch_thermal sch_fq_codel 
pkcs8_key_parser ip_tables x_tables autofs4 btrfs blake2b_generic xor raid6_pq 
libcrc32c dm_crypt uas usb_storage i915 i2c_algo_bit drm_kms_helper syscopyarea 
sysfillrect sysimgblt fb_sys_fops cec crct10dif_pclmul crc32_pclmul 
ghash_clmulni_intel rc_core aesni_intel crypto_simd cryptd nvme glue_helper 
psmouse e1000e drm thunderbolt i2c_i801 xhci_pci i2c_smbus nvme_core 
xhci_pci_renesas wmi i2c_hid hid video
[   47.306369] CPU: 1 PID: 1143 Comm: iwd Tainted: P     U     O      
5.8.0-33-generic #36-Ubuntu
[   47.306369] Hardware name: LENOVO 20KHCTO1WW/20KHCTO1WW, BIOS N23ET75W (1.50 
) 10/13/2020
[   47.306392] RIP: 0010:nl80211_get_reg_do+0x1fc/0x230 [cfg80211]
[   47.306394] Code: 45 cc 01 00 00 00 e8 83 b6 70 ee 85 c0 0f 84 fd fe ff ff 
eb a8 4c 89 e7 48 89 45 c0 e8 dd ae b1 ee 48 8b 45 c0 e9 40 ff ff ff <0f> 0b 4c 
89 e7 e8 ca ae b1 ee b8 ea ff ff ff e9 2c ff ff ff e9 7a
[   47.306395] RSP: 0018:ffffab21009d7b70 EFLAGS: 00010202
[   47.306396] RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
[   47.306397] RDX: ffff98077b560008 RSI: 0000000000000000 RDI: ffff98077b5602e0
[   47.306398] RBP: ffffab21009d7bb0 R08: ffff98077b5602e0 R09: ffff98078597b014
[   47.306399] R10: 0000000000000000 R11: 000000000000001f R12: ffff98077d78a100
[   47.306400] R13: ffffab21009d7bd0 R14: ffff98078597b014 R15: 0000000000000000
[   47.306402] FS:  00007fa3cbea0740(0000) GS:ffff980791640000(0000) 
knlGS:0000000000000000
[   47.306403] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   47.306404] CR2: 00007ffd949e7c40 CR3: 000000048596c004 CR4: 00000000003606e0
[   47.306404] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   47.306405] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   47.306406] Call Trace:
[   47.306413]  ? rtnl_lock+0x15/0x20
[   47.306417]  genl_family_rcv_msg+0x17b/0x290
[   47.306420]  genl_rcv_msg+0x4c/0xa0
[   47.306421]  ? genl_family_rcv_msg+0x290/0x290
[   47.306423]  netlink_rcv_skb+0x4e/0x110
[   47.306425]  genl_rcv+0x29/0x40
[   47.306427]  netlink_unicast+0x218/0x330
[   47.306429]  netlink_sendmsg+0x23b/0x460
[   47.306431]  ? aa_sk_perm+0x43/0x1b0
[   47.306434]  sock_sendmsg+0x65/0x70
[   47.306435]  __sys_sendto+0x113/0x190
[   47.306439]  ? __secure_computing+0x42/0xe0
[   47.306442]  ? syscall_trace_enter+0xaf/0x270
[   47.306475]  __x64_sys_sendto+0x29/0x30
[   47.306478]  do_syscall_64+0x49/0xc0
[   47.306480]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[   47.306481] RIP: 0033:0x7fa3cbfbd6c0
[   47.306483] Code: c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 
04 25 18 00 00 00 85 c0 75 1d 45 31 c9 45 31 c0 b8 2c 00 00 00 0f 05 <48> 3d 00 
f0 ff ff 77 68 c3 0f 1f 80 00 00 00 00 55 48 83 ec 20 48
[   47.306484] RSP: 002b:00007ffd949ec2f8 EFLAGS: 00000246 ORIG_RAX: 
000000000000002c
[   47.306485] RAX: ffffffffffffffda RBX: 00005640b5603b00 RCX: 00007fa3cbfbd6c0
[   47.306486] RDX: 000000000000001c RSI: 00005640b560eff0 RDI: 0000000000000004
[   47.306486] RBP: 00005640b560e8e0 R08: 0000000000000000 R09: 0000000000000000
[   47.306487] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffd949ec35c
[   47.306488] R13: 00007ffd949ec358 R14: 00005640b560d790 R15: 0000000000000000
[   47.306490] ---[ end trace 4bb70ad9a9020389 ]---

This is located in:
  static int nl80211_get_reg_do(struct sk_buff *skb, struct genl_info *info)    
                      
  {                                                                             
                      
          const struct ieee80211_regdomain *regdom = NULL;                      
                      
          struct cfg80211_registered_device *rdev;                              
                      
          struct wiphy *wiphy = NULL;                                           
                      
          struct sk_buff *msg;                                                  
                      
          void *hdr;                                                            
                      
                                                                                
                      
          msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);                      
                      
          if (!msg)                                                             
                      
                  return -ENOBUFS;                                              
                      
                                                                                
                      
          hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0,         
                      
                               NL80211_CMD_GET_REG);                            
                      
          if (!hdr)                                                             
                      
                  goto put_failure;                                             
                      
                                                                                
                      
          if (info->attrs[NL80211_ATTR_WIPHY]) {                                
                      
                  bool self_managed;                                            
                      
                                                                                
                      
                  rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); 
                      
>>>>>>>>>>>>>>>   if (IS_ERR(rdev)) { 
>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<          
>>>>>>>>>>>>>>>                                                                 
>>>>>>>>>>>>>>>                                                                 
>>>>>>>>>>>>>>>                                                                 
>>>>>>>>>>>>>>>                                                                 
>>>>>>>>>>>>>>>                                                                 
>>>>>>>>>>>>>>>                                                            
                          nlmsg_free(msg);                                      
                      
                          return PTR_ERR(rdev);                                 
                      
                  }                                                             
                      
                                                                                
                      
                  wiphy = &rdev->wiphy;                                         
                      
                  self_managed = wiphy->regulatory_flags &                      
                      
                                 REGULATORY_WIPHY_SELF_MANAGED;                 
                      
                  regdom = get_wiphy_regdom(wiphy);                             
                      
                                                                                
                      
                  /* a self-managed-reg device must have a private regdom */    
                      
                  if (WARN_ON(!regdom && self_managed)) {                       
                   
                          nlmsg_free(msg);                                      
                      
                          return -EINVAL;                                       
                      
                  }                                                             
                      
                                                                                
                      
                  if (regdom &&                                                 
                      
                      nla_put_u32(msg, NL80211_ATTR_WIPHY, 
get_wiphy_idx(wiphy)))                     
                          goto nla_put_failure;                                 
                      
          }                                                                     
                      
                                                                                
                      
          if (!wiphy && reg_last_request_cell_base() &&                         
                      
              nla_put_u32(msg, NL80211_ATTR_USER_REG_HINT_TYPE,                 
                      
                          NL80211_USER_REG_HINT_CELL_BASE))                     
                      
                  goto nla_put_failure;                                         
                      
                                                                                
                      
          rcu_read_lock();                                                      
                      
                                                                                
                      
          if (!regdom)                                                          
                      
                  regdom = rcu_dereference(cfg80211_regdomain);                 
                      
                                                                                
                      
          if (nl80211_put_regdom(regdom, msg))                                  
                      
                  goto nla_put_failure_rcu;                                     
                      
                                                                                
                      
          rcu_read_unlock();                                                    
                      
                                                                                
                      
          genlmsg_end(msg, hdr);                                                
                      
          return genlmsg_reply(msg, info);                                      
                      
                                                                                
                      
  nla_put_failure_rcu:                                                          
                      
          rcu_read_unlock();                                                    
                      
  nla_put_failure:                                                              
                      
  put_failure:                                                                  
                      
          nlmsg_free(msg);                                                      
                      
          return -EMSGSIZE;                                                     
                      
  }

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1908227

Title:
  iwd triggers WARN in net/wireless/nl80221.c

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1908227/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to