Module Name: src
Committed By: riastradh
Date: Tue Jul 4 15:06:28 UTC 2023
Modified Files:
src/external/bsd/jemalloc/dist/src: jemalloc.c
Log Message:
jemalloc: Enforce alignment-must-divide-size rule of aligned_alloc.
C11, Sec. 7.22.3.1 The aligned_alloc function, paragraph 2, p. 348:
The value of alignment shall be a valid alignment supported by the
implementation and the value of size shall be an integral multiple
of alignment.
posix_memalign does not appear to have any corresponding constraint.
XXX pullup-10
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/external/bsd/jemalloc/dist/src/jemalloc.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/jemalloc/dist/src/jemalloc.c
diff -u src/external/bsd/jemalloc/dist/src/jemalloc.c:1.10 src/external/bsd/jemalloc/dist/src/jemalloc.c:1.11
--- src/external/bsd/jemalloc/dist/src/jemalloc.c:1.10 Sat Jul 1 06:29:14 2023
+++ src/external/bsd/jemalloc/dist/src/jemalloc.c Tue Jul 4 15:06:28 2023
@@ -1635,6 +1635,9 @@ struct static_opts_s {
/* Whether to set errno when we encounter an error condition. */
bool set_errno_on_error;
+ /* Whether the alignment must divide the size. */
+ bool alignment_must_divide_size;
+
/*
* The minimum valid alignment for functions requesting aligned storage.
*/
@@ -1662,6 +1665,7 @@ static_opts_init(static_opts_t *static_o
static_opts->assert_nonempty_alloc = false;
static_opts->null_out_result_on_error = false;
static_opts->set_errno_on_error = false;
+ static_opts->alignment_must_divide_size = false;
static_opts->min_alignment = 0;
static_opts->oom_string = "";
static_opts->invalid_alignment_string = "";
@@ -1857,6 +1861,11 @@ imalloc_body(static_opts_t *sopts, dynam
|| (dopts->alignment & (dopts->alignment - 1)) != 0)) {
goto label_invalid_alignment;
}
+ if (sopts->alignment_must_divide_size) {
+ if (unlikely(dopts->item_size % dopts->alignment)) {
+ goto label_invalid_alignment;
+ }
+ }
/* This is the beginning of the "core" algorithm. */
@@ -2125,6 +2134,7 @@ je_aligned_alloc(size_t alignment, size_
sopts.bump_empty_alloc = true;
sopts.null_out_result_on_error = true;
sopts.set_errno_on_error = true;
+ sopts.alignment_must_divide_size = true;
sopts.min_alignment = 1;
sopts.oom_string =
"<jemalloc>: Error allocating aligned memory: out of memory\n";