diff options
| author | 2018-10-31 08:19:45 -0700 | |
|---|---|---|
| committer | 2018-10-31 08:19:45 -0700 | |
| commit | 1bd83da389e323bedee528b0001eeaefbf998ca6 (patch) | |
| tree | 37d41154f06b8d42f90f32945f2aeb7d9c5f0691 | |
| parent | 316902da9b78279f362068168c2facc4e154df47 (diff) | |
| parent | 4bff3b4fb662b657b7092aed15c84bef526c26b4 (diff) | |
Merge "Add post fork hook for System Server" am: f2a342b3ab am: a58c2a07c1
am: 4bff3b4fb6
Change-Id: Ia97204dbf4aeaa97d08601aab6bd761cd5cfcea3
| -rw-r--r-- | core/java/com/android/internal/os/Zygote.java | 5 | ||||
| -rw-r--r-- | core/jni/com_android_internal_os_Zygote.cpp | 16 |
2 files changed, 21 insertions, 0 deletions
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index 98b7b5d28779..65213c0a1085 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -216,6 +216,11 @@ public final class Zygote { */ native protected static void nativeUnmountStorageOnInit(); + private static void callPostForkSystemServerHooks() { + // SystemServer specific post fork hooks run before child post fork hooks. + VM_HOOKS.postForkSystemServer(); + } + private static void callPostForkChildHooks(int runtimeFlags, boolean isSystemServer, boolean isZygote, String instructionSet) { VM_HOOKS.postForkChild(runtimeFlags, isSystemServer, isZygote, instructionSet); diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 3e04bb3a2019..4e20e294350f 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -84,6 +84,7 @@ static pid_t gSystemServerPid = 0; static const char kIsolatedStorage[] = "persist.sys.isolated_storage"; static const char kZygoteClassName[] = "com/android/internal/os/Zygote"; static jclass gZygoteClass; +static jmethodID gCallPostForkSystemServerHooks; static jmethodID gCallPostForkChildHooks; static bool g_is_security_enforced = true; @@ -886,6 +887,18 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGi // Unset the SIGCHLD handler, but keep ignoring SIGHUP (rationale in SetSignalHandlers). UnsetChldSignalHandler(); + if (is_system_server) { + env->CallStaticVoidMethod(gZygoteClass, gCallPostForkSystemServerHooks); + if (env->ExceptionCheck()) { + fail_fn("Error calling post fork system server hooks."); + } + // TODO(oth): Remove hardcoded label here (b/117874058). + static const char* kSystemServerLabel = "u:r:system_server:s0"; + if (selinux_android_setcon(kSystemServerLabel) != 0) { + fail_fn(CREATE_ERROR("selinux_android_setcon(%s)", kSystemServerLabel)); + } + } + env->CallStaticVoidMethod(gZygoteClass, gCallPostForkChildHooks, runtime_flags, is_system_server, is_child_zygote, instructionSet); if (env->ExceptionCheck()) { @@ -1181,6 +1194,9 @@ static const JNINativeMethod gMethods[] = { int register_com_android_internal_os_Zygote(JNIEnv* env) { gZygoteClass = MakeGlobalRefOrDie(env, FindClassOrDie(env, kZygoteClassName)); + gCallPostForkSystemServerHooks = GetStaticMethodIDOrDie(env, gZygoteClass, + "callPostForkSystemServerHooks", + "()V"); gCallPostForkChildHooks = GetStaticMethodIDOrDie(env, gZygoteClass, "callPostForkChildHooks", "(IZZLjava/lang/String;)V"); |