From c41958066a5d97f12ffab8deae3058aa19af5a41 Mon Sep 17 00:00:00 2001 From: Sanket Padawe Date: Tue, 27 Jun 2017 14:53:22 -0700 Subject: Fix memory alignment for dispatchImsCdmSms while sending data to vendor code. Test: manually sending sms Change-Id: I04baeace404cbe354745e8e253d18780ef7eacc4 Fix: 62811291 --- libril/ril_service.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/libril/ril_service.cpp b/libril/ril_service.cpp index a8bf9de..b86bfa5 100644 --- a/libril/ril_service.cpp +++ b/libril/ril_service.cpp @@ -2136,9 +2136,13 @@ bool dispatchImsGsmSms(const ImsSmsMessage& message, RequestInfo *pRI) { return true; } +struct ImsCdmaSms { + RIL_IMS_SMS_Message imsSms; + RIL_CDMA_SMS_Message cdmaSms; +}; + bool dispatchImsCdmaSms(const ImsSmsMessage& message, RequestInfo *pRI) { - RIL_IMS_SMS_Message rism = {}; - RIL_CDMA_SMS_Message rcsm = {}; + ImsCdmaSms temp = {}; if (message.cdmaMessage.size() != 1) { RLOGE("dispatchImsCdmaSms: Invalid len %s", requestToString(pRI->pCI->requestNumber)); @@ -2146,15 +2150,20 @@ bool dispatchImsCdmaSms(const ImsSmsMessage& message, RequestInfo *pRI) { return false; } - rism.tech = RADIO_TECH_3GPP2; - rism.retry = BOOL_TO_INT(message.retry); - rism.messageRef = message.messageRef; - rism.message.cdmaMessage = &rcsm; + temp.imsSms.tech = RADIO_TECH_3GPP2; + temp.imsSms.retry = BOOL_TO_INT(message.retry); + temp.imsSms.messageRef = message.messageRef; + temp.imsSms.message.cdmaMessage = &temp.cdmaSms; - constructCdmaSms(rcsm, message.cdmaMessage[0]); + constructCdmaSms(temp.cdmaSms, message.cdmaMessage[0]); - CALL_ONREQUEST(pRI->pCI->requestNumber, &rism, sizeof(RIL_RadioTechnologyFamily) + - sizeof(uint8_t) + sizeof(int32_t) + sizeof(rcsm), pRI, pRI->socket_id); + // Vendor code expects payload length to include actual msg payload + // (sizeof(RIL_CDMA_SMS_Message)) instead of (RIL_CDMA_SMS_Message *) + size of other fields in + // RIL_IMS_SMS_Message + int payloadLen = sizeof(RIL_RadioTechnologyFamily) + sizeof(uint8_t) + sizeof(int32_t) + + sizeof(RIL_CDMA_SMS_Message); + + CALL_ONREQUEST(pRI->pCI->requestNumber, &temp.imsSms, payloadLen, pRI, pRI->socket_id); return true; } -- cgit v1.2.3