WPS: Share a single error handling path in wps_set_ie()

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2021-03-28 18:26:19 +03:00
parent 7ed1cb8933
commit 93576264bc

View file

@ -1320,13 +1320,9 @@ static int wps_set_ie(struct wps_registrar *reg)
} }
beacon = wpabuf_alloc(400 + vendor_len); beacon = wpabuf_alloc(400 + vendor_len);
if (beacon == NULL)
return -1;
probe = wpabuf_alloc(500 + vendor_len); probe = wpabuf_alloc(500 + vendor_len);
if (probe == NULL) { if (!beacon || !probe)
wpabuf_free(beacon); goto fail;
return -1;
}
auth_macs = wps_authorized_macs(reg, &count); auth_macs = wps_authorized_macs(reg, &count);
@ -1342,19 +1338,13 @@ static int wps_set_ie(struct wps_registrar *reg)
(reg->dualband && wps_build_rf_bands(&reg->wps->dev, beacon, 0)) || (reg->dualband && wps_build_rf_bands(&reg->wps->dev, beacon, 0)) ||
wps_build_wfa_ext(beacon, 0, auth_macs, count, 0) || wps_build_wfa_ext(beacon, 0, auth_macs, count, 0) ||
wps_build_vendor_ext(&reg->wps->dev, beacon) || wps_build_vendor_ext(&reg->wps->dev, beacon) ||
wps_build_application_ext(&reg->wps->dev, beacon)) { wps_build_application_ext(&reg->wps->dev, beacon))
wpabuf_free(beacon); goto fail;
wpabuf_free(probe);
return -1;
}
#ifdef CONFIG_P2P #ifdef CONFIG_P2P
if (wps_build_dev_name(&reg->wps->dev, beacon) || if (wps_build_dev_name(&reg->wps->dev, beacon) ||
wps_build_primary_dev_type(&reg->wps->dev, beacon)) { wps_build_primary_dev_type(&reg->wps->dev, beacon))
wpabuf_free(beacon); goto fail;
wpabuf_free(probe);
return -1;
}
#endif /* CONFIG_P2P */ #endif /* CONFIG_P2P */
wpa_printf(MSG_DEBUG, "WPS: Build Probe Response IEs"); wpa_printf(MSG_DEBUG, "WPS: Build Probe Response IEs");
@ -1373,22 +1363,20 @@ static int wps_set_ie(struct wps_registrar *reg)
(reg->dualband && wps_build_rf_bands(&reg->wps->dev, probe, 0)) || (reg->dualband && wps_build_rf_bands(&reg->wps->dev, probe, 0)) ||
wps_build_wfa_ext(probe, 0, auth_macs, count, 0) || wps_build_wfa_ext(probe, 0, auth_macs, count, 0) ||
wps_build_vendor_ext(&reg->wps->dev, probe) || wps_build_vendor_ext(&reg->wps->dev, probe) ||
wps_build_application_ext(&reg->wps->dev, probe)) { wps_build_application_ext(&reg->wps->dev, probe))
wpabuf_free(beacon); goto fail;
wpabuf_free(probe);
return -1;
}
beacon = wps_ie_encapsulate(beacon); beacon = wps_ie_encapsulate(beacon);
probe = wps_ie_encapsulate(probe); probe = wps_ie_encapsulate(probe);
if (!beacon || !probe) { if (!beacon || !probe)
wpabuf_free(beacon); goto fail;
wpabuf_free(probe);
return -1;
}
return wps_cb_set_ie(reg, beacon, probe); return wps_cb_set_ie(reg, beacon, probe);
fail:
wpabuf_free(beacon);
wpabuf_free(probe);
return -1;
} }