Page MenuHomeVyOS Platform

Multiple Wireless SSID's on Single Wireless Card causes a crash
Open, Requires assessmentPublicBUG

Description

Currently, when a Wireless card is detected at boot a single wlan interface is created.
Like so;

vyos@vyos# show interfaces
 ethernet eth0 {
     hw-id 00:1a:8c:45:3d:2c
 }
 ethernet eth1 {
     hw-id 00:1a:8c:45:3d:2d
 }
 ethernet eth2 {
     hw-id 00:1a:8c:45:3d:2e
 }
 ethernet eth3 {
     hw-id 00:1a:8c:45:3d:2f
 }
 loopback lo {
 }
 wireless wlan0 {
     hw-id 00:0e:8e:69:7f:17
     physical-device phy0
 }
[edit]

You can create an SSID under the wireless interface, perfectly fine - and it seems to work a treat.

vyos@vyos# run show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             -                                 u/u
eth1             -                                 u/D
eth2             -                                 u/D
eth3             -                                 u/D
lo               127.0.0.1/8                       u/u
                 ::1/128
wlan0            192.168.1.254/24                  u/u
[edit]
vyos@vyos# show interfaces
 ethernet eth0 {
     hw-id 00:1a:8c:45:3d:2c
 }
 ethernet eth1 {
     hw-id 00:1a:8c:45:3d:2d
 }
 ethernet eth2 {
     hw-id 00:1a:8c:45:3d:2e
 }
 ethernet eth3 {
     hw-id 00:1a:8c:45:3d:2f
 }
 loopback lo {
 }
 wireless wlan0 {
     address 192.168.1.254/24
     channel 1
     country-code UK
     hw-id 00:0e:8e:69:7f:17
     physical-device phy0
     ssid TestingOne
     type access-point
 }
[edit]

The issue comes if you want to create a second SSID on the same Physical adaptor.
A crash occurs and the system reboots.

vyos@vyos# show interfaces
 ethernet eth0 {
     hw-id 00:1a:8c:45:3d:2c
 }
 ethernet eth1 {
     hw-id 00:1a:8c:45:3d:2d
 }
 ethernet eth2 {
     hw-id 00:1a:8c:45:3d:2e
 }
 ethernet eth3 {
     hw-id 00:1a:8c:45:3d:2f
 }
 loopback lo {
 }
 wireless wlan0 {
     address 192.168.1.254/24
     channel 1
     country-code UK
     hw-id 00:0e:8e:69:7f:17
     physical-device phy0
     ssid TestingOne
     type access-point
 }
