[DPP] Fix missing notification and logic bugs in wpa_supplicant HIDL

* Fix missing notification for timeout event.
* Fix incorrect AKM check logic.
* Check for SAE support when receiving DPP config with SAE, and ignore
if not supported on the device. This would allow to fallback to PSK if
SAE+PSK config was sent.
* Send wpa_supplicant object to notification functions instead of just the
interface name.

Bug: 122550817
Test: act.py -c ../WifiDppConfig.json -tc WifiDppTest
Change-Id: I3b862206037d2296716d9f7624b372b4c8d3467a
diff --git a/wpa_supplicant/dpp_supplicant.c b/wpa_supplicant/dpp_supplicant.c
index e775422..152e257 100644
--- a/wpa_supplicant/dpp_supplicant.c
+++ b/wpa_supplicant/dpp_supplicant.c
@@ -469,7 +469,7 @@
 		wpa_printf(MSG_INFO,
 			   "DPP: No response received from responder - stopping initiation attempt");
 		wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_INIT_FAILED);
-		wpas_notify_dpp_timeout(wpa_s->ifname);
+		wpas_notify_dpp_timeout(wpa_s);
 		offchannel_send_action_done(wpa_s);
 		wpas_dpp_listen_stop(wpa_s);
 		dpp_auth_deinit(auth);
@@ -731,6 +731,7 @@
 			wpa_printf(MSG_INFO,
 				   "DPP: No response received from responder - stopping initiation attempt");
 			wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_INIT_FAILED);
+			wpas_notify_dpp_timeout(wpa_s);
 			eloop_cancel_timeout(wpas_dpp_reply_wait_timeout,
 					     wpa_s, NULL);
 			offchannel_send_action_done(wpa_s);
@@ -1141,7 +1142,7 @@
 					  peer_bi, own_bi, freq, hdr, buf, len);
 	if (!wpa_s->dpp_auth) {
 		wpa_printf(MSG_DEBUG, "DPP: No response generated");
-		wpas_notify_dpp_auth_failure(wpa_s->ifname);
+		wpas_notify_dpp_auth_failure(wpa_s);
 		return;
 	}
 	wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
@@ -1264,7 +1265,7 @@
 
 	wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_NETWORK_ID "%d", ssid->id);
 
-	wpas_notify_dpp_config_received(wpa_s->ifname, ssid);
+	wpas_notify_dpp_config_received(wpa_s, ssid);
 
 	if (wpa_s->conf->dpp_config_processing < 2) {
 		return;
@@ -1389,7 +1390,7 @@
 
 fail:
 	wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
-	wpas_notify_dpp_configuration_failure(wpa_s->ifname);
+	wpas_notify_dpp_configuration_failure(wpa_s);
 	dpp_auth_deinit(wpa_s->dpp_auth);
 	wpa_s->dpp_auth = NULL;
 }
@@ -1467,7 +1468,7 @@
 {
 	wpa_printf(MSG_DEBUG, "DPP: Authentication succeeded");
 	wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_SUCCESS "init=%d", initiator);
