diff options
| author | Bala Krishna Bhamidipati <bbhami@codeaurora.org> | 2016-04-07 11:40:06 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-05-01 23:17:44 -0700 |
| commit | 53fd092f22448dc3875eb2de2189d0f4f2e77aec (patch) | |
| tree | d21e615a3a9625117cde5fb6a02dc5e391c9226f | |
| parent | 665a9b8282d48fe4dd4c7fa6d644078028fa7deb (diff) | |
| download | android_external_wpa_supplicant_8-53fd092f22448dc3875eb2de2189d0f4f2e77aec.tar.gz android_external_wpa_supplicant_8-53fd092f22448dc3875eb2de2189d0f4f2e77aec.tar.bz2 android_external_wpa_supplicant_8-53fd092f22448dc3875eb2de2189d0f4f2e77aec.zip | |
eap_proxy: Resolve QMI EAP request length limitation
earlier QMI message QMI_AUTH_SEND_EAP_PACKET_REQ can allow an eap
request packet size of only 256 bytes. Use new msg QMI_AUTH_EAP_
REQ_PACKET_EXT(supports max 4096 bytes) to send larger packets to
QMI.
Change-Id: I833a1b9e232485f3a7987ab824b88832cfd0821b
CRs-Fixed: 992076
| -rw-r--r-- | src/eap_peer/eap_proxy_qmi.c | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/src/eap_peer/eap_proxy_qmi.c b/src/eap_peer/eap_proxy_qmi.c index 21f6b06d..49ecc4df 100644 --- a/src/eap_peer/eap_proxy_qmi.c +++ b/src/eap_peer/eap_proxy_qmi.c @@ -916,7 +916,8 @@ static void handle_qmi_eap_reply( eap_proxy->qmi_state = QMI_STATE_RESP_TIME_OUT; return; } - if(QMI_AUTH_SEND_EAP_PACKET_REQ_V01 != msg_id) + if((QMI_AUTH_SEND_EAP_PACKET_REQ_V01 != msg_id) && + (QMI_AUTH_SEND_EAP_PACKET_EXT_REQ_V01 != msg_id)) { wpa_printf(MSG_ERROR, "eap_proxy: Invalid msgId =%d\n", msg_id); eap_proxy->qmi_state = QMI_STATE_RESP_TIME_OUT; @@ -925,9 +926,10 @@ static void handle_qmi_eap_reply( /* ensure the reply packet exists */ if (rspData->eap_response_pkt_len <= 0 || - rspData->eap_response_pkt_len > QMI_AUTH_EAP_RESP_PACKET_MAX_V01) { + rspData->eap_response_pkt_len > QMI_AUTH_EAP_RESP_PACKET_EXT_MAX_V01) { wpa_printf(MSG_ERROR, "eap_proxy: Reply packet is of" - "invalid length\n"); + "invalid length %d error %d result %d\n", + rspData->eap_response_pkt_len, rspData->resp.error, rspData->resp.result); eap_proxy->qmi_state = QMI_STATE_RESP_TIME_OUT; return; } @@ -972,8 +974,9 @@ static enum eap_proxy_status eap_proxy_process(struct eap_proxy_sm *eap_proxy, auth_send_eap_packet_resp_msg_v01 eap_send_packet_resp; qmi_txn_handle async_txn_hdl = 0; - os_memset(&eap_send_packet_req, 0, sizeof(auth_send_eap_packet_req_msg_v01)); - os_memset(&eap_send_packet_resp, 0, sizeof(auth_send_eap_packet_resp_msg_v01)); + auth_send_eap_packet_ext_req_msg_v01 eap_send_packet_ext_req; + auth_send_eap_packet_ext_resp_msg_v01 eap_send_packet_ext_resp; + hdr = (struct eap_hdr *)eapReqData; if ((EAP_CODE_REQUEST == hdr->code) && @@ -1005,8 +1008,15 @@ static enum eap_proxy_status eap_proxy_process(struct eap_proxy_sm *eap_proxy, wpa_printf(MSG_ERROR, "eap_proxy: ***********Dump ReqData len %d***********", eapReqDataLen); dump_buff(eapReqData, eapReqDataLen); if (eapReqDataLen <= QMI_AUTH_EAP_REQ_PACKET_MAX_V01) { + os_memset(&eap_send_packet_req, 0, sizeof(auth_send_eap_packet_req_msg_v01)); + os_memset(&eap_send_packet_resp, 0, sizeof(auth_send_eap_packet_resp_msg_v01)); eap_send_packet_req.eap_request_pkt_len = eapReqDataLen ; memcpy(eap_send_packet_req.eap_request_pkt, eapReqData, eapReqDataLen); + } else if (eapReqDataLen <= QMI_AUTH_EAP_REQ_PACKET_EXT_MAX_V01) { + os_memset(&eap_send_packet_ext_req, 0, sizeof(auth_send_eap_packet_ext_req_msg_v01)); + os_memset(&eap_send_packet_ext_resp, 0, sizeof(auth_send_eap_packet_ext_resp_msg_v01)); + eap_send_packet_ext_req.eap_request_ext_pkt_len = eapReqDataLen; + memcpy(eap_send_packet_ext_req.eap_request_ext_pkt, eapReqData, eapReqDataLen); } else { wpa_printf(MSG_ERROR, "eap_proxy: Error in eap_send_packet_req\n"); return EAP_PROXY_FAILURE; @@ -1022,15 +1032,27 @@ static enum eap_proxy_status eap_proxy_process(struct eap_proxy_sm *eap_proxy, wpa_printf (MSG_ERROR, "eap_proxy: In eap_proxy_process case %d\n", hdr->code); eap_proxy->qmi_state = QMI_STATE_RESP_PENDING; - qmiErrorCode = qmi_client_send_msg_async(eap_proxy->qmi_auth_svc_client_ptr[eap_proxy->user_selected_sim], - QMI_AUTH_SEND_EAP_PACKET_REQ_V01, - (void *) &eap_send_packet_req, - sizeof(auth_send_eap_packet_req_msg_v01), - (void *) &eap_send_packet_resp, - sizeof(auth_send_eap_packet_resp_msg_v01), - &handle_qmi_eap_reply, eap_proxy, - &async_txn_hdl); - + if(eapReqDataLen <= QMI_AUTH_EAP_REQ_PACKET_MAX_V01) { + qmiErrorCode = qmi_client_send_msg_async( + eap_proxy->qmi_auth_svc_client_ptr[eap_proxy->user_selected_sim], + QMI_AUTH_SEND_EAP_PACKET_REQ_V01, + (void *) &eap_send_packet_req, + sizeof(auth_send_eap_packet_req_msg_v01), + (void *) &eap_send_packet_resp, + sizeof(auth_send_eap_packet_resp_msg_v01), + &handle_qmi_eap_reply, eap_proxy, + &async_txn_hdl); + } else if(eapReqDataLen <= QMI_AUTH_EAP_REQ_PACKET_EXT_MAX_V01) { + qmiErrorCode = qmi_client_send_msg_async( + eap_proxy->qmi_auth_svc_client_ptr[eap_proxy->user_selected_sim], + QMI_AUTH_SEND_EAP_PACKET_EXT_REQ_V01, + (void *) &eap_send_packet_ext_req, + sizeof(auth_send_eap_packet_ext_req_msg_v01), + (void *) &eap_send_packet_ext_resp, + sizeof(auth_send_eap_packet_ext_resp_msg_v01), + &handle_qmi_eap_reply, eap_proxy, + &async_txn_hdl); + } if (QMI_NO_ERR != qmiErrorCode) { wpa_printf(MSG_ERROR, "QMI-ERROR Error in sending EAP packet;" |
