diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index d40369c46449..58bf6edfb7ac 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -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 */