+wireless wlan1 {
+    address 192.168.2.254/24
+    channel 1
+    country-code UK
+    physical-device phy0
+    ssid TestingTwo
+    type access-point
+}
[edit]
vyos@vyos# commit
[  705.500003] BUG: unable to handle kernel NULL pointer dereference at 0000000000000066
[  705.508768] PGD 0 P4D 0
[  705.511598] Oops: 0002 [#1] SMP PTI
[  705.515495] CPU: 1 PID: 3053 Comm: hostapd Tainted: G           O      4.19.155-amd64-vyos #1
[  705.525027] Hardware name: Sophos XG/Aptio CRB, BIOS 5.6.5 08/19/2014
[  705.532234] RIP: 0010:ath_tx_node_init+0x38/0x100 [ath9k]
[  705.538269] Code: 48 c7 46 28 2c 01 00 00 48 c7 46 30 2c 01 00 00 48 c7 46 38 2c 01 00 00 e9 8f 00 00 00 48 8b 84 d0 98 00 00 00 b9 40 00 00 00 <44> 88 40 66 41 b8 01 00                                                                                                                                                 00 00 66 89 48 64 48 8d 48 18 66 44 89 40
[  705.559269] RSP: 0018:ffffa78100c6fb30 EFLAGS: 00010246
[  705.565101] RAX: 0000000000000000 RBX: ffff99ab64397380 RCX: 0000000000000040
[  705.573078] RDX: 0000000000000000 RSI: ffff99ab643974f0 RDI: ffff99ab748c1540
[  705.581054] RBP: ffff99ab748c1540 R08: 0000000000000000 R09: 0000000000000000
[  705.589032] R10: 0000000000000003 R11: 0000000000000000 R12: ffff99ab748c2dc8
[  705.597008] R13: ffff99ab7b1534c8 R14: ffff99ab748c1f50 R15: ffff99ab643974c8
[  705.604985] FS:  00007f07ce35c500(0000) GS:ffff99ab7bb00000(0000) knlGS:0000000000000000
[  705.614032] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  705.620453] CR2: 0000000000000066 CR3: 000000011f028000 CR4: 00000000001006e0
[  705.628429] Call Trace:
[  705.631167]  ath9k_add_interface+0xf4/0x120 [ath9k]
[  705.636640]  drv_add_interface+0x2b/0x60 [mac80211]
[  705.642112]  ieee80211_do_open+0x28b/0x8c0 [mac80211]
[  705.647762]  __dev_open+0xb1/0x130
[  705.651564]  __dev_change_flags+0x19e/0x210
[  705.656238]  dev_change_flags+0x1c/0x50
[  705.660525]  devinet_ioctl+0x584/0x6b0
[  705.664714]  inet_ioctl+0x13e/0x220
[  705.668611]  ? dev_get_by_name_rcu+0x6e/0x80
[  705.673383]  ? dev_get_by_name_rcu+0x6e/0x80
[  705.678154]  ? dev_ioctl+0x4af/0x560
[  705.682148]  sock_do_ioctl+0x3e/0x130
[  705.686241]  ? syscall_return_via_sysret+0x14/0x83
[  705.691595]  ? __switch_to_asm+0x41/0x70
[  705.695978]  ? __switch_to_asm+0x35/0x70
[  705.700360]  sock_ioctl+0x199/0x320
[  705.704257]  ? __switch_to_asm+0x35/0x70
[  705.708639]  ? __switch_to_asm+0x41/0x70
[  705.713021]  ? __switch_to_asm+0x35/0x70
[  705.717402]  ? __switch_to_asm+0x41/0x70
[  705.721784]  ? __switch_to_asm+0x35/0x70
[  705.726166]  ? __switch_to_asm+0x41/0x70
[  705.730549]  ? __switch_to_asm+0x35/0x70
[  705.734931]  ? __switch_to_asm+0x35/0x70
[  705.739315]  do_vfs_ioctl+0x9f/0x630
[  705.743309]  ? __sys_recvmsg+0x4f/0xa0
[  705.747498]  ksys_ioctl+0x35/0x70
[  705.751201]  __x64_sys_ioctl+0x11/0x20
[  705.755390]  do_syscall_64+0x49/0xe0
[  705.759384]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  705.765030] RIP: 0033:0x7f07ce46e427
[  705.769023] Code: 00 00 90 48 8b 05 69 aa 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01                                                                                                                                                 c3 48 8b 0d 39 aa 0c 00 f7 d8 64 89 01 48
[  705.790023] RSP: 002b:00007ffef893c368 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[  705.798478] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f07ce46e427
[  705.806454] RDX: 00007ffef893c370 RSI: 0000000000008914 RDI: 0000000000000006
[  705.814431] RBP: 0000000000000006 R08: 00007ffef893c37f R09: 000056224ef90c60
[  705.822408] R10: 0000000000000007 R11: 0000000000000246 R12: 00007ffef893c370
[  705.830385] R13: 000056224ef8ec70 R14: 0000000000000001 R15: 0000000000000000
[  705.838361] Modules linked in: af_packet fuse nft_chain_nat_ipv4 nf_nat_ipv4 nft_chain_nat_ipv6 nf_nat_ipv6 nft_chain_route_ipv6 xt_CT xt_tcpudp nft_compat nfnetlink_cthe                                                                                                                                                lper nft_counter nf_tables nfnetlink nf_nat_pptp nf_conntrack_pptp nf_conntrack_proto_gre nf_nat_h323 nf_conntrack_h323 nf_nat_sip nf_conntrack_sip nf_nat_proto_gre nf_nat_t                                                                                                                                                ftp nf_nat_ftp nf_nat nf_conntrack_tftp nf_conntrack_ftp nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c arc4 ath9k ath9k_common ath9k_hw ath mac80211 intel_soc_dts_the                                                                                                                                                rmal intel_soc_dts_iosf intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc cfg80211 evdev aesni_intel aes_x86_64 crypto_simd cryptd glue_helper                                                                                                                                                 intel_cstate pcspkr iTCO_wdt iTCO_vendor_support button pcc_cpufreq mpls_iptunnel mpls_router ip_tunnel mpls_gso br_netfilter
[  705.918101]  bridge stp llc ip_tables x_tables autofs4 usb_storage ohci_hcd uhci_hcd squashfs zstd_decompress xxhash loop overlay ext4 crc32c_generic crc16 mbcache jbd2 n                                                                                                                                                ls_ascii sd_mod crc32c_intel i2c_i801 lpc_ich ahci ehci_pci libahci ehci_hcd igb(O) libata scsi_mod fan thermal
[  705.945924] CR2: 0000000000000066
[  705.949703] ---[ end trace 7afb9cf9dc1a33ba ]---
[  705.954885] RIP: 0010:ath_tx_node_init+0x38/0x100 [ath9k]
[  705.960935] Code: 48 c7 46 28 2c 01 00 00 48 c7 46 30 2c 01 00 00 48 c7 46 38 2c 01 00 00 e9 8f 00 00 00 48 8b 84 d0 98 00 00 00 b9 40 00 00 00 <44> 88 40 66 41 b8 01 00                                                                                                                                                 00 00 66 89 48 64 48 8d 48 18 66 44 89 40
[  705.981948] RSP: 0018:ffffa78100c6fb30 EFLAGS: 00010246
[  705.987801] RAX: 0000000000000000 RBX: ffff99ab64397380 RCX: 0000000000000040
[  705.995792] RDX: 0000000000000000 RSI: ffff99ab643974f0 RDI: ffff99ab748c1540
[  706.003773] RBP: ffff99ab748c1540 R08: 0000000000000000 R09: 0000000000000000
[  706.011761] R10: 0000000000000003 R11: 0000000000000000 R12: ffff99ab748c2dc8
[  706.019749] R13: ffff99ab7b1534c8 R14: ffff99ab748c1f50 R15: ffff99ab643974c8
[  706.027739] FS:  00007f07ce35c500(0000) GS:ffff99ab7bb00000(0000) knlGS:0000000000000000
[  706.036797] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  706.043231] CR2: 0000000000000066 CR3: 000000011f028000 CR4: 00000000001006e0
[  706.051220] Kernel panic - not syncing: Fatal exception
[  706.057076] Kernel Offset: 0x2d000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[  706.069137] Rebooting in 60 seconds..

