linux-man.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx@kernel.org>
To: linux-man@vger.kernel.org
Cc: Alejandro Colomar <alx@kernel.org>,
	Seth McDonald <sethmcmail@pm.me>,
	 Eugene Syromyatnikov <evgsyr@gmail.com>,
	Ingo Schwarze <schwarze@openbsd.org>, DJ Delorie <dj@redhat.com>,
	 Paul Floyd <pjfloyd@wanadoo.fr>, John Scott <jscott@posteo.net>,
	misc@openbsd.org
Subject: [PATCH v4 0/1] man/man3/aligned_alloc.3: HISTORY: Document bogus specification from C11
Date: Mon, 22 Dec 2025 22:33:09 +0100	[thread overview]
Message-ID: <cover.1766439016.git.alx@kernel.org> (raw)
In-Reply-To: <cover.1765370035.git.alx@kernel.org>

Hi,

I've rewritten the entire subsection from scratch, similar to the email
I wrote detailing the history of the specification.  I think this is
explains the turbulent history of this API better, and allows
programmers to decide if they want to trust this API or not.

Does this look good?


Have a lovely night!
Alex


Alejandro Colomar (1):
  man/man3/aligned_alloc.3: HISTORY: Document bogus specification from
    C11

 man/man3/aligned_alloc.3 | 60 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

Range-diff against v3:
1:  6ed874153 ! 1:  f19bb100f man/man3/aligned_alloc.3: HISTORY: Document bogus specification from C11
    @@ Metadata
      ## Commit message ##
         man/man3/aligned_alloc.3: HISTORY: Document bogus specification from C11
     
    -    And document that OpenBSD still implements the C11 specification (but
    -    without the UB).
    +    Document the turbulent past of aligned_alloc(), and how libraries have
    +    actually implemented it.
     
         Fixes: 7fd1e0f2be21 (2023-05-20; "posix_memalign.3: Update aligned_alloc(3) to match C17")
         Reported-by: Eugene Syromyatnikov <evgsyr@gmail.com>
    @@ man/man3/aligned_alloc.3: .SH HISTORY
      POSIX.1-2024.
     +.SS C11
     +In C11,
    -+the specification of this function had several issues.
    ++the specification of this function had
    ++.UR https://port70.net/~nsz/c/c11/n1570.html#7.22.3.1p2
    ++several issues
    ++.UE .
     +.IP \[bu] 3
     +.I size
     +had to be a multiple of
     +.IR alignment .
     +Otherwise,
     +the behavior was undefined.
    -+.IP
    -+Some implementations still implement that restriction,
    -+or claim to have it.
    -+.RS
    -+.TP
    -+OpenBSD
    -+The function reports an error
    -+if this restriction is violated,
    -+without exploiting the UB.
    -+.TP
    -+FreeBSD
    -+.TQ
    -+jemalloc
    -+The documentation claims to have this restriction,
    -+but the implementation works correctly if it is violated.
    -+.RE
    -+.IP
    -+It was only a theoretical UB.
    -+No known implementation has ever exploited this UB.
    -+.IP
    -+This restriction was removed in C17.
     +.IP \[bu]
     +If
     +.I alignment
     +was not a power of two,
     +the behavior was undefined.
    -+.IP
    -+No implementations ever exploited this UB.
    -+It was only a theoretical UB.
    -+.IP
    -+This UB was removed in C17.
    ++.P
    ++.UR https://www.open-std.org/jtc1/sc22/wg14/www/docs/summary.htm#dr_460
    ++DR460
    ++.UE
    ++reported both cases of UB as unnecessarily dangerous,
    ++and fixed them with a Technical Corrigendum
    ++that transformed them into errors.
    ++.P
    ++.UR https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2072.htm
    ++N2072
    ++.UE
    ++reported that the requirement
    ++that
    ++.I size
    ++is a multiple of
    ++.I alignment
    ++is superfluous,
    ++and removed it with a Technical Corrigendum.
    ++.P
    ++C17 incorporates both technical corrigenda.
    ++The API has been stable since C17.
    ++.P
    ++glibc originally implemented it as silently aligning as
    ++.I stdc_bit_ceil(alignment)
    ++instead of
    ++.IR alignment .
    ++Since glibc 2.38,
    ++it implements the C17 specification.
    ++.P
    ++Some implementations,
    ++such as FreeBSD/jemalloc,
    ++implement the C17 specification,
    ++even though their documentation claims the C11 specification.
    ++.P
    ++Some implementations,
    ++such as OpenBSD,
    ++implement C11 amended with DR460,
    ++even though their documentation claims having undefined behavior.
    ++.P
    ++No known implementations
    ++have exploited the undefined behavior
    ++in a more dangerous way.
    ++This function should be safe to use.
      .SH NOTES
      On many systems there are alignment restrictions, for example, on buffers
      used for direct block device I/O.

