dbus: Add D-Bus signal for PSK mismatch heuristics
As a workup action during disassociation, wpa_supplicant checks if the disconnection could have been caused by PSK mismatch during WPA 4-way handshake with function could_be_psk_mismatch() in event.c. A MSG_INFO message will be sent on the control interface when there could be a PSK mismatch, and this heuristic can be useful to indicate if the disconnection is caused by a wrong passphrase provided by the user. Here, propagate a new D-Bus signal 'PskMismatch' to notify other applicantions. Signed-off-by: Yichen Yu <yichenyu@chromium.org>
This commit is contained in:
parent
691f729d5d
commit
a678a510fb
6 changed files with 41 additions and 0 deletions
|
@ -1329,6 +1329,11 @@ fi.w1.wpa_supplicant1.CreateInterface.
|
||||||
<li>
|
<li>
|
||||||
<h3>InterworkingSelectDone ( )</h3>
|
<h3>InterworkingSelectDone ( )</h3>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<h3>PskMismatch ( )</h3>
|
||||||
|
<p>A possible PSK mismatch is identified.</p>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1102,6 +1102,29 @@ void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wpas_dbus_signal_psk_mismatch(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
struct wpas_dbus_priv *iface;
|
||||||
|
DBusMessage *msg;
|
||||||
|
|
||||||
|
iface = wpa_s->global->dbus;
|
||||||
|
|
||||||
|
/* Do nothing if the control interface is not turned on */
|
||||||
|
if (!iface || !wpa_s->dbus_new_path)
|
||||||
|
return;
|
||||||
|
|
||||||
|
msg = dbus_message_new_signal(wpa_s->dbus_new_path,
|
||||||
|
WPAS_DBUS_NEW_IFACE_INTERFACE,
|
||||||
|
"PskMismatch");
|
||||||
|
if (!msg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
dbus_connection_send(iface->con, msg, NULL);
|
||||||
|
|
||||||
|
dbus_message_unref(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wpas_dbus_signal_sta - Send a station related event signal
|
* wpas_dbus_signal_sta - Send a station related event signal
|
||||||
* @wpa_s: %wpa_supplicant network interface data
|
* @wpa_s: %wpa_supplicant network interface data
|
||||||
|
|
|
@ -254,6 +254,7 @@ void wpas_dbus_signal_preq(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *ie, size_t ie_len, u32 ssi_signal);
|
const u8 *ie, size_t ie_len, u32 ssi_signal);
|
||||||
void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
|
void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
|
||||||
const char *status, const char *parameter);
|
const char *status, const char *parameter);
|
||||||
|
void wpas_dbus_signal_psk_mismatch(struct wpa_supplicant *wpa_s);
|
||||||
void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
|
void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *sta);
|
const u8 *sta);
|
||||||
void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
|
void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
|
||||||
|
@ -585,6 +586,10 @@ static inline void wpas_dbus_signal_eap_status(struct wpa_supplicant *wpa_s,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void wpas_dbus_signal_psk_mismatch(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static inline
|
static inline
|
||||||
void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
|
void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *sta)
|
const u8 *sta)
|
||||||
|
|
|
@ -3977,6 +3977,7 @@ static void wpa_supplicant_event_disassoc_finish(struct wpa_supplicant *wpa_s,
|
||||||
if (wpas_p2p_4way_hs_failed(wpa_s) > 0)
|
if (wpas_p2p_4way_hs_failed(wpa_s) > 0)
|
||||||
return; /* P2P group removed */
|
return; /* P2P group removed */
|
||||||
wpas_auth_failed(wpa_s, "WRONG_KEY", prev_pending_bssid);
|
wpas_auth_failed(wpa_s, "WRONG_KEY", prev_pending_bssid);
|
||||||
|
wpas_notify_psk_mismatch(wpa_s);
|
||||||
#ifdef CONFIG_DPP2
|
#ifdef CONFIG_DPP2
|
||||||
wpas_dpp_send_conn_status_result(wpa_s,
|
wpas_dpp_send_conn_status_result(wpa_s,
|
||||||
DPP_STATUS_AUTH_FAILURE);
|
DPP_STATUS_AUTH_FAILURE);
|
||||||
|
|
|
@ -877,6 +877,12 @@ void wpas_notify_eap_error(struct wpa_supplicant *wpa_s, int error_code)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wpas_notify_psk_mismatch(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
wpas_dbus_signal_psk_mismatch(wpa_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
|
void wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid)
|
struct wpa_ssid *ssid)
|
||||||
{
|
{
|
||||||
|
|
|
@ -143,6 +143,7 @@ void wpas_notify_preq(struct wpa_supplicant *wpa_s,
|
||||||
void wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
|
void wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
|
||||||
const char *parameter);
|
const char *parameter);
|
||||||
void wpas_notify_eap_error(struct wpa_supplicant *wpa_s, int error_code);
|
void wpas_notify_eap_error(struct wpa_supplicant *wpa_s, int error_code);
|
||||||
|
void wpas_notify_psk_mismatch(struct wpa_supplicant *wpa_s);
|
||||||
void wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
|
void wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid);
|
struct wpa_ssid *ssid);
|
||||||
void wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
|
void wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
|
||||||
|
|
Loading…
Add table
Reference in a new issue