aboutsummaryrefslogtreecommitdiff
path: root/include/jemalloc/internal/san_bump.h
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2025-02-05 23:20:13 +0000
committerWarner Losh <imp@FreeBSD.org>2025-02-05 23:20:13 +0000
commit48ec896efb0b78141df004eaa21288b84590c9da (patch)
tree33799792fd95c266d472ab1ae51d50ab4f942eb3 /include/jemalloc/internal/san_bump.h
parentd28d7fbede216494aa3942af042cc084fcd6098a (diff)
Import jemalloc 5.3.0. This import changes how manage the jemalloc vendor branch (which was just started anyway). Starting with 5.3.0, we import a clean tree from the upstream github, removing all the old files that are no longer upstream, or that we've kept around for some reason. We do this because we merge from this raw version of jemalloc into the FreeBSD contrib/jemalloc, then we run autogen stuff, generate all the generated .h files with gmake, then finally remove much of the generated files in contrib/jemalloc using an update script. Sponsored by: Netflix
Diffstat (limited to 'include/jemalloc/internal/san_bump.h')
-rw-r--r--include/jemalloc/internal/san_bump.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/include/jemalloc/internal/san_bump.h b/include/jemalloc/internal/san_bump.h
new file mode 100644
index 000000000000..8ec4a710d6f4
--- /dev/null
+++ b/include/jemalloc/internal/san_bump.h
@@ -0,0 +1,52 @@
+#ifndef JEMALLOC_INTERNAL_SAN_BUMP_H
+#define JEMALLOC_INTERNAL_SAN_BUMP_H
+
+#include "jemalloc/internal/edata.h"
+#include "jemalloc/internal/exp_grow.h"
+#include "jemalloc/internal/mutex.h"
+
+#define SBA_RETAINED_ALLOC_SIZE ((size_t)4 << 20)
+
+extern bool opt_retain;
+
+typedef struct ehooks_s ehooks_t;
+typedef struct pac_s pac_t;
+
+typedef struct san_bump_alloc_s san_bump_alloc_t;
+struct san_bump_alloc_s {
+ malloc_mutex_t mtx;
+
+ edata_t *curr_reg;
+};
+
+static inline bool
+san_bump_enabled() {
+ /*
+ * We enable san_bump allocator only when it's possible to break up a
+ * mapping and unmap a part of it (maps_coalesce). This is needed to
+ * ensure the arena destruction process can destroy all retained guarded
+ * extents one by one and to unmap a trailing part of a retained guarded
+ * region when it's too small to fit a pending allocation.
+ * opt_retain is required, because this allocator retains a large
+ * virtual memory mapping and returns smaller parts of it.
+ */
+ return maps_coalesce && opt_retain;
+}
+
+static inline bool
+san_bump_alloc_init(san_bump_alloc_t* sba) {
+ bool err = malloc_mutex_init(&sba->mtx, "sanitizer_bump_allocator",
+ WITNESS_RANK_SAN_BUMP_ALLOC, malloc_mutex_rank_exclusive);
+ if (err) {
+ return true;
+ }
+ sba->curr_reg = NULL;
+
+ return false;
+}
+
+edata_t *
+san_bump_alloc(tsdn_t *tsdn, san_bump_alloc_t* sba, pac_t *pac, ehooks_t *ehooks,
+ size_t size, bool zero);
+
+#endif /* JEMALLOC_INTERNAL_SAN_BUMP_H */