mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-14 18:34:30 -05:00
1603092c50
hammerhead 16.0 was reported not booting and shamu 18.1 was reported to take ~15+ minutes to boot hammerhead does not have getrandom so it failed immediately shamu does have getrandom BUT it blocks during init meaning it'll wait until the entropy pool slowly fills In tested I did not discovery this I tested on flox/mako/d852/klte/clark/sailfish/mata/cheeseburger/fajita All the newer ones have working getrandom All the older ones included a patch to make getrandom non blocking on init Signed-off-by: Tad <tad@spotco.us>
162 lines
4.8 KiB
Diff
162 lines
4.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Micay <danielmicay@gmail.com>
|
|
Date: Wed, 5 Dec 2018 01:51:56 -0500
|
|
Subject: [PATCH] use Scudo on 32-bit and hardened_malloc on 64-bit
|
|
|
|
Co-authored-by: anupritaisno1 <www.anuprita804@gmail.com>
|
|
Signed-off-by: anupritaisno1 <www.anuprita804@gmail.com>
|
|
[tad@spotco.us]: kept Lineage's scudo 32-bit workaround
|
|
---
|
|
libc/Android.bp | 37 ++++++++++++++---------
|
|
libc/bionic/h_malloc_wrapper.cpp | 51 ++++++++++++++++++++++++++++++++
|
|
libc/bionic/malloc_common.h | 8 +++++
|
|
3 files changed, 82 insertions(+), 14 deletions(-)
|
|
create mode 100644 libc/bionic/h_malloc_wrapper.cpp
|
|
|
|
diff --git a/libc/Android.bp b/libc/Android.bp
|
|
index ce714054a..1599d5ed9 100644
|
|
--- a/libc/Android.bp
|
|
+++ b/libc/Android.bp
|
|
@@ -50,6 +50,8 @@ libc_common_flags = [
|
|
|
|
// GWP-ASan requires platform TLS.
|
|
"-fno-emulated-tls",
|
|
+
|
|
+ "-DH_MALLOC_PREFIX",
|
|
]
|
|
|
|
// Define some common cflags
|
|
@@ -122,20 +124,19 @@ libc32_scudo_product_variables = {
|
|
// ========================================================
|
|
cc_defaults {
|
|
name: "libc_native_allocator_defaults",
|
|
-
|
|
- whole_static_libs: [
|
|
- "libjemalloc5",
|
|
- "libc_jemalloc_wrapper",
|
|
- ],
|
|
- header_libs: ["gwp_asan_headers"],
|
|
+ whole_static_libs: ["libc_jemalloc_wrapper"],
|
|
multilib: {
|
|
- lib64: {
|
|
- product_variables: libc_scudo_product_variables,
|
|
- },
|
|
lib32: {
|
|
+ whole_static_libs: ["libjemalloc5"],
|
|
product_variables: libc32_scudo_product_variables,
|
|
- }
|
|
+ },
|
|
+ lib64: {
|
|
+ cflags: ["-DH_MALLOC_PREFIX"],
|
|
+ whole_static_libs: ["libhardened_malloc"],
|
|
+ },
|
|
},
|
|
+
|
|
+ header_libs: ["gwp_asan_headers"],
|
|
}
|
|
|
|
// Functions not implemented by jemalloc directly, or that need to
|
|
@@ -143,12 +144,20 @@ cc_defaults {
|
|
cc_library_static {
|
|
name: "libc_jemalloc_wrapper",
|
|
defaults: ["libc_defaults"],
|
|
- srcs: ["bionic/jemalloc_wrapper.cpp"],
|
|
+ multilib: {
|
|
+ lib32: {
|
|
+ // Used to pull in the jemalloc/hardened_malloc include directory so that if the
|
|
+ // library is removed, the include directory is also removed.
|
|
+ srcs: ["bionic/jemalloc_wrapper.cpp"],
|
|
+ static_libs: ["libjemalloc5"],
|
|
+ },
|
|
+ lib64: {
|
|
+ srcs: ["bionic/h_malloc_wrapper.cpp"],
|
|
+ static_libs: ["libhardened_malloc"],
|
|
+ },
|
|
+ },
|
|
cflags: ["-fvisibility=hidden"],
|
|
|
|
- // Used to pull in the jemalloc include directory so that if the
|
|
- // library is removed, the include directory is also removed.
|
|
- static_libs: ["libjemalloc5"],
|
|
}
|
|
|
|
// ========================================================
|
|
diff --git a/libc/bionic/h_malloc_wrapper.cpp b/libc/bionic/h_malloc_wrapper.cpp
|
|
new file mode 100644
|
|
index 000000000..5fb0968c2
|
|
--- /dev/null
|
|
+++ b/libc/bionic/h_malloc_wrapper.cpp
|
|
@@ -0,0 +1,51 @@
|
|
+#include <errno.h>
|
|
+#include <malloc.h>
|
|
+#include <sys/param.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#include <private/MallocXmlElem.h>
|
|
+
|
|
+#include "h_malloc.h"
|
|
+
|
|
+__BEGIN_DECLS
|
|
+int h_malloc_info(int options, FILE* fp);
|
|
+__END_DECLS
|
|
+
|
|
+int h_malloc_info(int options, FILE* fp) {
|
|
+ if (options != 0) {
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ fflush(fp);
|
|
+ int fd = fileno(fp);
|
|
+ MallocXmlElem root(fd, "malloc", "version=\"jemalloc-1\"");
|
|
+
|
|
+ // Dump all of the large allocations in the arenas.
|
|
+ for (size_t i = 0; i < h_mallinfo_narenas(); i++) {
|
|
+ struct mallinfo mi = h_mallinfo_arena_info(i);
|
|
+ if (mi.hblkhd != 0) {
|
|
+ MallocXmlElem arena_elem(fd, "heap", "nr=\"%d\"", i);
|
|
+ {
|
|
+ MallocXmlElem(fd, "allocated-large").Contents("%zu", mi.ordblks);
|
|
+ MallocXmlElem(fd, "allocated-huge").Contents("%zu", mi.uordblks);
|
|
+ MallocXmlElem(fd, "allocated-bins").Contents("%zu", mi.fsmblks);
|
|
+
|
|
+ size_t total = 0;
|
|
+ for (size_t j = 0; j < h_mallinfo_nbins(); j++) {
|
|
+ struct mallinfo mi = h_mallinfo_bin_info(i, j);
|
|
+ if (mi.ordblks != 0) {
|
|
+ MallocXmlElem bin_elem(fd, "bin", "nr=\"%d\"", j);
|
|
+ MallocXmlElem(fd, "allocated").Contents("%zu", mi.ordblks);
|
|
+ MallocXmlElem(fd, "nmalloc").Contents("%zu", mi.uordblks);
|
|
+ MallocXmlElem(fd, "ndalloc").Contents("%zu", mi.fordblks);
|
|
+ total += mi.ordblks;
|
|
+ }
|
|
+ }
|
|
+ MallocXmlElem(fd, "bins-total").Contents("%zu", total);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/libc/bionic/malloc_common.h b/libc/bionic/malloc_common.h
|
|
index 4afcc4a8d..cca9e5202 100644
|
|
--- a/libc/bionic/malloc_common.h
|
|
+++ b/libc/bionic/malloc_common.h
|
|
@@ -67,8 +67,16 @@ __END_DECLS
|
|
|
|
#else
|
|
|
|
+#ifdef __LP64__
|
|
+#include "h_malloc.h"
|
|
+#define Malloc(function) h_ ## function
|
|
+__BEGIN_DECLS
|
|
+int h_malloc_info(int options, FILE* fp);
|
|
+__END_DECLS
|
|
+#else
|
|
#include "jemalloc.h"
|
|
#define Malloc(function) je_ ## function
|
|
+#endif
|
|
|
|
#endif
|
|
|