diff options
author | Sanket Padawe <sanketpadawe@google.com> | 2017-06-27 14:53:22 -0700 |
---|---|---|
committer | Sanket Padawe <sanketpadawe@google.com> | 2017-06-27 17:23:13 -0700 |
commit | c41958066a5d97f12ffab8deae3058aa19af5a41 (patch) | |
tree | 6ef037f57b46a1a21fd5f5711c956fd03804f6d3 | |
parent | ccb6d7fbf4581578cb67b046e556ba15381b764e (diff) | |
download | android_hardware_ril-c41958066a5d97f12ffab8deae3058aa19af5a41.tar.gz android_hardware_ril-c41958066a5d97f12ffab8deae3058aa19af5a41.tar.bz2 android_hardware_ril-c41958066a5d97f12ffab8deae3058aa19af5a41.zip |
Fix memory alignment for dispatchImsCdmSms while sending data to vendor code.
Test: manually sending sms
Change-Id: I04baeace404cbe354745e8e253d18780ef7eacc4
Fix: 62811291
-rw-r--r-- | libril/ril_service.cpp | 27 |
1 files 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; } |