git: 71e72c9e91c4 - main - wpa: Update to 2.12
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 11 Aug 2026 03:56:19 UTC
The branch main has been updated by cy:
URL: https://cgit.FreeBSD.org/src/commit/?id=71e72c9e91c4b8007a4292e09669e8b549c29e97
commit 71e72c9e91c4b8007a4292e09669e8b549c29e97
Merge: 135df7785431 513264698a89
Author: Cy Schubert <cy@FreeBSD.org>
AuthorDate: 2026-08-10 14:23:31 +0000
Commit: Cy Schubert <cy@FreeBSD.org>
CommitDate: 2026-08-11 03:54:02 +0000
wpa: Update to 2.12
Fixes and new features include:
hostapd:
* support RSN overriding (e.g., WPA3-Personal Compatibility Mode)
* EHT/IEEE 802.11be/Wi-Fi 7
- more complete support
- fix message validation issues that could enable DoS attacks
- fix group key rekeying
* enable SAE group 20 by default if SAE-EXT-KEY is enabled
* reject unexpected SAE password identifier to avoid DoS attack against
a specific STA
* mandate use of SAE H2E when using password identifiers
* assign VLAN when using SAE with PMKSA caching
* support SPP A-MSDU negotiation
* support IEEE 802.11bi functionality
- changing SAE password identifiers
- EPPKE
- IEEE 802.1X/EAP in Authentication frames
- Association frame encryption
- PMKID privacy
* remove the driver interface for now obsolete Host AP driver
* remove the driver interface for now obsolete Atheros WEXT interface
* move supported, basic, and Beacon TX rate configuration to be at BSS
level instead of per-radio for all BSSs
* fix various issues in Multiple-BSSID functionality
* support OpenSSL 3.0 API changes
* EAP-TEAP: protocol changes based on RFC 9930; this is not compatible
with previous versions
* support Automated Frequency Coordination (AFC) on the 6 GHz band
* improve GAS/ANQP processing to support larger ANQP responses
* a large number of other fixes, cleanup, and extensions
wpa_supplicant:
* support RSN overriding (e.g., WPA3-Personal Compatibility Mode)
* improve BSS transition management support
* EHT/IEEE 802.11be/Wi-Fi 7
- more complete support
- fix message validation issues that could enable DoS attacks
* support Wi-Fi Direct R2
* support Wi-Fi Aware (add synchronized NAN; extend USD support)
* support Proximity Ranging
* support SPP A-MSDU negotiation
* support IEEE 802.11bi functionality
- changing SAE password identifiers
- EPPKE
- IEEE 802.1X/EAP in Authentication frames
- Association frame encryption
- PMKID privacy
* enable layer 2/Wi-Fi multicast filtering for all networks (not
just some Passpoint networks which enabled this before)
* wpa_gui: port to Qt6
* support OpenSSL 3.0 API changes
* EAP-TEAP: protocol changes based on RFC 9930; this is not compatible
with previous versions
* maintain configuration file permissions when writing updated
configuration
* add option to validate PKCS#11/OpenSC engine and module paths
* fix PMKSA caching to enforce network context to avoid misuse of
unexpected PMKSA cache entries
* fix a potential DoS attack in SAE processing of an unexpected element
* fix incomplete bounds checking of mesh AMPE messages that could have
resulted in DoS attacks and memory corruption
* a large number of other fixes, cleanup, and extensions
MFC after: 2 months
Merge commit '513264698a892550ba20aeb9da7f360417fdc63b'
contrib/wpa/Makefile | 10 +
contrib/wpa/README | 2 +-
contrib/wpa/hostapd/Android.mk | 40 +-
contrib/wpa/hostapd/ChangeLog | 30 +
contrib/wpa/hostapd/Makefile | 67 +-
contrib/wpa/hostapd/README | 11 +-
contrib/wpa/hostapd/README-MULTI-AP | 2 +-
contrib/wpa/hostapd/android.config | 3 -
contrib/wpa/hostapd/config_file.c | 734 ++-
contrib/wpa/hostapd/ctrl_iface.c | 1057 +++-
contrib/wpa/hostapd/ctrl_iface.h | 2 +
contrib/wpa/hostapd/defconfig | 34 +-
contrib/wpa/hostapd/eap_register.c | 7 -
contrib/wpa/hostapd/hlr_auc_gw.c | 29 +-
contrib/wpa/hostapd/hostapd.conf | 370 +-
contrib/wpa/hostapd/hostapd_cli.c | 130 +-
contrib/wpa/hostapd/main.c | 96 +-
contrib/wpa/hs20/client/Android.mk | 5 +-
contrib/wpa/hs20/client/Makefile | 5 +-
contrib/wpa/hs20/client/devdetail.xml | 47 -
contrib/wpa/hs20/client/devinfo.xml | 7 -
contrib/wpa/hs20/client/est.c | 742 ---
contrib/wpa/hs20/client/oma_dm_client.c | 1398 -----
contrib/wpa/hs20/client/osu_client.c | 2304 +-------
contrib/wpa/hs20/client/osu_client.h | 97 -
contrib/wpa/hs20/client/spp_client.c | 1003 ----
contrib/wpa/src/ap/Makefile | 6 +
contrib/wpa/src/ap/acs.c | 178 +-
contrib/wpa/src/ap/afc.c | 1123 ++++
contrib/wpa/src/ap/airtime_policy.c | 7 +-
contrib/wpa/src/ap/ap_config.c | 176 +-
contrib/wpa/src/ap/ap_config.h | 168 +-
contrib/wpa/src/ap/ap_drv_ops.c | 238 +-
contrib/wpa/src/ap/ap_drv_ops.h | 40 +-
contrib/wpa/src/ap/ap_mlme.c | 8 +-
contrib/wpa/src/ap/authsrv.c | 116 +-
contrib/wpa/src/ap/beacon.c | 1039 +++-
contrib/wpa/src/ap/ctrl_iface_ap.c | 495 +-
contrib/wpa/src/ap/ctrl_iface_ap.h | 6 +-
contrib/wpa/src/ap/dfs.c | 97 +-
contrib/wpa/src/ap/dfs.h | 2 +-
contrib/wpa/src/ap/dpp_hostapd.c | 56 +-
contrib/wpa/src/ap/drv_callbacks.c | 540 +-
contrib/wpa/src/ap/eap_user_db.c | 2 -
contrib/wpa/src/ap/gas_query_ap.c | 12 +-
contrib/wpa/src/ap/gas_serv.c | 917 +--
contrib/wpa/src/ap/hostapd.c | 1010 +++-
contrib/wpa/src/ap/hostapd.h | 187 +-
contrib/wpa/src/ap/hs20.c | 107 -
contrib/wpa/src/ap/hw_features.c | 328 +-
contrib/wpa/src/ap/hw_features.h | 22 +-
contrib/wpa/src/ap/ieee802_11.c | 3784 +++++++++---
contrib/wpa/src/ap/ieee802_11.h | 78 +-
contrib/wpa/src/ap/ieee802_11_eht.c | 1781 +++++-
contrib/wpa/src/ap/ieee802_11_he.c | 75 +-
contrib/wpa/src/ap/ieee802_11_ht.c | 61 +-
contrib/wpa/src/ap/ieee802_11_shared.c | 105 +-
contrib/wpa/src/ap/ieee802_11_vht.c | 49 +-
contrib/wpa/src/ap/ieee802_1x.c | 196 +-
contrib/wpa/src/ap/ieee802_1x.h | 2 +
contrib/wpa/src/ap/interference.c | 592 ++
contrib/wpa/src/ap/interference.h | 18 +
contrib/wpa/src/ap/nan_usd_ap.c | 64 +-
contrib/wpa/src/ap/nan_usd_ap.h | 7 +-
contrib/wpa/src/ap/neighbor_db.c | 66 +-
contrib/wpa/src/ap/pmksa_cache_auth.c | 30 +-
contrib/wpa/src/ap/pmksa_cache_auth.h | 14 +-
contrib/wpa/src/ap/rrm.c | 7 +-
contrib/wpa/src/ap/sta_info.c | 503 +-
contrib/wpa/src/ap/sta_info.h | 95 +-
contrib/wpa/src/ap/vlan_full.c | 22 +-
contrib/wpa/src/ap/wnm_ap.c | 14 +-
contrib/wpa/src/ap/wpa_auth.c | 1501 ++++-
contrib/wpa/src/ap/wpa_auth.h | 147 +-
contrib/wpa/src/ap/wpa_auth_ft.c | 116 +-
contrib/wpa/src/ap/wpa_auth_glue.c | 349 +-
contrib/wpa/src/ap/wpa_auth_i.h | 13 +
contrib/wpa/src/ap/wpa_auth_ie.c | 698 ++-
contrib/wpa/src/ap/wpa_auth_kay.c | 3 +-
contrib/wpa/src/ap/wps_hostapd.c | 2 +
contrib/wpa/src/build.rules | 3 +
contrib/wpa/src/common/Makefile | 1 +
contrib/wpa/src/common/common_module_tests.c | 15 +-
contrib/wpa/src/common/defs.h | 65 +-
contrib/wpa/src/common/dpp.c | 83 +-
contrib/wpa/src/common/dpp.h | 10 +-
contrib/wpa/src/common/dpp_auth.c | 2 +-
contrib/wpa/src/common/dpp_backup.c | 3 +-
contrib/wpa/src/common/dpp_crypto.c | 1 +
contrib/wpa/src/common/dpp_i.h | 2 +-
contrib/wpa/src/common/dpp_reconfig.c | 2 +-
contrib/wpa/src/common/dpp_tcp.c | 4 +-
contrib/wpa/src/common/gas.c | 6 +
contrib/wpa/src/common/gas_server.c | 14 +-
contrib/wpa/src/common/gas_server.h | 2 +-
contrib/wpa/src/common/hw_features_common.c | 48 +-
contrib/wpa/src/common/hw_features_common.h | 2 +
contrib/wpa/src/common/ieee802_11_common.c | 975 +++-
contrib/wpa/src/common/ieee802_11_common.h | 75 +-
contrib/wpa/src/common/ieee802_11_defs.h | 433 +-
contrib/wpa/src/common/nan.h | 98 -
contrib/wpa/src/common/nan_de.c | 2012 ++++++-
contrib/wpa/src/common/nan_de.h | 193 +-
contrib/wpa/src/common/nan_defs.h | 663 +++
contrib/wpa/src/common/proc_coord.c | 817 +++
contrib/wpa/src/common/proc_coord.h | 139 +
contrib/wpa/src/common/proximity_ranging.c | 2707 +++++++++
contrib/wpa/src/common/proximity_ranging.h | 683 +++
contrib/wpa/src/common/ptksa_cache.c | 27 +-
contrib/wpa/src/common/ptksa_cache.h | 4 +-
contrib/wpa/src/common/qca-vendor.h | 6163 +++++++++++++++++++-
contrib/wpa/src/common/sae.c | 145 +-
contrib/wpa/src/common/sae.h | 21 +-
contrib/wpa/src/common/sae_pk.c | 6 +
contrib/wpa/src/common/version.h | 2 +-
contrib/wpa/src/common/wpa_common.c | 1097 +++-
contrib/wpa/src/common/wpa_common.h | 96 +-
contrib/wpa/src/common/wpa_ctrl.h | 76 +-
contrib/wpa/src/crypto/crypto.h | 2 +-
contrib/wpa/src/crypto/crypto_gnutls.c | 8 -
contrib/wpa/src/crypto/crypto_libtomcrypt.c | 3 -
contrib/wpa/src/crypto/crypto_linux.c | 5 +-
contrib/wpa/src/crypto/crypto_openssl.c | 193 +-
contrib/wpa/src/crypto/crypto_wolfssl.c | 285 +-
contrib/wpa/src/crypto/sha256-prf.c | 2 +-
contrib/wpa/src/crypto/sha256.h | 2 +
contrib/wpa/src/crypto/sha384-prf.c | 2 +-
contrib/wpa/src/crypto/sha384.h | 2 +
contrib/wpa/src/crypto/sha512-prf.c | 2 +-
contrib/wpa/src/crypto/tls_gnutls.c | 20 +-
contrib/wpa/src/crypto/tls_openssl.c | 536 +-
contrib/wpa/src/crypto/tls_wolfssl.c | 668 ++-
contrib/wpa/src/drivers/driver.h | 1203 +++-
contrib/wpa/src/drivers/driver_atheros.c | 2286 --------
contrib/wpa/src/drivers/driver_bsd.c | 8 +-
contrib/wpa/src/drivers/driver_common.c | 26 +
contrib/wpa/src/drivers/driver_hostap.c | 1208 ----
contrib/wpa/src/drivers/driver_hostap.h | 208 -
contrib/wpa/src/drivers/driver_macsec_linux.c | 11 +-
contrib/wpa/src/drivers/driver_ndis.c | 3 +
contrib/wpa/src/drivers/driver_nl80211.c | 4850 +++++++++++----
contrib/wpa/src/drivers/driver_nl80211.h | 116 +-
contrib/wpa/src/drivers/driver_nl80211_capa.c | 701 ++-
contrib/wpa/src/drivers/driver_nl80211_event.c | 1400 ++++-
contrib/wpa/src/drivers/driver_nl80211_monitor.c | 387 +-
contrib/wpa/src/drivers/driver_nl80211_scan.c | 83 +-
contrib/wpa/src/drivers/driver_openbsd.c | 3 +
contrib/wpa/src/drivers/driver_privsep.c | 3 +
contrib/wpa/src/drivers/driver_wext.c | 124 +-
contrib/wpa/src/drivers/driver_wext.h | 2 +
contrib/wpa/src/drivers/drivers.c | 6 -
contrib/wpa/src/drivers/drivers.mak | 22 +-
contrib/wpa/src/drivers/drivers.mk | 18 +-
contrib/wpa/src/drivers/nl80211_copy.h | 1624 +++++-
contrib/wpa/src/eap_common/eap_pwd_common.c | 2 +-
contrib/wpa/src/eap_common/eap_teap_common.c | 73 +-
contrib/wpa/src/eap_common/eap_teap_common.h | 7 +-
contrib/wpa/src/eap_common/ikev2_common.c | 29 +-
contrib/wpa/src/eap_peer/eap.c | 26 +-
contrib/wpa/src/eap_peer/eap_config.h | 2 -
contrib/wpa/src/eap_peer/eap_leap.c | 5 +-
contrib/wpa/src/eap_peer/eap_teap.c | 691 +--
contrib/wpa/src/eap_peer/eap_teap_pac.c | 931 ---
contrib/wpa/src/eap_peer/eap_teap_pac.h | 50 -
contrib/wpa/src/eap_peer/eap_tls.c | 55 -
contrib/wpa/src/eap_peer/eap_tls_common.c | 13 +-
contrib/wpa/src/eap_peer/eap_tls_common.h | 1 -
contrib/wpa/src/eap_server/eap.h | 2 -
contrib/wpa/src/eap_server/eap_server_teap.c | 522 +-
contrib/wpa/src/eap_server/eap_server_tls.c | 54 -
contrib/wpa/src/eap_server/eap_server_tls_common.c | 8 -
contrib/wpa/src/eap_server/eap_server_ttls.c | 5 +
contrib/wpa/src/eap_server/eap_tls_common.h | 1 -
contrib/wpa/src/eapol_auth/eapol_auth_sm.c | 17 +-
contrib/wpa/src/eapol_auth/eapol_auth_sm.h | 2 +-
contrib/wpa/src/eapol_auth/eapol_auth_sm_i.h | 2 -
contrib/wpa/src/eapol_supp/eapol_supp_sm.c | 135 +-
contrib/wpa/src/eapol_supp/eapol_supp_sm.h | 5 +
contrib/wpa/src/fst/fst.c | 8 +
contrib/wpa/src/fst/fst_session.c | 8 +-
contrib/wpa/src/nan/Makefile | 9 +
contrib/wpa/src/nan/nan.c | 3677 ++++++++++++
contrib/wpa/src/nan/nan.h | 946 +++
contrib/wpa/src/nan/nan_bootstrap.c | 741 +++
contrib/wpa/src/nan/nan_crypto.c | 773 +++
contrib/wpa/src/nan/nan_i.h | 867 +++
contrib/wpa/src/nan/nan_module_test_cases.c | 817 +++
contrib/wpa/src/nan/nan_module_tests.c | 1530 +++++
contrib/wpa/src/nan/nan_module_tests.h | 137 +
contrib/wpa/src/nan/nan_ndl.c | 1724 ++++++
contrib/wpa/src/nan/nan_ndp.c | 1214 ++++
contrib/wpa/src/nan/nan_pairing.c | 1625 ++++++
contrib/wpa/src/nan/nan_sec.c | 1653 ++++++
contrib/wpa/src/nan/nan_util.c | 2043 +++++++
contrib/wpa/src/p2p/p2p.c | 1774 +++++-
contrib/wpa/src/p2p/p2p.h | 416 +-
contrib/wpa/src/p2p/p2p_build.c | 170 +-
contrib/wpa/src/p2p/p2p_go_neg.c | 284 +-
contrib/wpa/src/p2p/p2p_group.c | 52 +-
contrib/wpa/src/p2p/p2p_i.h | 236 +-
contrib/wpa/src/p2p/p2p_invitation.c | 284 +-
contrib/wpa/src/p2p/p2p_parse.c | 68 +
contrib/wpa/src/p2p/p2p_pd.c | 864 ++-
contrib/wpa/src/p2p/p2p_utils.c | 71 +-
contrib/wpa/src/pae/ieee802_1x_kay.c | 33 +-
contrib/wpa/src/pae/ieee802_1x_kay.h | 4 +-
contrib/wpa/src/pasn/pasn_common.c | 168 +-
contrib/wpa/src/pasn/pasn_common.h | 164 +-
contrib/wpa/src/pasn/pasn_initiator.c | 606 +-
contrib/wpa/src/pasn/pasn_responder.c | 491 +-
contrib/wpa/src/radius/radius.c | 112 +-
contrib/wpa/src/radius/radius.h | 10 +-
contrib/wpa/src/radius/radius_client.c | 60 +-
contrib/wpa/src/radius/radius_server.c | 306 +-
contrib/wpa/src/radius/radius_server.h | 29 +-
contrib/wpa/src/rsn_supp/pmksa_cache.c | 94 +-
contrib/wpa/src/rsn_supp/pmksa_cache.h | 6 +-
contrib/wpa/src/rsn_supp/preauth.c | 2 +-
contrib/wpa/src/rsn_supp/tdls.c | 28 +-
contrib/wpa/src/rsn_supp/wpa.c | 1342 ++++-
contrib/wpa/src/rsn_supp/wpa.h | 104 +-
contrib/wpa/src/rsn_supp/wpa_ft.c | 8 +-
contrib/wpa/src/rsn_supp/wpa_i.h | 35 +-
contrib/wpa/src/rsn_supp/wpa_ie.c | 199 +-
contrib/wpa/src/rsn_supp/wpa_ie.h | 8 +
contrib/wpa/src/tls/tlsv1_client.c | 2 +-
contrib/wpa/src/tls/tlsv1_common.c | 8 -
contrib/wpa/src/tls/tlsv1_common.h | 4 -
contrib/wpa/src/tls/x509v3.c | 2 +-
contrib/wpa/src/utils/bitfield.c | 160 +-
contrib/wpa/src/utils/bitfield.h | 12 +-
contrib/wpa/src/utils/common.c | 32 +-
contrib/wpa/src/utils/common.h | 29 +-
contrib/wpa/src/utils/eloop.c | 9 +
contrib/wpa/src/utils/ext_password_file.c | 21 +-
contrib/wpa/src/utils/http-utils.h | 36 -
contrib/wpa/src/utils/http_curl.c | 962 ---
contrib/wpa/src/utils/json.c | 138 +-
contrib/wpa/src/utils/json.h | 3 +
contrib/wpa/src/utils/module_tests.h | 1 +
contrib/wpa/src/utils/os.h | 11 +-
contrib/wpa/src/utils/os_unix.c | 75 +-
contrib/wpa/src/utils/trace.c | 47 +-
contrib/wpa/src/utils/trace.h | 25 +-
contrib/wpa/src/utils/utils_module_tests.c | 97 +-
contrib/wpa/src/utils/wpa_debug.c | 38 +-
contrib/wpa/src/utils/wpa_debug.h | 49 +-
contrib/wpa/src/utils/wpabuf.c | 57 +-
contrib/wpa/src/utils/wpabuf.h | 11 +
contrib/wpa/src/utils/xml-utils.c | 31 -
contrib/wpa/src/utils/xml-utils.h | 19 -
contrib/wpa/src/utils/xml_libxml2.c | 212 +-
contrib/wpa/src/wps/http_server.c | 9 +-
contrib/wpa/src/wps/wps_er.c | 5 +-
contrib/wpa/src/wps/wps_upnp_ap.c | 2 +-
contrib/wpa/wpa_supplicant/Android.mk | 60 +-
contrib/wpa/wpa_supplicant/ChangeLog | 32 +
contrib/wpa/wpa_supplicant/Makefile | 81 +-
contrib/wpa/wpa_supplicant/README | 4 +-
contrib/wpa/wpa_supplicant/README-HS20 | 22 -
contrib/wpa/wpa_supplicant/README-NAN-USD | 16 +
contrib/wpa/wpa_supplicant/ap.c | 68 +-
contrib/wpa/wpa_supplicant/bgscan_learn.c | 5 +
contrib/wpa/wpa_supplicant/bgscan_simple.c | 4 +
contrib/wpa/wpa_supplicant/bss.c | 968 ++-
contrib/wpa/wpa_supplicant/bss.h | 36 +-
contrib/wpa/wpa_supplicant/config.c | 663 ++-
contrib/wpa/wpa_supplicant/config.h | 174 +-
contrib/wpa/wpa_supplicant/config_file.c | 302 +-
contrib/wpa/wpa_supplicant/config_none.c | 2 +-
contrib/wpa/wpa_supplicant/config_ssid.h | 115 +
contrib/wpa/wpa_supplicant/config_winreg.c | 2 +-
contrib/wpa/wpa_supplicant/ctrl_iface.c | 1694 +++++-
.../wpa/wpa_supplicant/dbus/dbus_dict_helpers.c | 35 +
.../wpa/wpa_supplicant/dbus/dbus_dict_helpers.h | 3 +
contrib/wpa/wpa_supplicant/dbus/dbus_new.c | 552 +-
contrib/wpa/wpa_supplicant/dbus/dbus_new.h | 87 +
.../wpa/wpa_supplicant/dbus/dbus_new_handlers.c | 645 +-
.../wpa/wpa_supplicant/dbus/dbus_new_handlers.h | 20 +
.../wpa_supplicant/dbus/dbus_new_handlers_p2p.c | 47 +-
.../wpa_supplicant/dbus/dbus_new_handlers_p2p.h | 2 +
.../wpa/wpa_supplicant/dbus/dbus_new_introspect.c | 2 +-
contrib/wpa/wpa_supplicant/defconfig | 44 +-
contrib/wpa/wpa_supplicant/dpp_supplicant.c | 84 +-
contrib/wpa/wpa_supplicant/dpp_supplicant.h | 2 +-
contrib/wpa/wpa_supplicant/driver_i.h | 223 +-
contrib/wpa/wpa_supplicant/eap_register.c | 7 -
contrib/wpa/wpa_supplicant/eapol_test.c | 5 +-
contrib/wpa/wpa_supplicant/events.c | 1449 ++++-
contrib/wpa/wpa_supplicant/gas_query.c | 95 +-
contrib/wpa/wpa_supplicant/hs20_supplicant.c | 997 +---
contrib/wpa/wpa_supplicant/hs20_supplicant.h | 20 +-
contrib/wpa/wpa_supplicant/ibss_rsn.c | 14 +-
contrib/wpa/wpa_supplicant/interworking.c | 64 +-
contrib/wpa/wpa_supplicant/main.c | 52 +-
contrib/wpa/wpa_supplicant/mbo.c | 6 +-
contrib/wpa/wpa_supplicant/mesh.c | 98 +-
contrib/wpa/wpa_supplicant/mesh_mpm.c | 4 +-
contrib/wpa/wpa_supplicant/mesh_rsn.c | 31 +-
contrib/wpa/wpa_supplicant/nan_supplicant.c | 5003 ++++++++++++++++
contrib/wpa/wpa_supplicant/nan_supplicant.h | 252 +
contrib/wpa/wpa_supplicant/nan_usd.c | 513 --
contrib/wpa/wpa_supplicant/nan_usd.h | 46 -
contrib/wpa/wpa_supplicant/notify.c | 591 +-
contrib/wpa/wpa_supplicant/notify.h | 98 +
contrib/wpa/wpa_supplicant/offchannel.c | 4 +-
contrib/wpa/wpa_supplicant/op_classes.c | 9 +-
contrib/wpa/wpa_supplicant/p2p_supplicant.c | 1914 +++++-
contrib/wpa/wpa_supplicant/p2p_supplicant.h | 52 +-
contrib/wpa/wpa_supplicant/pasn_supplicant.c | 811 ++-
contrib/wpa/wpa_supplicant/pr_supplicant.c | 1807 ++++++
contrib/wpa/wpa_supplicant/pr_supplicant.h | 148 +
contrib/wpa/wpa_supplicant/preauth_test.c | 2 +-
contrib/wpa/wpa_supplicant/robust_av.c | 278 +-
contrib/wpa/wpa_supplicant/rrm.c | 125 +-
contrib/wpa/wpa_supplicant/scan.c | 611 +-
contrib/wpa/wpa_supplicant/scan.h | 3 +
contrib/wpa/wpa_supplicant/sme.c | 2841 +++++++--
contrib/wpa/wpa_supplicant/sme.h | 22 +-
contrib/wpa/wpa_supplicant/wnm_sta.c | 976 ++--
contrib/wpa/wpa_supplicant/wnm_sta.h | 5 +-
contrib/wpa/wpa_supplicant/wpa_cli.c | 338 +-
contrib/wpa/wpa_supplicant/wpa_passphrase.c | 10 +-
contrib/wpa/wpa_supplicant/wpa_supplicant.c | 1520 ++++-
contrib/wpa/wpa_supplicant/wpa_supplicant.conf | 96 +
contrib/wpa/wpa_supplicant/wpa_supplicant_i.h | 314 +-
contrib/wpa/wpa_supplicant/wpas_glue.c | 69 +-
contrib/wpa/wpa_supplicant/wpas_kay.c | 1 +
contrib/wpa/wpa_supplicant/wpas_module_tests.c | 5 +
contrib/wpa/wpa_supplicant/wps_supplicant.c | 7 +-
usr.sbin/wpa/Makefile.inc | 11 +
usr.sbin/wpa/hostapd/Makefile | 9 +-
usr.sbin/wpa/src/ap/Makefile | 7 +
usr.sbin/wpa/src/common/Makefile | 1 +
usr.sbin/wpa/src/crypto/Makefile | 5 +-
usr.sbin/wpa/src/pasn/Makefile | 3 +-
336 files changed, 90636 insertions(+), 25473 deletions(-)
diff --cc contrib/wpa/Makefile
index 000000000000,000000000000..c4b1498cff9f
new file mode 100644
--- /dev/null
+++ b/contrib/wpa/Makefile
@@@ -1,0 -1,0 +1,10 @@@
++SUBDIRS=$(wildcard hostapd) $(wildcard wpa_supplicant)
++
++all:
++ for dir in $(SUBDIRS); do $(MAKE) -C $$dir; done
++
++clean distclean:
++ for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean; done
++
++install:
++ for dir in $(SUBDIRS); do $(MAKE) -C $$dir install; done
diff --cc contrib/wpa/src/ap/afc.c
index 000000000000,fed4d940ee3d..fed4d940ee3d
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/afc.c
+++ b/contrib/wpa/src/ap/afc.c
diff --cc contrib/wpa/src/ap/interference.c
index 000000000000,c93cdc75f13f..c93cdc75f13f
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/interference.c
+++ b/contrib/wpa/src/ap/interference.c
diff --cc contrib/wpa/src/ap/interference.h
index 000000000000,fb13abab1573..fb13abab1573
mode 000000,100644..100644
--- a/contrib/wpa/src/ap/interference.h
+++ b/contrib/wpa/src/ap/interference.h
diff --cc contrib/wpa/src/common/nan_defs.h
index 000000000000,88b46eaf3ce0..88b46eaf3ce0
mode 000000,100644..100644
--- a/contrib/wpa/src/common/nan_defs.h
+++ b/contrib/wpa/src/common/nan_defs.h
diff --cc contrib/wpa/src/common/proc_coord.c
index 000000000000,ac9157878820..ac9157878820
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proc_coord.c
+++ b/contrib/wpa/src/common/proc_coord.c
diff --cc contrib/wpa/src/common/proc_coord.h
index 000000000000,8eae443444f2..8eae443444f2
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proc_coord.h
+++ b/contrib/wpa/src/common/proc_coord.h
diff --cc contrib/wpa/src/common/proximity_ranging.c
index 000000000000,a230043f56e8..a230043f56e8
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proximity_ranging.c
+++ b/contrib/wpa/src/common/proximity_ranging.c
diff --cc contrib/wpa/src/common/proximity_ranging.h
index 000000000000,6ce9f69224bd..6ce9f69224bd
mode 000000,100644..100644
--- a/contrib/wpa/src/common/proximity_ranging.h
+++ b/contrib/wpa/src/common/proximity_ranging.h
diff --cc contrib/wpa/src/nan/Makefile
index 000000000000,5fd3e72e2de8..5fd3e72e2de8
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/Makefile
+++ b/contrib/wpa/src/nan/Makefile
diff --cc contrib/wpa/src/nan/nan.c
index 000000000000,a62edd10257e..a62edd10257e
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan.c
+++ b/contrib/wpa/src/nan/nan.c
diff --cc contrib/wpa/src/nan/nan.h
index 000000000000,c8a0594ef072..c8a0594ef072
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan.h
+++ b/contrib/wpa/src/nan/nan.h
diff --cc contrib/wpa/src/nan/nan_bootstrap.c
index 000000000000,399ea66a9638..399ea66a9638
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_bootstrap.c
+++ b/contrib/wpa/src/nan/nan_bootstrap.c
diff --cc contrib/wpa/src/nan/nan_crypto.c
index 000000000000,9eee2a3d8198..9eee2a3d8198
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_crypto.c
+++ b/contrib/wpa/src/nan/nan_crypto.c
diff --cc contrib/wpa/src/nan/nan_i.h
index 000000000000,5a9f2b5e9487..5a9f2b5e9487
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_i.h
+++ b/contrib/wpa/src/nan/nan_i.h
diff --cc contrib/wpa/src/nan/nan_module_test_cases.c
index 000000000000,943fb829d089..943fb829d089
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_test_cases.c
+++ b/contrib/wpa/src/nan/nan_module_test_cases.c
diff --cc contrib/wpa/src/nan/nan_module_tests.c
index 000000000000,61d126d46ee2..61d126d46ee2
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_tests.c
+++ b/contrib/wpa/src/nan/nan_module_tests.c
diff --cc contrib/wpa/src/nan/nan_module_tests.h
index 000000000000,dd6fa4b22f1e..dd6fa4b22f1e
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_module_tests.h
+++ b/contrib/wpa/src/nan/nan_module_tests.h
diff --cc contrib/wpa/src/nan/nan_ndl.c
index 000000000000,ce0e212cbefb..ce0e212cbefb
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_ndl.c
+++ b/contrib/wpa/src/nan/nan_ndl.c
diff --cc contrib/wpa/src/nan/nan_ndp.c
index 000000000000,74bd263070d8..74bd263070d8
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_ndp.c
+++ b/contrib/wpa/src/nan/nan_ndp.c
diff --cc contrib/wpa/src/nan/nan_pairing.c
index 000000000000,cb3b854fb64b..cb3b854fb64b
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_pairing.c
+++ b/contrib/wpa/src/nan/nan_pairing.c
diff --cc contrib/wpa/src/nan/nan_sec.c
index 000000000000,8561c7cd3495..8561c7cd3495
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_sec.c
+++ b/contrib/wpa/src/nan/nan_sec.c
diff --cc contrib/wpa/src/nan/nan_util.c
index 000000000000,7464a00b18d1..7464a00b18d1
mode 000000,100644..100644
--- a/contrib/wpa/src/nan/nan_util.c
+++ b/contrib/wpa/src/nan/nan_util.c
diff --cc contrib/wpa/wpa_supplicant/main.c
index e13abc407a93,000000000000..3f55446e754e
mode 100644,000000..100644
--- a/contrib/wpa/wpa_supplicant/main.c
+++ b/contrib/wpa/wpa_supplicant/main.c
@@@ -1,410 -1,0 +1,444 @@@
+/*
+ * WPA Supplicant / main() function for UNIX like OSes and MinGW
+ * Copyright (c) 2003-2013, Jouni Malinen <j@w1.fi>
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#include "includes.h"
+#ifdef __linux__
+#include <fcntl.h>
+#endif /* __linux__ */
+
+#include "common.h"
+#include "crypto/crypto.h"
+#include "fst/fst.h"
+#include "wpa_supplicant_i.h"
+#include "driver_i.h"
+#include "p2p_supplicant.h"
+
+
+static void usage(void)
+{
+ int i;
+ printf("%s\n\n%s\n"
+ "usage:\n"
+ " wpa_supplicant [-BddhKLqq"
+#ifdef CONFIG_DEBUG_SYSLOG
+ "s"
+#endif /* CONFIG_DEBUG_SYSLOG */
+ "t"
+#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
+ "u"
+#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
- "vW] [-P<pid file>] "
++ "vWy] [-P<pid file>] "
+ "[-g<global ctrl>] \\\n"
+ " [-G<group>] \\\n"
- " -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
++ " [-i<ifname>] -c<config file> [-C<ctrl>] [-D<driver>] "
+ "[-p<driver_param>] \\\n"
+ " [-b<br_ifname>] [-e<entropy file>]"
+#ifdef CONFIG_DEBUG_FILE
+ " [-f<debug file>]"
+#endif /* CONFIG_DEBUG_FILE */
+ " \\\n"
++#ifdef CONFIG_PROCESS_COORDINATION
++ " [-z<process coordination directory>] \\\n"
++#endif /* CONFIG_PROCESS_COORDINATION */
+ " [-o<override driver>] [-O<override ctrl>] \\\n"
+ " [-N -i<ifname> -c<conf> [-C<ctrl>] "
+ "[-D<driver>] \\\n"
+#ifdef CONFIG_P2P
+ " [-m<P2P Device config file>] \\\n"
+#endif /* CONFIG_P2P */
+ " [-p<driver_param>] [-b<br_ifname>] [-I<config file>] "
+ "...]\n"
+ "\n"
+ "drivers:\n",
+ wpa_supplicant_version, wpa_supplicant_license);
+
+ for (i = 0; wpa_drivers[i]; i++) {
+ printf(" %s = %s\n",
+ wpa_drivers[i]->name,
+ wpa_drivers[i]->desc);
+ }
+
+#ifndef CONFIG_NO_STDOUT_DEBUG
+ printf("options:\n"
+ " -b = optional bridge interface name\n"
+ " -B = run daemon in the background\n"
+ " -c = Configuration file\n"
+ " -C = ctrl_interface parameter (only used if -c is not)\n"
+ " -d = increase debugging verbosity (-dd even more)\n"
+ " -D = driver name (can be multiple drivers: bsd,wired)\n"
+ " -e = entropy file\n"
+#ifdef CONFIG_DEBUG_FILE
+ " -f = log output to debug file instead of stdout\n"
+#endif /* CONFIG_DEBUG_FILE */
+ " -g = global ctrl_interface\n"
+ " -G = global ctrl_interface group\n"
+ " -h = show this help text\n"
+ " -i = interface name\n"
+ " -I = additional configuration file\n"
+ " -K = include keys (passwords, etc.) in debug output\n"
+ " -L = show license (BSD)\n"
+#ifdef CONFIG_P2P
+ " -m = Configuration file for the P2P Device interface\n"
+#endif /* CONFIG_P2P */
+#ifdef CONFIG_MATCH_IFACE
+ " -M = start describing new matching interface\n"
+#endif /* CONFIG_MATCH_IFACE */
+ " -N = start describing new interface\n"
+ " -o = override driver parameter for new interfaces\n"
+ " -O = override ctrl_interface parameter for new interfaces\n"
+ " -p = driver parameters\n"
+ " -P = PID file\n"
+ " -q = decrease debugging verbosity (-qq even less)\n"
+#ifdef CONFIG_DEBUG_SYSLOG
+ " -s = log output to syslog instead of stdout\n"
+#endif /* CONFIG_DEBUG_SYSLOG */
+ " -t = include timestamp in debug messages\n"
+#ifdef CONFIG_DEBUG_LINUX_TRACING
+ " -T = record to Linux tracing in addition to logging\n"
+ " (records all messages regardless of debug verbosity)\n"
+#endif /* CONFIG_DEBUG_LINUX_TRACING */
+#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
+ " -u = enable DBus control interface\n"
+#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
+ " -v = show version\n"
- " -W = wait for a control interface monitor before starting\n");
++ " -W = wait for a control interface monitor before starting\n"
++ " -y = show configuration parsing details in debug log\n"
++#ifdef CONFIG_PROCESS_COORDINATION
++ " -z = process coordination directory\n"
++#endif /* CONFIG_PROCESS_COORDINATION */
++ );
+
+ printf("example:\n"
- " wpa_supplicant -Dbsd -iwlan0 -c/etc/wpa_supplicant.conf\n");
++ " wpa_supplicant -Dbsd -iwlan0 -c/etc/wpa_supplicant.conf\n",
++ wpa_drivers[0] ? wpa_drivers[0]->name : "nl80211");
++ printf("\nIf run without specifying a network interface or control interface, a\n"
++ "configuration file is parsed without starting any operation.\n"
++ "This can be used to check whether a configuration file has valid contents.\n");
+#endif /* CONFIG_NO_STDOUT_DEBUG */
+}
+
+
+static void license(void)
+{
+#ifndef CONFIG_NO_STDOUT_DEBUG
+ printf("%s\n\n%s%s%s%s%s\n",
+ wpa_supplicant_version,
+ wpa_supplicant_full_license1,
+ wpa_supplicant_full_license2,
+ wpa_supplicant_full_license3,
+ wpa_supplicant_full_license4,
+ wpa_supplicant_full_license5);
+#endif /* CONFIG_NO_STDOUT_DEBUG */
+}
+
+
+static void wpa_supplicant_fd_workaround(int start)
+{
+#ifdef __linux__
+ static int fd[3] = { -1, -1, -1 };
+ int i;
+ /* When started from pcmcia-cs scripts, wpa_supplicant might start with
+ * fd 0, 1, and 2 closed. This will cause some issues because many
+ * places in wpa_supplicant are still printing out to stdout. As a
+ * workaround, make sure that fd's 0, 1, and 2 are not used for other
+ * sockets. */
+ if (start) {
+ for (i = 0; i < 3; i++) {
+ fd[i] = open("/dev/null", O_RDWR);
+ if (fd[i] > 2) {
+ close(fd[i]);
+ fd[i] = -1;
+ break;
+ }
+ }
+ } else {
+ for (i = 0; i < 3; i++) {
+ if (fd[i] >= 0) {
+ close(fd[i]);
+ fd[i] = -1;
+ }
+ }
+ }
+#endif /* __linux__ */
+}
+
+
+#ifdef CONFIG_MATCH_IFACE
+static int wpa_supplicant_init_match(struct wpa_global *global)
+{
+ /*
+ * The assumption is that the first driver is the primary driver and
+ * will handle the arrival / departure of interfaces.
+ */
+ if (wpa_drivers[0]->global_init && !global->drv_priv[0]) {
+ global->drv_priv[0] = wpa_drivers[0]->global_init(global);
+ if (!global->drv_priv[0]) {
+ wpa_printf(MSG_ERROR,
+ "Failed to initialize driver '%s'",
+ wpa_drivers[0]->name);
+ return -1;
+ }
+ }
+
+ return 0;
+}
+#endif /* CONFIG_MATCH_IFACE */
+
+
+int main(int argc, char *argv[])
+{
+ int c, i;
+ struct wpa_interface *ifaces, *iface;
+ int iface_count, exitcode = -1;
+ struct wpa_params params;
+ struct wpa_global *global;
+
+ if (os_program_init())
+ return -1;
+
+ os_memset(¶ms, 0, sizeof(params));
+ params.wpa_debug_level = MSG_INFO;
+
+ iface = ifaces = os_zalloc(sizeof(struct wpa_interface));
+ if (ifaces == NULL)
+ return -1;
+ iface_count = 1;
+
+ wpa_supplicant_fd_workaround(1);
+
+ for (;;) {
+ c = getopt(argc, argv,
- "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvW");
++ "b:Bc:C:D:de:f:g:G:hi:I:KLMm:No:O:p:P:qsTtuvWyz:");
+ if (c < 0)
+ break;
+ switch (c) {
+ case 'b':
+ iface->bridge_ifname = optarg;
+ break;
+ case 'B':
+ params.daemonize++;
+ break;
+ case 'c':
+ iface->confname = optarg;
+ break;
+ case 'C':
+ iface->ctrl_interface = optarg;
+ break;
+ case 'D':
+ iface->driver = optarg;
+ break;
+ case 'd':
+#ifdef CONFIG_NO_STDOUT_DEBUG
+ printf("Debugging disabled with "
+ "CONFIG_NO_STDOUT_DEBUG=y build time "
+ "option.\n");
+ goto out;
+#else /* CONFIG_NO_STDOUT_DEBUG */
+ params.wpa_debug_level--;
+ break;
+#endif /* CONFIG_NO_STDOUT_DEBUG */
+ case 'e':
+ params.entropy_file = optarg;
+ break;
+#ifdef CONFIG_DEBUG_FILE
+ case 'f':
+ params.wpa_debug_file_path = optarg;
+ break;
+#endif /* CONFIG_DEBUG_FILE */
+ case 'g':
+ params.ctrl_interface = optarg;
+ break;
+ case 'G':
+ params.ctrl_interface_group = optarg;
+ break;
+ case 'h':
+ usage();
+ exitcode = 0;
+ goto out;
+ case 'i':
+ iface->ifname = optarg;
+ break;
+ case 'I':
+ iface->confanother = optarg;
+ break;
+ case 'K':
+ params.wpa_debug_show_keys++;
+ break;
+ case 'L':
+ license();
+ exitcode = 0;
+ goto out;
+#ifdef CONFIG_P2P
+ case 'm':
- params.conf_p2p_dev = optarg;
++ os_free(params.conf_p2p_dev);
++ params.conf_p2p_dev = os_rel2abs_path(optarg);
+ break;
+#endif /* CONFIG_P2P */
+ case 'o':
+ params.override_driver = optarg;
+ break;
+ case 'O':
+ params.override_ctrl_interface = optarg;
+ break;
+ case 'p':
+ iface->driver_param = optarg;
+ break;
+ case 'P':
+ os_free(params.pid_file);
+ params.pid_file = os_rel2abs_path(optarg);
+ break;
+ case 'q':
+ params.wpa_debug_level++;
+ break;
+#ifdef CONFIG_DEBUG_SYSLOG
+ case 's':
+ params.wpa_debug_syslog++;
+ break;
+#endif /* CONFIG_DEBUG_SYSLOG */
+#ifdef CONFIG_DEBUG_LINUX_TRACING
+ case 'T':
+ params.wpa_debug_tracing++;
+ break;
+#endif /* CONFIG_DEBUG_LINUX_TRACING */
+ case 't':
+ params.wpa_debug_timestamp++;
+ break;
+#ifdef CONFIG_CTRL_IFACE_DBUS_NEW
+ case 'u':
+ params.dbus_ctrl_interface = 1;
+ break;
+#endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
+ case 'v':
+ printf("%s\n", wpa_supplicant_version);
+ exitcode = 0;
+ goto out;
+ case 'W':
+ params.wait_for_monitor++;
+ break;
+#ifdef CONFIG_MATCH_IFACE
+ case 'M':
+ params.match_iface_count++;
+ iface = os_realloc_array(params.match_ifaces,
+ params.match_iface_count,
+ sizeof(struct wpa_interface));
+ if (!iface)
+ goto out;
+ params.match_ifaces = iface;
+ iface = ¶ms.match_ifaces[params.match_iface_count -
+ 1];
+ os_memset(iface, 0, sizeof(*iface));
+ break;
+#endif /* CONFIG_MATCH_IFACE */
+ case 'N':
+ iface_count++;
+ iface = os_realloc_array(ifaces, iface_count,
+ sizeof(struct wpa_interface));
+ if (iface == NULL)
+ goto out;
+ ifaces = iface;
+ iface = &ifaces[iface_count - 1];
+ os_memset(iface, 0, sizeof(*iface));
+ break;
++ case 'y':
++ params.show_details = true;
++ break;
++#ifdef CONFIG_PROCESS_COORDINATION
++ case 'z':
++ params.proc_coord_dir = optarg;
++ break;
++#endif /* CONFIG_PROCESS_COORDINATION */
+ default:
+ usage();
+ exitcode = 0;
+ goto out;
+ }
+ }
+
+ exitcode = 0;
+ global = wpa_supplicant_init(¶ms);
+ if (global == NULL) {
+ wpa_printf(MSG_ERROR, "Failed to initialize wpa_supplicant");
+ exitcode = -1;
+ goto out;
- } else {
- wpa_printf(MSG_INFO, "Successfully initialized "
- "wpa_supplicant");
+ }
+
++ if (iface_count == 1 && ifaces[0].confname && !ifaces[0].ifname &&
++#ifdef CONFIG_MATCH_IFACE
++ !params.match_iface_count &&
++#endif /* CONFIG_MATCH_IFACE */
++ !ifaces[0].ctrl_interface && !params.dbus_ctrl_interface) {
++ exitcode = wpa_supplicant_parse_config(ifaces[0].confname);
++ wpa_supplicant_deinit(global);
++ goto out;
++ }
++
++ wpa_printf(MSG_INFO, "Successfully initialized wpa_supplicant");
++
+ if (fst_global_init()) {
+ wpa_printf(MSG_ERROR, "Failed to initialize FST");
++ wpa_supplicant_deinit(global);
+ exitcode = -1;
+ goto out;
+ }
+
+#if defined(CONFIG_FST) && defined(CONFIG_CTRL_IFACE)
+ if (!fst_global_add_ctrl(fst_ctrl_cli))
+ wpa_printf(MSG_WARNING, "Failed to add CLI FST ctrl");
+#endif
+
+ for (i = 0; exitcode == 0 && i < iface_count; i++) {
+ struct wpa_supplicant *wpa_s;
+
+ if ((ifaces[i].confname == NULL &&
+ ifaces[i].ctrl_interface == NULL) ||
+ ifaces[i].ifname == NULL) {
+ if (iface_count == 1 && (params.ctrl_interface ||
+#ifdef CONFIG_MATCH_IFACE
+ params.match_iface_count ||
+#endif /* CONFIG_MATCH_IFACE */
+ params.dbus_ctrl_interface))
+ break;
+ usage();
+ exitcode = -1;
+ break;
+ }
+ wpa_s = wpa_supplicant_add_iface(global, &ifaces[i], NULL);
+ if (wpa_s == NULL) {
+ exitcode = -1;
+ break;
+ }
+ }
+
+#ifdef CONFIG_MATCH_IFACE
+ if (exitcode == 0)
+ exitcode = wpa_supplicant_init_match(global);
+#endif /* CONFIG_MATCH_IFACE */
+
+ if (exitcode == 0)
+ exitcode = wpa_supplicant_run(global);
+
+ wpa_supplicant_deinit(global);
+
+ fst_global_deinit();
*** 545 LINES SKIPPED ***