Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/jemalloc/dist/src jemalloc: Enforce alignment-m...



details:   https://anonhg.NetBSD.org/src/rev/782c6735dab4
branches:  trunk
changeset: 377258:782c6735dab4
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Tue Jul 04 15:06:28 2023 +0000

description:
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

diffstat:

 external/bsd/jemalloc/dist/src/jemalloc.c |  10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diffs (41 lines):

diff -r e3337dbfeea9 -r 782c6735dab4 external/bsd/jemalloc/dist/src/jemalloc.c
--- a/external/bsd/jemalloc/dist/src/jemalloc.c Tue Jul 04 01:02:50 2023 +0000
+++ b/external/bsd/jemalloc/dist/src/jemalloc.c Tue Jul 04 15:06:28 2023 +0000
@@ -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";



Home | Main Index | Thread Index | Old Index