From d22659b8ea27f0955e640e0970f70c122c5ec6a8 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Mon, 5 Oct 2020 23:20:11 +0000 Subject: [PATCH] libcutils: API to disable memory mitigations Convenience API to disable memory mitigations, where we can specify logging and also have a single place to update once a related bug is fixed. Bug: 166675194 Test: use API to disable memory mitigations Change-Id: I4a3529ea1911925c49e31cc3809c2743e401c196 --- libcutils/Android.bp | 4 ++++ libcutils/include/cutils/memory.h | 3 +++ libcutils/memory.cpp | 39 +++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 libcutils/memory.cpp diff --git a/libcutils/Android.bp b/libcutils/Android.bp index b749d871a..0c75dc725 100644 --- a/libcutils/Android.bp +++ b/libcutils/Android.bp @@ -158,6 +158,7 @@ cc_library { "canned_fs_config.cpp", "iosched_policy.cpp", "load_file.cpp", + "memory.cpp", "native_handle.cpp", "properties.cpp", "record_stream.cpp", @@ -200,6 +201,9 @@ cc_library { "uevent.cpp", ], }, + bionic: { + header_libs: ["bionic_libc_platform_headers"], + }, android_arm: { sanitize: { diff --git a/libcutils/include/cutils/memory.h b/libcutils/include/cutils/memory.h index c6476c138..0fba53c3f 100644 --- a/libcutils/include/cutils/memory.h +++ b/libcutils/include/cutils/memory.h @@ -28,6 +28,9 @@ extern "C" { size_t strlcpy(char *dst, const char *src, size_t size); #endif +// Disables memory mitigations for the entire process, and logs appropriately. +void process_disable_memory_mitigations(); + #ifdef __cplusplus } // extern "C" #endif diff --git a/libcutils/memory.cpp b/libcutils/memory.cpp new file mode 100644 index 000000000..f52652072 --- /dev/null +++ b/libcutils/memory.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include + +#ifdef __BIONIC__ +#include +#endif + +void process_disable_memory_mitigations() { + bool success = false; +#ifdef __BIONIC__ + // TODO(b/158870657) is fixed and scudo is used globally, we can assert when an + // an error is returned. + + success = android_mallopt(M_DISABLE_MEMORY_MITIGATIONS, nullptr, 0); +#endif + + if (success) { + ALOGI("Disabled memory mitigations for process."); + } else { + ALOGE("Could not disable memory mitigations for process."); + } +}