The crash can be avoided if you create the adaptor using "iw" beforehand, bind it to the physical adaptor - then create the interface within the VyOS config.
However, it is lost on a reboot and the system will enter a constant reboot loop as it parses the config at boot.

vyos@vyos:~$ sudo su
root@vyos:/home/vyos# /sbin/iw phy phy0 interface add wlan1 type managed
root@vyos:/home/vyos# ifconfig wlan1 up
root@vyos:/home/vyos# exit
vyos@vyos# show interfaces
 ethernet eth0 {
     hw-id 00:1a:8c:45:3d:2c
 }
 ethernet eth1 {
     hw-id 00:1a:8c:45:3d:2d
 }
 ethernet eth2 {
     hw-id 00:1a:8c:45:3d:2e
 }
 ethernet eth3 {
     hw-id 00:1a:8c:45:3d:2f
 }
 loopback lo {
 }
 wireless wlan0 {
+    address 192.168.1.254/24
+    channel 1
+    country-code UK
     hw-id 00:0e:8e:69:7f:17
     physical-device phy0
+    ssid TestingOne
+    type access-point
 }
+wireless wlan1 {
+    address 192.168.2.254/24
+    channel 1
+    country-code UK
+    physical-device phy0
+    ssid TestingTwo
+    type access-point
+}
[edit]
vyos@vyos# commit
[edit]
vyos@vyos# run show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             -                                 u/u
eth1             -                                 u/D
eth2             -                                 u/D
eth3             -                                 u/D
lo               127.0.0.1/8                       u/u
                 ::1/128
wlan0            192.168.1.254/24                  u/u
wlan1            192.168.2.254/24                  u/u
[edit]

All tests were completed on bare metal, Sophos XG115w Rev. 2.
The wireless card in question is an AR5BHB112. Model: WPEA-128N

Details

Difficulty level
Unknown (require assessment)
Version
VyOS 1.3-rolling-202011110217
Why the issue appeared?
Will be filled on close
Is it a breaking change?
Unspecified (possibly destroys the router)