-	wpas_notify_dpp_auth_success(wpa_s->ifname);
+	wpas_notify_dpp_auth_success(wpa_s);
 #ifdef CONFIG_TESTING_OPTIONS
 	if (dpp_test == DPP_TEST_STOP_AT_AUTH_CONF) {
 		wpa_printf(MSG_INFO,
@@ -1524,13 +1525,13 @@
 		if (auth->auth_resp_status == DPP_STATUS_RESPONSE_PENDING) {
 			wpa_printf(MSG_DEBUG,
 				   "DPP: Start wait for full response");
-			wpas_notify_dpp_resp_pending(wpa_s->ifname);
+			wpas_notify_dpp_resp_pending(wpa_s);
 			offchannel_send_action_done(wpa_s);
 			wpas_dpp_listen_start(wpa_s, auth->curr_freq);
 			return;
 		}
 		wpa_printf(MSG_DEBUG, "DPP: No confirm generated");
-		wpas_notify_dpp_auth_failure(wpa_s->ifname);
+		wpas_notify_dpp_auth_failure(wpa_s);
 		return;
 	}
 	os_memcpy(auth->peer_mac_addr, src, ETH_ALEN);
@@ -1568,7 +1569,7 @@
 
 	if (dpp_auth_conf_rx(auth, hdr, buf, len) < 0) {
 		wpa_printf(MSG_DEBUG, "DPP: Authentication failed");
-		wpas_notify_dpp_auth_failure(wpa_s->ifname);
+		wpas_notify_dpp_auth_failure(wpa_s);
 		return;
 	}
 
@@ -2161,7 +2162,7 @@
 	resp = dpp_conf_req_rx(auth, query, query_len);
 	if (!resp) {
 		wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
-		wpas_notify_dpp_configuration_failure(wpa_s->ifname);
+		wpas_notify_dpp_configuration_failure(wpa_s);
 	}
 	auth->conf_resp = resp;
 	return resp;
@@ -2194,11 +2195,11 @@
 	wpas_dpp_listen_stop(wpa_s);
 	if (ok) {
 		wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_SENT);
-		wpas_notify_dpp_config_sent(wpa_s->ifname);
+		wpas_notify_dpp_config_sent(wpa_s);
 	}
 	else {
 		wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
-		wpas_notify_dpp_configuration_failure(wpa_s->ifname);
+		wpas_notify_dpp_configuration_failure(wpa_s);
 	}
 	dpp_auth_deinit(wpa_s->dpp_auth);
 	wpa_s->dpp_auth = NULL;
diff --git a/wpa_supplicant/hidl/1.2/hidl.cpp b/wpa_supplicant/hidl/1.2/hidl.cpp
index 60ee85f..d8fa82f 100644
--- a/wpa_supplicant/hidl/1.2/hidl.cpp
+++ b/wpa_supplicant/hidl/1.2/hidl.cpp
@@ -27,9 +27,9 @@
 using android::hardware::wifi::supplicant::V1_2::implementation::HidlManager;
 using namespace android::hardware::wifi::supplicant::V1_2;
 
-static void wpas_hidl_notify_dpp_success(const char *ifname, DppSuccessCode code);
-static void wpas_hidl_notify_dpp_failure(const char *ifname, DppFailureCode code);
-static void wpas_hidl_notify_dpp_progress(const char *ifname, DppProgressCode code);
+static void wpas_hidl_notify_dpp_success(struct wpa_supplicant *wpa_s, DppSuccessCode code);
+static void wpas_hidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code);
+static void wpas_hidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code);
 
 void wpas_hidl_sock_handler(
     int sock, void * /* eloop_ctx */, void * /* sock_ctx */)
@@ -648,10 +648,10 @@
 	hidl_manager->notifyEapError(wpa_s, error_code);
 }
 
