Clarify AP mode Action frame handling

Include only one of hostapd_mgmt_rx() and hostapd_action_rx() functions
in the build. Previously, NEED_AP_MLME builds (i.e., cases where hostapd
AP MLME implementation is included) included both of these functions and
both were tried in sequence. In addition to being difficult to
understand, that could result in unexpected behavior if
hostapd_mgmt_rx() rejected a frame and return 0 to allow
hostapd_action_rx() to attempt to process the frame.

All the operations included in hostapd_action_rx() are supposed to be
available through the hostapd_mgmt_rx() call in handle_action() and
those should result in the exact same Category/Action-based handler
function to be called in the end. As such, this should not result in
different behavior. And if there is a difference, that would be pointing
at a hidden bug that would need to be fixed anyway. Furthermore, builds
without NEED_AP_MLME would not have any difference in behavior or
contents of the binary either.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2019-03-09 12:51:34 +02:00
parent cc833a236c
commit 4d379be4a9

View file

@ -1073,6 +1073,7 @@ fail:
} }
#ifndef NEED_AP_MLME
static void hostapd_action_rx(struct hostapd_data *hapd, static void hostapd_action_rx(struct hostapd_data *hapd,
struct rx_mgmt *drv_mgmt) struct rx_mgmt *drv_mgmt)
{ {
@ -1145,6 +1146,7 @@ static void hostapd_action_rx(struct hostapd_data *hapd,
} }
#endif /* CONFIG_DPP */ #endif /* CONFIG_DPP */
} }
#endif /* NEED_AP_MLME */
#ifdef NEED_AP_MLME #ifdef NEED_AP_MLME
@ -1606,10 +1608,10 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
if (!data->rx_mgmt.frame) if (!data->rx_mgmt.frame)
break; break;
#ifdef NEED_AP_MLME #ifdef NEED_AP_MLME
if (hostapd_mgmt_rx(hapd, &data->rx_mgmt) > 0) hostapd_mgmt_rx(hapd, &data->rx_mgmt);
break; #else /* NEED_AP_MLME */
#endif /* NEED_AP_MLME */
hostapd_action_rx(hapd, &data->rx_mgmt); hostapd_action_rx(hapd, &data->rx_mgmt);
#endif /* NEED_AP_MLME */
break; break;
case EVENT_RX_PROBE_REQ: case EVENT_RX_PROBE_REQ:
if (data->rx_probe_req.sa == NULL || if (data->rx_probe_req.sa == NULL ||