PreInitializeNativeBridge only if its Available
Also, assert that we always have a private application directory for non
system_server case.
Bug: 18027433
(cherry picked from commit 79ec4c15ab)
Change-Id: I9ce578949dbe522d5033465df7ca49fdd3aa3cbf
This commit is contained in:
@@ -436,6 +436,10 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
|
||||
pid_t pid = fork();
|
||||
|
||||
if (pid == 0) {
|
||||
if (!is_system_server && dataDir == NULL) {
|
||||
ALOGE("Application private dir cannot be null");
|
||||
RuntimeAbort(env);
|
||||
}
|
||||
// The child process.
|
||||
gMallocLeakZygoteChild = 1;
|
||||
|
||||
@@ -452,14 +456,15 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
|
||||
|
||||
DropCapabilitiesBoundingSet(env);
|
||||
|
||||
bool need_native_bridge = false;
|
||||
if (instructionSet != NULL) {
|
||||
bool use_native_bridge = !is_system_server && (instructionSet != NULL)
|
||||
&& android::NativeBridgeAvailable();
|
||||
if (use_native_bridge) {
|
||||
ScopedUtfChars isa_string(env, instructionSet);
|
||||
need_native_bridge = android::NeedsNativeBridge(isa_string.c_str());
|
||||
use_native_bridge = android::NeedsNativeBridge(isa_string.c_str());
|
||||
}
|
||||
|
||||
if (!MountEmulatedStorage(uid, mount_external, need_native_bridge)) {
|
||||
ALOGW("Failed to mount emulated storage: %d", errno);
|
||||
if (!MountEmulatedStorage(uid, mount_external, use_native_bridge)) {
|
||||
ALOGW("Failed to mount emulated storage: %s", strerror(errno));
|
||||
if (errno == ENOTCONN || errno == EROFS) {
|
||||
// When device is actively encrypting, we get ENOTCONN here
|
||||
// since FUSE was mounted before the framework restarted.
|
||||
@@ -487,15 +492,10 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra
|
||||
|
||||
SetRLimits(env, javaRlimits);
|
||||
|
||||
if (!is_system_server && need_native_bridge) {
|
||||
// Set the environment for the apps running with native bridge.
|
||||
ScopedUtfChars isa_string(env, instructionSet); // Known non-null because of need_native_...
|
||||
if (dataDir == NULL) {
|
||||
android::PreInitializeNativeBridge(NULL, isa_string.c_str());
|
||||
} else {
|
||||
ScopedUtfChars data_dir(env, dataDir);
|
||||
android::PreInitializeNativeBridge(data_dir.c_str(), isa_string.c_str());
|
||||
}
|
||||
if (use_native_bridge) {
|
||||
ScopedUtfChars isa_string(env, instructionSet);
|
||||
ScopedUtfChars data_dir(env, dataDir);
|
||||
android::PreInitializeNativeBridge(data_dir.c_str(), isa_string.c_str());
|
||||
}
|
||||
|
||||
int rc = setresgid(gid, gid, gid);
|
||||
|
||||
Reference in New Issue
Block a user