diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 626783123..c9bbfa93b 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -198,6 +198,7 @@ void handle_probe_req(struct hostapd_data *hapd,
 	struct sta_info *sta = NULL;
 	size_t buflen;
 	size_t i;
+	int noack;
 
 	ie = mgmt->u.probe_req.variable;
 	if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req))
@@ -407,7 +408,13 @@ void handle_probe_req(struct hostapd_data *hapd,
 		pos = hostapd_eid_p2p_manage(hapd, pos);
 #endif /* CONFIG_P2P_MANAGER */
 
-	if (hostapd_drv_send_mlme(hapd, resp, pos - (u8 *) resp, 0) < 0)
+	/*
+	 * If this is a broadcast probe request, apply no ack policy to avoid
+	 * excessive retries.
+	 */
+	noack = !!(elems.ssid_len == 0 && is_broadcast_ether_addr(mgmt->da));
+
+	if (hostapd_drv_send_mlme(hapd, resp, pos - (u8 *) resp, noack) < 0)
 		perror("handle_probe_req: send");
 
 	os_free(resp);