nl80211: Simplify event processing error paths

These are practically unreachable code since cfg80211 fills in the
required attributes or does not send the event. Keep the checks in
place, but minimize the extra code in wpa_supplicant/hostapd.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2015-01-05 13:40:07 +02:00
parent 38751d8bd5
commit dcf8fbc058

View file

@ -180,34 +180,23 @@ static void mlme_event_auth(struct wpa_driver_nl80211_data *drv,
}
static int nl80211_parse_wmm_params(struct nlattr *wmm_attr,
struct wmm_params *wmm_params)
static void nl80211_parse_wmm_params(struct nlattr *wmm_attr,
struct wmm_params *wmm_params)
{
struct nlattr *wmm_info[NL80211_STA_WME_MAX + 1];
static struct nla_policy wme_policy[NL80211_STA_WME_MAX + 1] = {
[NL80211_STA_WME_UAPSD_QUEUES] = { .type = NLA_U8 },
};
if (!wmm_attr) {
wpa_printf(MSG_DEBUG, "nl80211: WMM data missing");
return -1;
}
if (nla_parse_nested(wmm_info, NL80211_STA_WME_MAX, wmm_attr,
wme_policy)) {
wpa_printf(MSG_DEBUG,
"nl80211: Failed to parse nested attributes");
return -1;
}
if (!wmm_info[NL80211_STA_WME_UAPSD_QUEUES])
return -1;
if (!wmm_attr ||
nla_parse_nested(wmm_info, NL80211_STA_WME_MAX, wmm_attr,
wme_policy) ||
!wmm_info[NL80211_STA_WME_UAPSD_QUEUES])
return;
wmm_params->uapsd_queues =
nla_get_u8(wmm_info[NL80211_STA_WME_UAPSD_QUEUES]);
wmm_params->info_bitmap |= WMM_PARAMS_UAPSD_QUEUES_INFO;
return 0;
}
@ -1104,10 +1093,8 @@ static void nl80211_new_peer_candidate(struct wpa_driver_nl80211_data *drv,
const u8 *addr;
union wpa_event_data data;
if (drv->nlmode != NL80211_IFTYPE_MESH_POINT)
return;
if (!tb[NL80211_ATTR_MAC] || !tb[NL80211_ATTR_IE])
if (drv->nlmode != NL80211_IFTYPE_MESH_POINT ||
!tb[NL80211_ATTR_MAC] || !tb[NL80211_ATTR_IE])
return;
addr = nla_data(tb[NL80211_ATTR_MAC]);
@ -1201,14 +1188,11 @@ static void nl80211_rekey_offload_event(struct wpa_driver_nl80211_data *drv,
};
union wpa_event_data data;
if (!tb[NL80211_ATTR_MAC])
return;
if (!tb[NL80211_ATTR_REKEY_DATA])
return;
if (nla_parse_nested(rekey_info, MAX_NL80211_REKEY_DATA,
tb[NL80211_ATTR_REKEY_DATA], rekey_policy))
return;
if (!rekey_info[NL80211_REKEY_DATA_REPLAY_CTR])
if (!tb[NL80211_ATTR_MAC] ||
!tb[NL80211_ATTR_REKEY_DATA] ||
nla_parse_nested(rekey_info, MAX_NL80211_REKEY_DATA,
tb[NL80211_ATTR_REKEY_DATA], rekey_policy) ||
!rekey_info[NL80211_REKEY_DATA_REPLAY_CTR])
return;
os_memset(&data, 0, sizeof(data));
@ -1239,12 +1223,10 @@ static void nl80211_pmksa_candidate_event(struct wpa_driver_nl80211_data *drv,
wpa_printf(MSG_DEBUG, "nl80211: PMKSA candidate event");
if (!tb[NL80211_ATTR_PMKSA_CANDIDATE])
return;
if (nla_parse_nested(cand, MAX_NL80211_PMKSA_CANDIDATE,
tb[NL80211_ATTR_PMKSA_CANDIDATE], cand_policy))
return;
if (!cand[NL80211_PMKSA_CANDIDATE_INDEX] ||
if (!tb[NL80211_ATTR_PMKSA_CANDIDATE] ||
nla_parse_nested(cand, MAX_NL80211_PMKSA_CANDIDATE,
tb[NL80211_ATTR_PMKSA_CANDIDATE], cand_policy) ||
!cand[NL80211_PMKSA_CANDIDATE_INDEX] ||
!cand[NL80211_PMKSA_CANDIDATE_BSSID])
return;
@ -1502,10 +1484,8 @@ static void qca_nl80211_acs_select_ch(struct wpa_driver_nl80211_data *drv,
"nl80211: ACS channel selection vendor event received");
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_MAX,
(struct nlattr *) data, len, NULL))
return;
if (!tb[QCA_WLAN_VENDOR_ATTR_ACS_PRIMARY_CHANNEL] ||
(struct nlattr *) data, len, NULL) ||
!tb[QCA_WLAN_VENDOR_ATTR_ACS_PRIMARY_CHANNEL] ||
!tb[QCA_WLAN_VENDOR_ATTR_ACS_SECONDARY_CHANNEL])
return;
@ -1529,9 +1509,8 @@ static void qca_nl80211_key_mgmt_auth(struct wpa_driver_nl80211_data *drv,
"nl80211: Key management roam+auth vendor event received");
if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_MAX,
(struct nlattr *) data, len, NULL))
return;
if (!tb[QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID] ||
(struct nlattr *) data, len, NULL) ||
!tb[QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID] ||
nla_len(tb[QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID]) != ETH_ALEN ||
!tb[QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_REQ_IE] ||
!tb[QCA_WLAN_VENDOR_ATTR_ROAM_AUTH_RESP_IE] ||