base-commit: a5342ef55f0a96790bf279a98c9d2a30b19fc9eb
-- 
2.51.0


  parent reply	other threads:[~2025-12-22 21:33 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-10 12:39 [PATCH v1 00/12] man/man3/posix_memalign.3: Several fixes, and split the page Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 01/12] man/man3/posix_memalign.3: Remove confusing exception Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 02/12] man/man3/posix_memalign.3: wfix Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 03/12] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() conforms to ISO C17, not C11 Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 04/12] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() conforms to C23 Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 05/12] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() and posix_memalign() conform to POSIX.1-2024 Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 06/12] man/man3/{posix_,}memalign.3: Split memalign() from posix_memalign(3) Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 07/12] man/man3/{posix_memalign,pvalloc}.3: Split pvalloc() " Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 08/12] man/man3/{posix_memalign,valloc}.3: Split valloc() " Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 09/12] man/man3/{aligned_alloc,posix_memalign}.3: Split aligned_alloc() " Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 10/12] man/man3/posix_memalign.3: CAVEATS: Add section, and move paragraph to it Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 11/12] man/man3/posix_memalign.3: Remove redundant text Alejandro Colomar
2025-12-10 12:40 ` [PATCH v1 12/12] man/man3/posix_memalign.3: NOTES: Remove superfluous section Alejandro Colomar
2025-12-10 16:29 ` [PATCH v1 00/12] man/man3/posix_memalign.3: Several fixes, and split the page Eugene Syromyatnikov
2025-12-10 17:12   ` Alejandro Colomar
2025-12-10 22:50     ` Eugene Syromyatnikov
2025-12-11  0:04       ` Alejandro Colomar
2025-12-11  3:46         ` Eugene Syromyatnikov
2025-12-11 10:39           ` Alejandro Colomar
2025-12-15 14:41 ` [PATCH v2 00/14] " Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 01/14] man/man3/posix_memalign.3: Remove confusing exception Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 02/14] man/man3/posix_memalign.3: wfix Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 03/14] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() conforms to C17, not C11 Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 04/14] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() conforms to C23 Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 05/14] man/man3/posix_memalign.3: STANDARDS: aligned_alloc() and posix_memalign() conform to POSIX.1-2024 Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 06/14] man/man3/{posix_,}memalign.3: Split memalign() from posix_memalign(3) Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 07/14] man/man3/{posix_memalign,pvalloc}.3: Split pvalloc() " Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 08/14] man/man3/{posix_memalign,valloc}.3: Split valloc() " Alejandro Colomar
2025-12-15 14:41   ` [PATCH v2 09/14] man/man3/{aligned_alloc,posix_memalign}.3: Split aligned_alloc() " Alejandro Colomar
2025-12-15 14:42   ` [PATCH v2 10/14] man/man3/posix_memalign.3: CAVEATS: Add section, and move paragraph to it Alejandro Colomar
2025-12-15 14:42   ` [PATCH v2 11/14] man/man3/posix_memalign.3: Remove redundant text Alejandro Colomar
2025-12-15 14:42   ` [PATCH v2 12/14] man/man3/posix_memalign.3: NOTES: Remove superfluous section Alejandro Colomar
2025-12-15 14:42   ` [PATCH v2 13/14] man/man3/memalign.3: wfix Alejandro Colomar
2025-12-15 14:42   ` [PATCH v2 14/14] man/man3/aligned_alloc.3: HISTORY: Document bogus specification from C11 Alejandro Colomar
2025-12-17 13:03   ` [PATCH v2 00/14] man/man3/posix_memalign.3: Several fixes, and split the page Seth McDonald
2025-12-17 13:28     ` Alejandro Colomar
2025-12-17 13:51 ` [PATCH v3 0/1] man/man3/aligned_alloc.3: HISTORY: Document bogus specification from C11 Alejandro Colomar
2025-12-17 13:51   ` [PATCH v3 1/1] " Alejandro Colomar
2025-12-17 13:53     ` Alejandro Colomar
2025-12-17 14:42     ` Eugene Syromyatnikov
2025-12-17 15:37       ` Eugene Syromyatnikov
2025-12-17 17:05         ` Alejandro Colomar
2025-12-17 20:40           ` Alejandro Colomar
2025-12-17 16:46       ` Alejandro Colomar
2025-12-22 21:33 ` Alejandro Colomar [this message]
2025-12-22 21:33   ` [PATCH v4 " Alejandro Colomar
2025-12-22 21:36     ` Alejandro Colomar
2025-12-23  0:15   ` G. Branden Robinson
2025-12-23  0:35     ` Alejandro Colomar

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=cover.1766439016.git.alx@kernel.org \
    --to=alx@kernel.org \
    --cc=dj@redhat.com \
    --cc=evgsyr@gmail.com \
    --cc=jscott@posteo.net \
    --cc=linux-man@vger.kernel.org \
    --cc=misc@openbsd.org \
    --cc=pjfloyd@wanadoo.fr \
    --cc=schwarze@openbsd.org \
    --cc=sethmcmail@pm.me \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).