virt_wifi: fix error on connect
When connecting without first doing a scan, the BSS list is empty
and __cfg80211_connect_result() generates this warning:
$ iw dev wlan0 connect -w VirtWifi
[ 15.371989] ------------[ cut here ]------------
[ 15.372179] WARNING: CPU: 0 PID: 92 at net/wireless/sme.c:756 __cfg80211_connect_result+0x402/0x440
[ 15.372383] CPU: 0 PID: 92 Comm: kworker/u2:2 Not tainted 5.13.0-kvm #444
[ 15.372512] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-3.fc34 04/01/2014
[ 15.372597] Workqueue: cfg80211 cfg80211_event_work
[ 15.372756] RIP: 0010:__cfg80211_connect_result+0x402/0x440
[ 15.372818] Code: 48 2b 04 25 28 00 00 00 75 59 48 8b 3b 48 8b 76 10 48 8d 65 e0 5b 41 5c 41 5d 41 5e 5d 49 8d 65 f0 41 5d e9 d0 d4 fd ff 0f 0b <0f> 0b e9 f6 fd ff ff e8 f2 4a b4 ff e9 ec fd ff ff 0f 0b e9 19 fd
[ 15.372966] RSP: 0018:
ffffc900005cbdc0 EFLAGS:
00010246
[ 15.373022] RAX:
0000000000000000 RBX:
ffff8880028e2400 RCX:
ffff8880028e2472
[ 15.373088] RDX:
0000000000000002 RSI:
00000000fffffe01 RDI:
ffffffff815335ba
[ 15.373149] RBP:
ffffc900005cbe00 R08:
0000000000000008 R09:
ffff888002bdf8b8
[ 15.373209] R10:
ffff88803ec208f0 R11:
ffffffffffffe9ae R12:
ffff88801d687d98
[ 15.373280] R13:
ffff88801b5fe000 R14:
ffffc900005cbdc0 R15:
dead000000000100
[ 15.373330] FS:
0000000000000000(0000) GS:
ffff88803ec00000(0000) knlGS:
0000000000000000
[ 15.373382] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 15.373425] CR2:
000056421c468958 CR3:
000000001b458001 CR4:
0000000000170eb0
[ 15.373478] DR0:
0000000000000000 DR1:
0000000000000000 DR2:
0000000000000000
[ 15.373529] DR3:
0000000000000000 DR6:
00000000fffe0ff0 DR7:
0000000000000400
[ 15.373580] Call Trace:
[ 15.373611] ? cfg80211_process_wdev_events+0x10e/0x170
[ 15.373743] cfg80211_process_wdev_events+0x10e/0x170
[ 15.373783] cfg80211_process_rdev_events+0x21/0x40
[ 15.373846] cfg80211_event_work+0x20/0x30
[ 15.373892] process_one_work+0x1e9/0x340
[ 15.373956] worker_thread+0x4b/0x3f0
[ 15.374017] ? process_one_work+0x340/0x340
[ 15.374053] kthread+0x11f/0x140
[ 15.374089] ? set_kthread_struct+0x30/0x30
[ 15.374153] ret_from_fork+0x1f/0x30
[ 15.374187] ---[ end trace
321ef0cb7e9c0be1 ]---
wlan0 (phy #0): connected to 00:00:00:00:00:00
Add the fake bss just before the connect so that cfg80211_get_bss()
finds the virtual network.
As some code was duplicated, move it in a common function.
Signed-off-by: Matteo Croce <mcroce@microsoft.com>
Link: https://lore.kernel.org/r/20210706154423.11065-1-mcroce@linux.microsoft.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>