Merge "[GWP-ASan] Use new GWP-ASan android_mallopt()" am: a50c4137e3
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2040626 Change-Id: I2938b379266633eeb74b9cb5619298920e18480f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -110,6 +110,8 @@ using android::base::GetBoolProperty;
|
|||||||
|
|
||||||
using android::zygote::ZygoteFailure;
|
using android::zygote::ZygoteFailure;
|
||||||
|
|
||||||
|
using Action = android_mallopt_gwp_asan_options_t::Action;
|
||||||
|
|
||||||
// This type is duplicated in fd_utils.h
|
// This type is duplicated in fd_utils.h
|
||||||
typedef const std::function<void(std::string)>& fail_fn_t;
|
typedef const std::function<void(std::string)>& fail_fn_t;
|
||||||
|
|
||||||
@@ -1717,16 +1719,24 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids,
|
|||||||
// runtime.
|
// runtime.
|
||||||
runtime_flags &= ~RuntimeFlags::NATIVE_HEAP_ZERO_INIT;
|
runtime_flags &= ~RuntimeFlags::NATIVE_HEAP_ZERO_INIT;
|
||||||
|
|
||||||
bool forceEnableGwpAsan = false;
|
const char* nice_name_ptr = nice_name.has_value() ? nice_name.value().c_str() : nullptr;
|
||||||
|
android_mallopt_gwp_asan_options_t gwp_asan_options;
|
||||||
|
// The system server doesn't have its nice name set by the time SpecializeCommon is called.
|
||||||
|
gwp_asan_options.program_name = nice_name_ptr ?: process_name;
|
||||||
switch (runtime_flags & RuntimeFlags::GWP_ASAN_LEVEL_MASK) {
|
switch (runtime_flags & RuntimeFlags::GWP_ASAN_LEVEL_MASK) {
|
||||||
default:
|
default:
|
||||||
case RuntimeFlags::GWP_ASAN_LEVEL_NEVER:
|
case RuntimeFlags::GWP_ASAN_LEVEL_NEVER:
|
||||||
|
gwp_asan_options.desire = Action::DONT_TURN_ON_UNLESS_OVERRIDDEN;
|
||||||
|
android_mallopt(M_INITIALIZE_GWP_ASAN, &gwp_asan_options, sizeof(gwp_asan_options));
|
||||||
break;
|
break;
|
||||||
case RuntimeFlags::GWP_ASAN_LEVEL_ALWAYS:
|
case RuntimeFlags::GWP_ASAN_LEVEL_ALWAYS:
|
||||||
forceEnableGwpAsan = true;
|
gwp_asan_options.desire = Action::TURN_ON_FOR_APP;
|
||||||
[[fallthrough]];
|
android_mallopt(M_INITIALIZE_GWP_ASAN, &gwp_asan_options, sizeof(gwp_asan_options));
|
||||||
|
break;
|
||||||
case RuntimeFlags::GWP_ASAN_LEVEL_LOTTERY:
|
case RuntimeFlags::GWP_ASAN_LEVEL_LOTTERY:
|
||||||
android_mallopt(M_INITIALIZE_GWP_ASAN, &forceEnableGwpAsan, sizeof(forceEnableGwpAsan));
|
gwp_asan_options.desire = Action::TURN_ON_WITH_SAMPLING;
|
||||||
|
android_mallopt(M_INITIALIZE_GWP_ASAN, &gwp_asan_options, sizeof(gwp_asan_options));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
// Now that we've used the flag, clear it so that we don't pass unknown flags to the ART
|
// Now that we've used the flag, clear it so that we don't pass unknown flags to the ART
|
||||||
// runtime.
|
// runtime.
|
||||||
@@ -1739,7 +1749,6 @@ static void SpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray gids,
|
|||||||
AStatsSocket_close();
|
AStatsSocket_close();
|
||||||
|
|
||||||
const char* se_info_ptr = se_info.has_value() ? se_info.value().c_str() : nullptr;
|
const char* se_info_ptr = se_info.has_value() ? se_info.value().c_str() : nullptr;
|
||||||
const char* nice_name_ptr = nice_name.has_value() ? nice_name.value().c_str() : nullptr;
|
|
||||||
|
|
||||||
if (selinux_android_setcontext(uid, is_system_server, se_info_ptr, nice_name_ptr) == -1) {
|
if (selinux_android_setcontext(uid, is_system_server, se_info_ptr, nice_name_ptr) == -1) {
|
||||||
fail_fn(CREATE_ERROR("selinux_android_setcontext(%d, %d, \"%s\", \"%s\") failed", uid,
|
fail_fn(CREATE_ERROR("selinux_android_setcontext(%d, %d, \"%s\", \"%s\") failed", uid,
|
||||||
|
|||||||
Reference in New Issue
Block a user