summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanket Padawe <sanketpadawe@google.com>2017-06-27 14:53:22 -0700
committerSanket Padawe <sanketpadawe@google.com>2017-06-27 17:23:13 -0700
commitc41958066a5d97f12ffab8deae3058aa19af5a41 (patch)
tree6ef037f57b46a1a21fd5f5711c956fd03804f6d3
parentccb6d7fbf4581578cb67b046e556ba15381b764e (diff)
downloadandroid_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.cpp27
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;
}