-void wpas_hidl_notify_dpp_config_received(const char *ifname,
+void wpas_hidl_notify_dpp_config_received(struct wpa_supplicant *wpa_s,
 	    struct wpa_ssid *ssid)
 {
-	if (!ifname || !ssid)
+	if (!wpa_s || !ssid)
 		return;
 
 	wpa_printf(
@@ -662,85 +662,85 @@
 	if (!hidl_manager)
 		return;
 
-	hidl_manager->notifyDppConfigReceived(ifname, ssid);
+	hidl_manager->notifyDppConfigReceived(wpa_s, ssid);
 }
 
-void wpas_hidl_notify_dpp_config_sent(const char *ifname)
+void wpas_hidl_notify_dpp_config_sent(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_success(ifname, DppSuccessCode::CONFIGURATION_SENT);
+	wpas_hidl_notify_dpp_success(wpa_s, DppSuccessCode::CONFIGURATION_SENT);
 }
 
 /* DPP Progress notifications */
-void wpas_hidl_notify_dpp_auth_success(const char *ifname)
+void wpas_hidl_notify_dpp_auth_success(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_progress(ifname, DppProgressCode::AUTHENTICATION_SUCCESS);
+	wpas_hidl_notify_dpp_progress(wpa_s, DppProgressCode::AUTHENTICATION_SUCCESS);
 }
 
-void wpas_hidl_notify_dpp_resp_pending(const char *ifname)
+void wpas_hidl_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_progress(ifname, DppProgressCode::RESPONSE_PENDING);
+	wpas_hidl_notify_dpp_progress(wpa_s, DppProgressCode::RESPONSE_PENDING);
 }
 
 /* DPP Failure notifications */
-void wpas_hidl_notify_dpp_not_compatible(const char *ifname)
+void wpas_hidl_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_failure(ifname, DppFailureCode::NOT_COMPATIBLE);
+	wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::NOT_COMPATIBLE);
 }
 
-void wpas_hidl_notify_dpp_missing_auth(const char *ifname)
+void wpas_hidl_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 }
 
-void wpas_hidl_notify_dpp_configuration_failure(const char *ifname)
+void wpas_hidl_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_failure(ifname, DppFailureCode::CONFIGURATION);
+	wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::CONFIGURATION);
 }
 
-void wpas_hidl_notify_dpp_timeout(const char *ifname)
+void wpas_hidl_notify_dpp_timeout(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_failure(ifname, DppFailureCode::TIMEOUT);
+	wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::TIMEOUT);
 }
 
-void wpas_hidl_notify_dpp_auth_failure(const char *ifname)
+void wpas_hidl_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_failure(ifname, DppFailureCode::AUTHENTICATION);
+	wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::AUTHENTICATION);
 }
 
-void wpas_hidl_notify_dpp_fail(const char *ifname)
+void wpas_hidl_notify_dpp_fail(struct wpa_supplicant *wpa_s)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_failure(ifname, DppFailureCode::FAILURE);
+	wpas_hidl_notify_dpp_failure(wpa_s, DppFailureCode::FAILURE);
 }
 
 /* DPP notification helper functions */
-static void wpas_hidl_notify_dpp_success(const char *ifname, DppSuccessCode code)
+static void wpas_hidl_notify_dpp_success(struct wpa_supplicant *wpa_s, DppSuccessCode code)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
 	wpa_printf(
@@ -751,12 +751,12 @@
 	if (!hidl_manager)
 		return;
 
-	hidl_manager->notifyDppSuccess(ifname, code);
+	hidl_manager->notifyDppSuccess(wpa_s, code);
 }
 
-static void wpas_hidl_notify_dpp_failure(const char *ifname, DppFailureCode code)
+static void wpas_hidl_notify_dpp_failure(struct wpa_supplicant *wpa_s, DppFailureCode code)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
 	wpa_printf(
@@ -767,12 +767,12 @@
 	if (!hidl_manager)
 		return;
 
-	hidl_manager->notifyDppFailure(ifname, code);
+	hidl_manager->notifyDppFailure(wpa_s, code);
 }
 
-static void wpas_hidl_notify_dpp_progress(const char *ifname, DppProgressCode code)
+static void wpas_hidl_notify_dpp_progress(struct wpa_supplicant *wpa_s, DppProgressCode code)
 {
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
 	wpa_printf(
@@ -783,5 +783,5 @@
 	if (!hidl_manager)
 		return;
 
-	hidl_manager->notifyDppProgress(ifname, code);
+	hidl_manager->notifyDppProgress(wpa_s, code);
 }
diff --git a/wpa_supplicant/hidl/1.2/hidl.h b/wpa_supplicant/hidl/1.2/hidl.h
index 914bc7b..a177f6e 100644
--- a/wpa_supplicant/hidl/1.2/hidl.h
+++ b/wpa_supplicant/hidl/1.2/hidl.h
@@ -99,18 +99,18 @@
 	    const u8 *p2p_dev_addr);
 	void wpas_hidl_notify_eap_error(
 	    struct wpa_supplicant *wpa_s, int error_code);
