From: Junio C Hamano <gitster@pobox.com>
To: Taylor Blau <me@ttaylorr.com>
Cc: "Jessica Clarke" <jrtc27@jrtc27.com>,
"René Scharfe" <l.s.r@web.de>,
git@vger.kernel.org
Subject: Re: [PATCH] Properly align memory allocations and temporary buffers
Date: Thu, 06 Jan 2022 14:27:25 -0800 [thread overview]
Message-ID: <xmqqh7agbiuq.fsf@gitster.g> (raw)
In-Reply-To: <YddjJ+uIQM34Gedo@nand.local> (Taylor Blau's message of "Thu, 6 Jan 2022 16:46:15 -0500")
Taylor Blau <me@ttaylorr.com> writes:
> (+cc René as another possible reviewer)
>
> On Wed, Jan 05, 2022 at 01:23:24PM +0000, Jessica Clarke wrote:
>> Currently git_qsort_s allocates a buffer on the stack that has no
>> alignment, and mem_pool_alloc assumes uintmax_t's size is adequate
>> alignment for any type.
>>
>> On CHERI, and thus Arm's Morello prototype, pointers are implemented as
>> hardware capabilities which, as well as having a normal integer address,
>> have additional bounds, permissions and other metadata in a second word,
>> so on a 64-bit architecture they are 128-bit quantities, including their
>> alignment requirements. Despite being 128-bit, their integer component
>> is still only a 64-bit field, so uintmax_t remains 64-bit, and therefore
>> uintmax_t does not sufficiently align an allocation.
Alignment aside, if uintmax_t is 64-bit but your pointer needs
128-bit to store, saving a pointer value in uintmax_t variable would
not work correctly, I presume, as casting the 64-bit integral type
back into pointer would not be sufficient to recover the lost
information that used to be in the second word.
So, does the architecture have 128-bit uintptr_t and that is a safe
type both from the point of view of alignment and from the point of
view of not losing information?
If that type is larger than uintmax_t, something smells wrong,
though. max is not max anymore at that point.
IIRC, uintptr_t is optional in C99, so a simpler solution to use the
larger type between uintptr_t and uintmax_t as a replacement for how
we use uintmax_t would not quite work out of the box X-<.
next prev parent reply other threads:[~2022-01-06 22:27 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-05 13:23 [PATCH] Properly align memory allocations and temporary buffers Jessica Clarke
2022-01-06 21:46 ` Taylor Blau
2022-01-06 21:56 ` Jessica Clarke
2022-01-06 22:27 ` Junio C Hamano [this message]
2022-01-06 22:56 ` Jessica Clarke
2022-01-07 0:10 ` Junio C Hamano
2022-01-07 0:22 ` Jessica Clarke
2022-01-07 0:31 ` brian m. carlson
2022-01-07 0:39 ` Jessica Clarke
2022-01-07 1:43 ` brian m. carlson
2022-01-07 2:08 ` Jessica Clarke
2022-01-07 2:11 ` Jessica Clarke
2022-01-07 19:30 ` Junio C Hamano
2022-01-07 19:33 ` Jessica Clarke
2022-01-07 20:56 ` René Scharfe
2022-01-07 21:30 ` Junio C Hamano
2022-01-07 23:30 ` René Scharfe
2022-01-08 0:18 ` Elijah Newren
2022-01-06 23:22 ` brian m. carlson
2022-01-06 23:31 ` Jessica Clarke
2022-01-07 14:57 ` Philip Oakley
2022-01-07 16:08 ` René Scharfe
2022-01-07 16:21 ` Jessica Clarke
2022-01-12 13:58 ` Jessica Clarke
2022-01-12 15:47 ` René Scharfe
2022-01-12 15:49 ` Jessica Clarke
2022-01-23 15:24 ` [PATCH v2] mem-pool: Don't assume uintmax_t is aligned enough for all types Jessica Clarke
2022-01-23 20:17 ` Junio C Hamano
2022-01-23 20:23 ` Jessica Clarke
2022-01-23 20:28 ` Junio C Hamano
2022-01-23 20:33 ` [PATCH v3] " Jessica Clarke
2022-01-24 17:11 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh7agbiuq.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jrtc27@jrtc27.com \
--cc=l.s.r@web.de \
--cc=me@ttaylorr.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.