resolve merge conflicts of d027477 to nyc-mr1-dev-plus-aosp
am: 5d6ef97672
Change-Id: Id8844f27c56acd111a975d7a74153b5289281bb8
diff --git a/include/telephony/ril.h b/include/telephony/ril.h
index 736f487..c9efcee 100644
--- a/include/telephony/ril.h
+++ b/include/telephony/ril.h
@@ -342,7 +342,17 @@
PREF_NET_TYPE_LTE_GSM_WCDMA = 9, /* LTE, GSM/WCDMA */
PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA = 10, /* LTE, CDMA, EvDo, GSM/WCDMA */
PREF_NET_TYPE_LTE_ONLY = 11, /* LTE only */
- PREF_NET_TYPE_LTE_WCDMA = 12 /* LTE/WCDMA */
+ PREF_NET_TYPE_LTE_WCDMA = 12, /* LTE/WCDMA */
+ PREF_NET_TYPE_TD_SCDMA_ONLY = 13, /* TD-SCDMA only */
+ PREF_NET_TYPE_TD_SCDMA_WCDMA = 14, /* TD-SCDMA and WCDMA */
+ PREF_NET_TYPE_TD_SCDMA_LTE = 15, /* TD-SCDMA and LTE */
+ PREF_NET_TYPE_TD_SCDMA_GSM = 16, /* TD-SCDMA and GSM */
+ PREF_NET_TYPE_TD_SCDMA_GSM_LTE = 17, /* TD-SCDMA,GSM and LTE */
+ PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA = 18, /* TD-SCDMA, GSM/WCDMA */
+ PREF_NET_TYPE_TD_SCDMA_WCDMA_LTE = 19, /* TD-SCDMA, WCDMA and LTE */
+ PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_LTE = 20, /* TD-SCDMA, GSM/WCDMA and LTE */
+ PREF_NET_TYPE_TD_SCDMA_GSM_WCDMA_CDMA_EVDO_AUTO = 21, /* TD-SCDMA, GSM/WCDMA, CDMA and EvDo */
+ PREF_NET_TYPE_TD_SCDMA_LTE_CDMA_EVDO_GSM_WCDMA = 22 /* TD-SCDMA, LTE, CDMA, EvDo GSM/WCDMA */
} RIL_PreferredNetworkType;
/* Source for cdma subscription */
@@ -4598,7 +4608,7 @@
* RIL_REQUEST_VOICE_RADIO_TECH
*
* Query the radio technology type (3GPP/3GPP2) used for voice. Query is valid only
- * when radio state is RADIO_STATE_ON
+ * when radio state is not RADIO_STATE_UNAVAILABLE
*
* "data" is NULL
* "response" is int *
diff --git a/libril/RilSapSocket.cpp b/libril/RilSapSocket.cpp
index 58b4f51..3a66f8c 100644
--- a/libril/RilSapSocket.cpp
+++ b/libril/RilSapSocket.cpp
@@ -85,7 +85,9 @@
const void *data,
size_t datalen) {
RilSapSocket *sap_socket = getSocketById(RIL_SOCKET_1);
- sap_socket->onUnsolicitedResponse(unsolResponse, (void *)data, datalen);
+ if(sap_socket){
+ sap_socket->onUnsolicitedResponse(unsolResponse, (void *)data, datalen);
+ }
}
#endif
@@ -248,7 +250,7 @@
int per_line = 0;
do {
- dest += sprintf(out, "%8.8s [%8.8x] ", who, source);
+ dest += snprintf(out, sizeof(out), "%8.8s [%8.8x] ", who, source);
for(; source < length && dest_len - dest > 3 && per_line < BYTES_PER_LINE; source++,
per_line ++) {
out[dest++] = HEX_HIGH(buffer[source]);
diff --git a/libril/ril.cpp b/libril/ril.cpp
index a5e6600..710cf25 100644
--- a/libril/ril.cpp
+++ b/libril/ril.cpp
@@ -1721,12 +1721,12 @@
static void dispatchVoiceRadioTech(Parcel& p, RequestInfo *pRI) {
RIL_RadioState state = CALL_ONSTATEREQUEST((RIL_SOCKET_ID)pRI->socket_id);
- if ((RADIO_STATE_UNAVAILABLE == state) || (RADIO_STATE_OFF == state)) {
+ if (RADIO_STATE_UNAVAILABLE == state) {
RIL_onRequestComplete(pRI, RIL_E_RADIO_NOT_AVAILABLE, NULL, 0);
}
- // RILs that support RADIO_STATE_ON should support this request.
- if (RADIO_STATE_ON == state) {
+ // If radio is available then RIL should support this request.
+ if ((RADIO_STATE_ON == state) || (RADIO_STATE_OFF == state)){
dispatchVoid(p, pRI);
return;
}
diff --git a/reference-ril/reference-ril.c b/reference-ril/reference-ril.c
index 7b1dc16..dc85529 100644
--- a/reference-ril/reference-ril.c
+++ b/reference-ril/reference-ril.c
@@ -543,23 +543,27 @@
err = at_tok_nextstr(&line, &out);
if (err < 0)
goto error;
- responses[i].type = alloca(strlen(out) + 1);
- strcpy(responses[i].type, out);
+
+ int type_size = strlen(out) + 1;
+ responses[i].type = alloca(type_size);
+ strlcpy(responses[i].type, out, type_size);
// APN ignored for v5
err = at_tok_nextstr(&line, &out);
if (err < 0)
goto error;
- responses[i].ifname = alloca(strlen(PPP_TTY_PATH) + 1);
- strcpy(responses[i].ifname, PPP_TTY_PATH);
+ int ifname_size = strlen(PPP_TTY_PATH) + 1;
+ responses[i].ifname = alloca(ifname_size);
+ strlcpy(responses[i].ifname, PPP_TTY_PATH, ifname_size);
err = at_tok_nextstr(&line, &out);
if (err < 0)
goto error;
- responses[i].addresses = alloca(strlen(out) + 1);
- strcpy(responses[i].addresses, out);
+ int addresses_size = strlen(out) + 1;
+ responses[i].addresses = alloca(addresses_size);
+ strlcpy(responses[i].addresses, out, addresses_size);
if (isInEmulator()) {
/* We are in the emulator - the dns servers are listed
diff --git a/rild/Android.mk b/rild/Android.mk
index b8de0bd..37f1153 100644
--- a/rild/Android.mk
+++ b/rild/Android.mk
@@ -6,14 +6,14 @@
LOCAL_SRC_FILES:= \
rild.c
-
LOCAL_SHARED_LIBRARIES := \
- liblog \
libcutils \
- libril \
- libdl
+ libdl \
+ liblog \
+ libminijail \
+ libril
-# temporary hack for broken vendor rils
+# Temporary hack for broken vendor RILs.
LOCAL_WHOLE_STATIC_LIBRARIES := \
librilutils_static
diff --git a/rild/rild.c b/rild/rild.c
index 12fda88..7bd525f 100644
--- a/rild/rild.c
+++ b/rild/rild.c
@@ -33,6 +33,7 @@
#include <sys/prctl.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <libminijail.h>
#include <libril/ril_ex.h>
#include <private/android_filesystem_config.h>
@@ -102,34 +103,13 @@
*/
void switchUser() {
char debuggable[PROP_VALUE_MAX];
+ struct minijail *j = minijail_new();
+ minijail_change_uid(j, AID_RADIO);
+ minijail_use_caps(j, CAP_MASK_LONG(CAP_BLOCK_SUSPEND) |
+ CAP_MASK_LONG(CAP_NET_ADMIN) |
+ CAP_MASK_LONG(CAP_NET_RAW));
- prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
- if (setresuid(AID_RADIO, AID_RADIO, AID_RADIO) == -1) {
- RLOGE("setresuid failed: %s", strerror(errno));
- exit(EXIT_FAILURE);
- }
-
- struct __user_cap_header_struct header;
- memset(&header, 0, sizeof(header));
- header.version = _LINUX_CAPABILITY_VERSION_3;
- header.pid = 0;
-
- struct __user_cap_data_struct data[MAX_CAP_NUM];
- memset(&data, 0, sizeof(data));
-
- data[CAP_TO_INDEX(CAP_NET_ADMIN)].effective |= CAP_TO_MASK(CAP_NET_ADMIN);
- data[CAP_TO_INDEX(CAP_NET_ADMIN)].permitted |= CAP_TO_MASK(CAP_NET_ADMIN);
-
- data[CAP_TO_INDEX(CAP_NET_RAW)].effective |= CAP_TO_MASK(CAP_NET_RAW);
- data[CAP_TO_INDEX(CAP_NET_RAW)].permitted |= CAP_TO_MASK(CAP_NET_RAW);
-
- data[CAP_TO_INDEX(CAP_BLOCK_SUSPEND)].effective |= CAP_TO_MASK(CAP_BLOCK_SUSPEND);
- data[CAP_TO_INDEX(CAP_BLOCK_SUSPEND)].permitted |= CAP_TO_MASK(CAP_BLOCK_SUSPEND);
-
- if (capset(&header, &data[0]) == -1) {
- RLOGE("capset failed: %s", strerror(errno));
- exit(EXIT_FAILURE);
- }
+ minijail_enter(j);
/*
* Debuggable build only:
@@ -142,7 +122,7 @@
}
int main(int argc, char **argv) {
- const char * rilLibPath = NULL;
+ const char *rilLibPath = NULL;
char **rilArgv;
void *dlHandle;
const RIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **);
@@ -239,7 +219,7 @@
}
rilArgv[argc++] = "-c";
- rilArgv[argc++] = clientId;
+ rilArgv[argc++] = (char*)clientId;
RLOGD("RIL_Init argc = %d clientId = %s", argc, rilArgv[argc-1]);
// Make sure there's a reasonable argv[0]