-	void wpas_hidl_notify_dpp_config_received(const char *ifname,
+	void wpas_hidl_notify_dpp_config_received(struct wpa_supplicant *wpa_s,
 		    struct wpa_ssid *ssid);
-	void wpas_hidl_notify_dpp_config_sent(const char *ifname);
-	void wpas_hidl_notify_dpp_auth_success(const char *ifname);
-	void wpas_hidl_notify_dpp_resp_pending(const char *ifname);
-	void wpas_hidl_notify_dpp_not_compatible(const char *ifname);
-	void wpas_hidl_notify_dpp_missing_auth(const char *ifname);
-	void wpas_hidl_notify_dpp_configuration_failure(const char *ifname);
-	void wpas_hidl_notify_dpp_invalid_uri(const char *ifname);
-	void wpas_hidl_notify_dpp_timeout(const char *ifname);
-	void wpas_hidl_notify_dpp_auth_failure(const char *ifname);
-	void wpas_hidl_notify_dpp_fail(const char *ifname);
+	void wpas_hidl_notify_dpp_config_sent(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_auth_success(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_invalid_uri(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_timeout(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s);
+	void wpas_hidl_notify_dpp_fail(struct wpa_supplicant *wpa_s);
 #else   // CONFIG_CTRL_IFACE_HIDL
 static inline int wpas_hidl_register_interface(struct wpa_supplicant *wpa_s)
 {
diff --git a/wpa_supplicant/hidl/1.2/hidl_manager.cpp b/wpa_supplicant/hidl/1.2/hidl_manager.cpp
index 19ea4b1..62fb9aa 100644
--- a/wpa_supplicant/hidl/1.2/hidl_manager.cpp
+++ b/wpa_supplicant/hidl/1.2/hidl_manager.cpp
@@ -1489,20 +1489,23 @@
  * @param ifname Interface name
  * @param config Configuration object
  */
-void HidlManager::notifyDppConfigReceived(const char *ifname,
+void HidlManager::notifyDppConfigReceived(struct wpa_supplicant *wpa_s,
 		struct wpa_ssid *config)
 {
 	DppAkm securityAkm;
 	char *password;
-	std::string hidl_ifname = ifname;
+	std::string hidl_ifname = wpa_s->ifname;
 
-	if (config->key_mgmt & WPA_KEY_MGMT_SAE) {
+	if ((config->key_mgmt & WPA_KEY_MGMT_SAE) &&
+			(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SAE)) {
 		securityAkm = DppAkm::SAE;
 	} else if (config->key_mgmt & WPA_KEY_MGMT_PSK) {
 			securityAkm = DppAkm::PSK;
 	} else {
 		/* Unsupported AKM */
-		notifyDppFailure(ifname, DppFailureCode::CONFIGURATION);
+		wpa_printf(MSG_ERROR, "DPP: Error: Unsupported AKM 0x%X",
+				config->key_mgmt);
+		notifyDppFailure(wpa_s, DppFailureCode::CONFIGURATION);
 		return;
 	}
 
@@ -1526,9 +1529,9 @@
  * @param ifname Interface name
  * @param code Status code
  */
-void HidlManager::notifyDppSuccess(const char *ifname, DppSuccessCode code)
+void HidlManager::notifyDppSuccess(struct wpa_supplicant *wpa_s, DppSuccessCode code)
 {
-	std::string hidl_ifname = ifname;
+	std::string hidl_ifname = wpa_s->ifname;
 
 	callWithEachStaIfaceCallback_1_2(hidl_ifname,
 			std::bind(&V1_2::ISupplicantStaIfaceCallback::onDppSuccess,
@@ -1541,9 +1544,9 @@
  * @param ifname Interface name
  * @param code Status code
  */
-void HidlManager::notifyDppFailure(const char *ifname, DppFailureCode code)
+void HidlManager::notifyDppFailure(struct wpa_supplicant *wpa_s, DppFailureCode code)
 {
-	std::string hidl_ifname = ifname;
+	std::string hidl_ifname = wpa_s->ifname;
 
 	callWithEachStaIfaceCallback_1_2(hidl_ifname,
 			std::bind(&V1_2::ISupplicantStaIfaceCallback::onDppFailure,
@@ -1556,9 +1559,9 @@
  * @param ifname Interface name
  * @param code Status code
  */
-void HidlManager::notifyDppProgress(const char *ifname, DppProgressCode code)
+void HidlManager::notifyDppProgress(struct wpa_supplicant *wpa_s, DppProgressCode code)
 {
-	std::string hidl_ifname = ifname;
+	std::string hidl_ifname = wpa_s->ifname;
 
 	callWithEachStaIfaceCallback_1_2(hidl_ifname,
 			std::bind(&V1_2::ISupplicantStaIfaceCallback::onDppProgress,
diff --git a/wpa_supplicant/hidl/1.2/hidl_manager.h b/wpa_supplicant/hidl/1.2/hidl_manager.h
index a7e2c86..e0038ae 100644
--- a/wpa_supplicant/hidl/1.2/hidl_manager.h
+++ b/wpa_supplicant/hidl/1.2/hidl_manager.h
@@ -128,11 +128,11 @@
 	    struct wpa_supplicant *wpa_s, const u8 *sta,
 	    const u8 *p2p_dev_addr);
 	void notifyEapError(struct wpa_supplicant *wpa_s, int error_code);
-	void notifyDppConfigReceived(const char *ifname,
+	void notifyDppConfigReceived(struct wpa_supplicant *wpa_s,
 			struct wpa_ssid *config);
-	void notifyDppSuccess(const char *ifname, DppSuccessCode code);
-	void notifyDppFailure(const char *ifname, DppFailureCode code);
-	void notifyDppProgress(const char *ifname, DppProgressCode code);
+	void notifyDppSuccess(struct wpa_supplicant *wpa_s, DppSuccessCode code);
+	void notifyDppFailure(struct wpa_supplicant *wpa_s, DppFailureCode code);
+	void notifyDppProgress(struct wpa_supplicant *wpa_s, DppProgressCode code);
 
 	// Methods called from hidl objects.
 	void notifyExtRadioWorkStart(struct wpa_supplicant *wpa_s, uint32_t id);
diff --git a/wpa_supplicant/hidl/1.2/sta_iface.cpp b/wpa_supplicant/hidl/1.2/sta_iface.cpp
index ae5fcbe..8c5178e 100644
--- a/wpa_supplicant/hidl/1.2/sta_iface.cpp
+++ b/wpa_supplicant/hidl/1.2/sta_iface.cpp
@@ -1187,6 +1187,14 @@
 	cmd += (own_bootstrap_id > 0) ?
 			" own=" + std::to_string(own_bootstrap_id) : "";
 
+	/* Check for supported AKMs */
+	if (security_akm != DppAkm::PSK && security_akm != DppAkm::SAE &&
+			security_akm != DppAkm::PSK_SAE) {
+		wpa_printf(MSG_ERROR, "DPP: Error: invalid AKM specified: %d",
+				security_akm);
+		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
+	}
+
 	/* SAE AKM requires SSID and password to be initialized */
 	if ((security_akm == DppAkm::SAE ||
 			security_akm == DppAkm::PSK_SAE) &&
@@ -1204,9 +1212,6 @@
 			wpa_printf(MSG_ERROR, "DPP: Error: Password or PSK not specified");
 			return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
 		}
-	} else {
-		wpa_printf(MSG_ERROR, "DPP: Error: invalid AKM specified");
-		return {SupplicantStatusCode::FAILURE_UNKNOWN, ""};
 	}
 
 	cmd += " role=configurator";
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index 37a4595..30bdb6d 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -1033,105 +1033,105 @@
 
 /* DPP Success notifications */
 
-void wpas_notify_dpp_config_received(const char *ifname,
+void wpas_notify_dpp_config_received(struct wpa_supplicant *wpa_s,
 	    struct wpa_ssid *ssid)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_config_received(ifname, ssid);
+	wpas_hidl_notify_dpp_config_received(wpa_s, ssid);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_config_sent(const char *ifname)
+void wpas_notify_dpp_config_sent(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_config_sent(ifname);
+	wpas_hidl_notify_dpp_config_sent(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
 /* DPP Progress notifications */
-void wpas_notify_dpp_auth_success(const char *ifname)
+void wpas_notify_dpp_auth_success(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_auth_success(ifname);
+	wpas_hidl_notify_dpp_auth_success(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_resp_pending(const char *ifname)
+void wpas_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_resp_pending(ifname);
+	wpas_hidl_notify_dpp_resp_pending(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
 /* DPP Failure notifications */
-void wpas_notify_dpp_not_compatible(const char *ifname)
+void wpas_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_not_compatible(ifname);
+	wpas_hidl_notify_dpp_not_compatible(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_missing_auth(const char *ifname)
+void wpas_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_missing_auth(ifname);
+	wpas_hidl_notify_dpp_missing_auth(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_configuration_failure(const char *ifname)
+void wpas_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_configuration_failure(ifname);
+	wpas_hidl_notify_dpp_configuration_failure(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_timeout(const char *ifname)
+void wpas_notify_dpp_timeout(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_timeout(ifname);
+	wpas_hidl_notify_dpp_timeout(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_auth_failure(const char *ifname)
+void wpas_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_auth_failure(ifname);
+	wpas_hidl_notify_dpp_auth_failure(wpa_s);
 #endif /* CONFIG_DPP */
 }
 
-void wpas_notify_dpp_failure(const char *ifname)
+void wpas_notify_dpp_failure(struct wpa_supplicant *wpa_s)
 {
 #ifdef CONFIG_DPP
-	if (!ifname)
+	if (!wpa_s)
 		return;
 
-	wpas_hidl_notify_dpp_fail(ifname);
+	wpas_hidl_notify_dpp_fail(wpa_s);
 #endif /* CONFIG_DPP */
 }
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index b4cb476..703ef8f 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -167,16 +167,16 @@
 void wpas_notify_hs20_rx_deauth_imminent_notice(struct wpa_supplicant *wpa_s,
 						u8 code, u16 reauth_delay,
 						const char *url);
-void wpas_notify_dpp_config_received(const char *ifname,
+void wpas_notify_dpp_config_received(struct wpa_supplicant *wpa_s,
 	    struct wpa_ssid *ssid);
-void wpas_notify_dpp_config_sent(const char *ifname);
-void wpas_notify_dpp_auth_success(const char *ifname);
-void wpas_notify_dpp_resp_pending(const char *ifname);
-void wpas_notify_dpp_not_compatible(const char *ifname);
-void wpas_notify_dpp_missing_auth(const char *ifname);
-void wpas_notify_dpp_configuration_failure(const char *ifname);
-void wpas_notify_dpp_timeout(const char *ifname);
-void wpas_notify_dpp_auth_failure(const char *ifname);
-void wpas_notify_dpp_failure(const char *ifname);
+void wpas_notify_dpp_config_sent(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_auth_success(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_resp_pending(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_not_compatible(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_missing_auth(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_configuration_failure(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_timeout(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_auth_failure(struct wpa_supplicant *wpa_s);
+void wpas_notify_dpp_failure(struct wpa_supplicant *wpa_s);
 
 #endif /* NOTIFY_H */