]> git.ipfire.org Git - thirdparty/shadow.git/commit
lib/: Remove incorrect /*@out@*/ comment from functions that read the pointee
authorAlejandro Colomar <alx@kernel.org>
Mon, 11 Dec 2023 13:01:38 +0000 (14:01 +0100)
committerSerge Hallyn <serge@hallyn.com>
Mon, 15 Jan 2024 19:14:28 +0000 (13:14 -0600)
commit9ca6b71e76d0e09cada312270b406d10edca84c2
treefdc4e9a16c12d110b02dff8344c5f89186cc48ca
parentf1b9f8d8291261c53bd5e8fece43d7f3b386a28b
lib/: Remove incorrect /*@out@*/ comment from functions that read the pointee

These functions (e.g., gr_free()), explicitly dereference the pointer
and read the pointee.

The /@out@/ comment, which is (almost) analogous to the
[[gnu::access(write_only, ...)]] attribute, means that the pointee can
be uninitialized, since it won't read it.  There's a difference between
/@out@/ and the GCC attribute: the attribute doesn't require that the
call writes to the pointee, while /@out@/ requires that the pointee be
fully initialized after the call, so it _must_ write to it.

A guess of why it was used is that these functions are similar to
free(3), which does not read the memory it frees, and so one would
assume that if it doesn't read, write_only (or equivalents) are good.
That's wrong in several ways:

-  free(3) does not read _nor_ write to the memory, so it would
   be slightly inappropriate to use write_only with it.  It wouldn't be
   "wrong", but [[gnu::access(none, ...)]] would be more appropriate.

-  Because /@out@/ requires that the call writes to the pointee, it
   would be wrong to use it in free(3), which doesn't write to the
   pointee.

-  Our functions are similar to free(3) conceptually, but they don't
   behave like free(3), since they do read the memory (pointee) (and
   also write to it), and thus they're actually read_write.

Link: <https://splint.org/manual/manual.html#undefined>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/commonio.h
lib/groupio.c
lib/groupmem.c
lib/prototypes.h
lib/pwio.c
lib/pwmem.c
lib/sgroupio.c
lib/shadowio.c
lib/shadowmem.c
lib/subordinateio.c