WiFi stopped working after an upgrade. Culprit seems to be wpa_supplicant

Yes, the problem is wpa_supplicant. A couple of FreeBSD users discovered the problem. After tracking it down, some open unprotected APs are understood by wpa_supplicant to be WPA where in fact they are not. If you start wpa_supplicant with the -dd option and without -s, the debug messages will contain a privacy=1 message. Up one or two messages you will see wpa_ie_len= some non-zero number, and that is the problem. wpa_supplicant will override key_mgmt=NONE to assume WPA if the WPA IE (infrastructure element) is present.

The problem is usually experienced on public WiFi such as hotels, universities and other hotspots, and can be replicated at home on a commodity router that supports VAPs (virtual APs). To reproduce the problem make sure your home AP is configured for WPA. Then create an open unprotected VAP (guest network). Notice your NIC will not be able to associate.

I’ve created a POC patch for FreeBSD only for the FreeBSD wpa_supplicant driver to ignore the wpa_ie when key_mgmt=NONE; users have indicated this fixes the problem. Unfortunately the patch is a hack addressing the symptom without fixing the root cause, likely misinterpretation of advertised capabilities of the secondary VAP.

I was able to reproduce the same problem on my FreeBSD laptop using Fedora 36 wpa_supplicant 2.10. I’ve posted an email to the wpa_supplicant mailing list.

Unfortunately my patch is FreeBSD only as it alters src/drivers/driver_bsd.c just prior to it issuing the ioctl() to associate to the network.