Merge "qcacld-3.0: Remove obsolete STA support for SIOCSIWGENIE" into wlan-cld3.driver.lnx.2.0-dev

This commit is contained in:
CNSS_WLAN Service 2017-10-20 00:02:12 -07:00 • committed by Gerrit - the friendly Code Review server
commit f7cf3ea9f0

View file

@ -5342,201 +5342,6 @@ static int iw_set_bitrate(struct net_device *dev,
return ret;
}
/**
* __iw_set_genie() - SIOCSIWGENIE ioctl handler
* @dev: device upon which the ioctl was received
* @info: ioctl request information
* @wrqu: ioctl request data
* @extra: ioctl extra data
*
* Return: 0 on success, non-zero on error
*/
static int __iw_set_genie(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
struct hdd_adapter *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
struct hdd_wext_state *pWextState =
WLAN_HDD_GET_WEXT_STATE_PTR(adapter);
uint8_t *genie = NULL;
uint8_t *base_genie = NULL;
uint16_t remLen;
struct hdd_context *hdd_ctx;
int ret;
ENTER_DEV(dev);
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
ret = wlan_hdd_validate_context(hdd_ctx);
if (0 != ret)
return ret;
ret = hdd_check_standard_wext_control(hdd_ctx, info);
if (0 != ret)
return ret;
if (!wrqu->data.length) {
hdd_clear_roam_profile_ie(adapter);
EXIT();
return 0;
}
base_genie = mem_alloc_copy_from_user_helper(wrqu->data.pointer,
wrqu->data.length);
if (NULL == base_genie) {
hdd_err("mem_alloc_copy_from_user_helper fail");
return -ENOMEM;
}
genie = base_genie;
remLen = wrqu->data.length;
hdd_debug("iw_set_genie ioctl IE[0x%X], LEN[%d]", genie[0],
genie[1]);
/* clear any previous genIE before this call */
memset(&pWextState->genIE, 0, sizeof(pWextState->genIE));
while (remLen >= 2) {
uint16_t eLen = 0;
uint8_t elementId;
elementId = *genie++;
eLen = *genie++;
remLen -= 2;
hdd_debug("IE[0x%X], LEN[%d]", elementId, eLen);
if (remLen < eLen) {
hdd_err("Remaining len: %u less than ie len: %u",
remLen, eLen);
ret = -EINVAL;
goto exit;
}
switch (elementId) {
case IE_EID_VENDOR:
/* should have at least OUI */
if ((IE_LEN_SIZE + IE_EID_SIZE + IE_VENDOR_OUI_SIZE) > eLen) {
ret = -EINVAL;
goto exit;
}
if (0 == memcmp(&genie[0], "\x00\x50\xf2\x04", 4)) {
uint16_t curGenIELen = pWextState->genIE.length;
hdd_debug("Set WPS OUI(%02x %02x %02x %02x) IE(len %d)",
genie[0], genie[1], genie[2],
genie[3], eLen + 2);
if (SIR_MAC_MAX_IE_LENGTH <
(pWextState->genIE.length + eLen)) {
hdd_err("genIE. Need bigger buffer space");
QDF_ASSERT(0);
ret = -ENOMEM;
goto exit;
}
/* save to Additional IE; it should be
* accumulated to handle WPS IE + other IE
*/
memcpy(pWextState->genIE.addIEdata +
curGenIELen, genie - 2, eLen + 2);
pWextState->genIE.length += eLen + 2;
} else if (0 == memcmp(&genie[0], "\x00\x50\xf2", 3)) {
hdd_debug("Set WPA IE (len %d)", eLen + 2);
if ((eLen + 2) > (sizeof(pWextState->WPARSNIE))) {
hdd_err("genIE, Need bigger buffer space");
ret = -EINVAL;
QDF_ASSERT(0);
goto exit;
}
memset(pWextState->WPARSNIE, 0,
MAX_WPA_RSN_IE_LEN);
memcpy(pWextState->WPARSNIE, genie - 2,
(eLen + 2));
pWextState->roamProfile.pWPAReqIE =
pWextState->WPARSNIE;
pWextState->roamProfile.nWPAReqIELength =
eLen + 2;
} else {
/* any vendorId except WPA IE should
* be accumulated to genIE
*/
uint16_t curGenIELen = pWextState->genIE.length;
hdd_debug("Set OUI(%02x %02x %02x %02x) IE(len %d)",
genie[0], genie[1], genie[2],
genie[3], eLen + 2);
if (SIR_MAC_MAX_IE_LENGTH <
(pWextState->genIE.length + eLen)) {
hdd_err("genIE. Need bigger buffer space");
QDF_ASSERT(0);
ret = -ENOMEM;
goto exit;
}
/* save to Additional IE; it should be
* accumulated to handle WPS IE + other IE
*/
memcpy(pWextState->genIE.addIEdata +
curGenIELen, genie - 2, eLen + 2);
pWextState->genIE.length += eLen + 2;
}
break;
case DOT11F_EID_RSN:
hdd_debug("Set RSN IE (len %d)", eLen + 2);
if ((eLen + 2) > (sizeof(pWextState->WPARSNIE))) {
hdd_err("genIE, Need bigger buffer space");
ret = -EINVAL;
QDF_ASSERT(0);
goto exit;
}
memset(pWextState->WPARSNIE, 0, MAX_WPA_RSN_IE_LEN);
memcpy(pWextState->WPARSNIE, genie - 2, (eLen + 2));
pWextState->roamProfile.pRSNReqIE =
pWextState->WPARSNIE;
pWextState->roamProfile.nRSNReqIELength = eLen + 2;
break;
default:
hdd_err("Set UNKNOWN IE %X", elementId);
goto exit;
}
remLen -= eLen;
/* Move genie only if next element is present */
if (remLen >= 2)
genie += eLen;
}
exit:
EXIT();
qdf_mem_free(base_genie);
return ret;
}
/**
* iw_set_genie() - SSR wrapper for __iw_set_genie()
* @dev: pointer to net_device
* @info: pointer to iw_request_info
* @wrqu: pointer to iwreq_data
* @extra: pointer to extra ioctl payload
*
* Return: 0 on success, error number otherwise
*/
static int iw_set_genie(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
{
int ret;
cds_ssr_protect(__func__);
ret = __iw_set_genie(dev, info, wrqu, extra);
cds_ssr_unprotect(__func__);
return ret;
}
/**
* __iw_get_encode() - SIOCGIWENCODE ioctl handler
* @dev: device upon which the ioctl was received
@ -12820,7 +12625,7 @@ static const iw_handler we_handler[] = {
(iw_handler) iw_get_power_mode, /* SIOCGIWPOWER */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) iw_set_genie, /* SIOCSIWGENIE */
(iw_handler) NULL, /* SIOCSIWGENIE */
(iw_handler) NULL, /* SIOCGIWGENIE */
(iw_handler) NULL, /* SIOCSIWAUTH */
(iw_handler) NULL, /* SIOCGIWAUTH */