mirror of
https://github.com/GrapheneOS/hardened_malloc.git
synced 2025-04-19 22:10:19 +02:00
make source & tests compile on osx
This commit is contained in:
parent
b3372e1576
commit
be80191b46
26 changed files with 47 additions and 45 deletions
8
Makefile
8
Makefile
|
@ -19,8 +19,7 @@ endef
|
|||
|
||||
CPPFLAGS := $(CPPFLAGS) -D_GNU_SOURCE -I include
|
||||
SHARED_FLAGS := -O3 -flto -fPIC -fvisibility=hidden -fno-plt \
|
||||
$(call safe_flag,-fstack-clash-protection) -fstack-protector-strong -pipe -Wall -Wextra \
|
||||
$(call safe_flag,-Wcast-align=strict,-Wcast-align) -Wcast-qual -Wwrite-strings
|
||||
$(call safe_flag,-Wcast-align) -Wcast-qual -Wwrite-strings
|
||||
|
||||
ifeq ($(CONFIG_WERROR),true)
|
||||
SHARED_FLAGS += -Werror
|
||||
|
@ -32,7 +31,8 @@ endif
|
|||
|
||||
CFLAGS := $(CFLAGS) -std=c11 $(SHARED_FLAGS) -Wmissing-prototypes
|
||||
CXXFLAGS := $(CXXFLAGS) -std=c++17 $(SHARED_FLAGS)
|
||||
LDFLAGS := $(LDFLAGS) -Wl,--as-needed,-z,defs,-z,relro,-z,now,-z,nodlopen,-z,text
|
||||
|
||||
LDFLAGS := $(LDFLAGS) -Wl
|
||||
|
||||
SOURCES := chacha.c h_malloc.c memory.c pages.c random.c util.c
|
||||
OBJECTS := $(SOURCES:.c=.o)
|
||||
|
@ -40,7 +40,7 @@ OBJECTS := $(SOURCES:.c=.o)
|
|||
ifeq ($(CONFIG_CXX_ALLOCATOR),true)
|
||||
# make sure LTO is compatible in case CC and CXX don't match (such as clang and g++)
|
||||
CXX := $(CC)
|
||||
LDLIBS += -lstdc++ -lgcc_s
|
||||
LDLIBS += -lstdc++
|
||||
|
||||
SOURCES += new.cc
|
||||
OBJECTS += new.o
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
CONFIG_WERROR := true
|
||||
CONFIG_NATIVE := true
|
||||
CONFIG_NATIVE := false
|
||||
CONFIG_CXX_ALLOCATOR := true
|
||||
CONFIG_UBSAN := false
|
||||
CONFIG_SEAL_METADATA := false
|
||||
|
|
|
@ -6,10 +6,9 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <threads.h>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include "third_party/libdivide.h"
|
||||
|
@ -61,8 +60,9 @@ static_assert(N_ARENA <= 256, "maximum number of arenas is currently 256");
|
|||
#define CACHELINE_SIZE 64
|
||||
|
||||
#if N_ARENA > 1
|
||||
__attribute__((tls_model("initial-exec")))
|
||||
static thread_local unsigned thread_arena = N_ARENA;
|
||||
// use -ftls-model flag for now
|
||||
//__attribute__((tls_model("initial-exec")))
|
||||
static __thread unsigned thread_arena = N_ARENA;
|
||||
static atomic_uint thread_arena_counter = 0;
|
||||
#else
|
||||
static const unsigned thread_arena = 0;
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
#include <malloc.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
1
memory.c
1
memory.c
|
@ -1,7 +1,6 @@
|
|||
#include <errno.h>
|
||||
|
||||
#include <sys/mman.h>
|
||||
#include <sys/prctl.h>
|
||||
|
||||
#ifndef PR_SET_VMA
|
||||
#define PR_SET_VMA 0x53564d41
|
||||
|
|
1
new.cc
1
new.cc
|
@ -1,4 +1,3 @@
|
|||
#include <bits/functexcept.h>
|
||||
#include <new>
|
||||
|
||||
#include "h_malloc.h"
|
||||
|
|
6
random.c
6
random.c
|
@ -12,7 +12,11 @@ static void get_random_seed(void *buf, size_t size) {
|
|||
ssize_t r;
|
||||
|
||||
do {
|
||||
r = getrandom(buf, size, 0);
|
||||
#ifdef __APPLE__
|
||||
r = getentropy(buf, size);
|
||||
#else
|
||||
r = getrandom(buf, size, 0);
|
||||
#endif
|
||||
} while (r == -1 && errno == EINTR);
|
||||
|
||||
if (r <= 0) {
|
||||
|
|
|
@ -9,8 +9,6 @@ ifeq (,$(filter $(CONFIG_SLAB_CANARY),true false))
|
|||
$(error CONFIG_SLAB_CANARY must be true or false)
|
||||
endif
|
||||
|
||||
LDLIBS := -lpthread
|
||||
|
||||
CPPFLAGS += \
|
||||
-DSLAB_CANARY=$(CONFIG_SLAB_CANARY) \
|
||||
-DCONFIG_EXTENDED_SIZE_CLASSES=$(CONFIG_EXTENDED_SIZE_CLASSES)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "test_util.h"
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include <stdio.h>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "test_util.h"
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "test_util.h"
|
||||
#include "../util.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
@ -8,6 +9,6 @@ OPTNONE int main(void) {
|
|||
return 1;
|
||||
}
|
||||
char *q = p + 4096 * 4;
|
||||
malloc_usable_size(q);
|
||||
malloc_size(q);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
@ -8,6 +9,6 @@ OPTNONE int main(void) {
|
|||
return 1;
|
||||
}
|
||||
free(p);
|
||||
malloc_usable_size(p);
|
||||
malloc_size(p);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include <stdbool.h>
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include <stdbool.h>
|
||||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include <malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
@ -8,7 +7,7 @@ OPTNONE int main(void) {
|
|||
if (!p) {
|
||||
return 1;
|
||||
}
|
||||
size_t size = malloc_usable_size(p);
|
||||
size_t size = malloc_size(p);
|
||||
*(p + size) = 0;
|
||||
free(p);
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
@ -8,7 +8,7 @@ OPTNONE int main(void) {
|
|||
if (!p) {
|
||||
return 1;
|
||||
}
|
||||
size_t size = malloc_usable_size(p);
|
||||
size_t size = malloc_size(p);
|
||||
*(p + size + 7) = 0;
|
||||
free(p);
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
@ -8,7 +8,7 @@ OPTNONE int main(void) {
|
|||
if (!p) {
|
||||
return 1;
|
||||
}
|
||||
size_t size = malloc_usable_size(p);
|
||||
size_t size = malloc_size(p);
|
||||
*(p + size) = 1;
|
||||
free(p);
|
||||
return 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
@ -8,7 +8,7 @@ OPTNONE int main(void) {
|
|||
if (!p) {
|
||||
return 1;
|
||||
}
|
||||
size_t size = malloc_usable_size(p);
|
||||
size_t size = malloc_size(p);
|
||||
// XOR is used to avoid the test having a 1/256 chance to fail
|
||||
*(p + size + 7) ^= 1;
|
||||
free(p);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
@ -12,7 +12,7 @@ OPTNONE int main(void) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
size_t size = malloc_usable_size(p);
|
||||
size_t size = malloc_size(p);
|
||||
memset(p, 'a', size);
|
||||
printf("overflow by %zu bytes\n", strlen(p) - size);
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <malloc.h>
|
||||
#include <malloc/malloc.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
|
||||
|
@ -7,6 +8,6 @@ OPTNONE int main(void) {
|
|||
if (!p) {
|
||||
return 1;
|
||||
}
|
||||
malloc_usable_size(p + 1);
|
||||
malloc_size(p + 1);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include <malloc.h>
|
||||
|
||||
#include "../test_util.h"
|
||||
#include <malloc/malloc.h>
|
||||
|
||||
OPTNONE int main(void) {
|
||||
malloc_usable_size((void *)1);
|
||||
malloc_size((void *)1);
|
||||
return 0;
|
||||
}
|
||||
|
|
5
util.h
5
util.h
|
@ -25,8 +25,13 @@
|
|||
#define UNUSED __attribute__((unused))
|
||||
#define EXPORT __attribute__((visibility("default")))
|
||||
|
||||
#define ALIAS(f)
|
||||
|
||||
#ifndef __APPLE__
|
||||
#define STRINGIFY(s) #s
|
||||
#define ALIAS(f) __attribute__((alias(STRINGIFY(f))))
|
||||
#endif
|
||||
|
||||
|
||||
static inline int ffzl(unsigned long x) {
|
||||
return __builtin_ffsl(~x);
|
||||
|
|
Loading…
Add table
Reference in a new issue