unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Alejandro Colomar via Libc-alpha <libc-alpha@sourceware.org>
To: Xi Ruoyao <xry111@xry111.site>,
	Andreas Schwab <schwab@linux-m68k.org>,
	Xi Ruoyao via Libc-alpha <libc-alpha@sourceware.org>
Subject: Re: bind(2): Missing [[gnu::nonnull]]
Date: Sun, 4 Dec 2022 12:14:56 +0100	[thread overview]
Message-ID: <4e085ada-10eb-9de9-7681-1c96ec74da30@gmail.com> (raw)
In-Reply-To: <ddbccfdcccaedafc6101e2aa283492f19823a947.camel@xry111.site>


[-- Attachment #1.1: Type: text/plain, Size: 1684 bytes --]

Hi Xi,

On 12/4/22 06:59, Xi Ruoyao wrote:
> On Sat, 2022-12-03 at 20:05 +0100, Andreas Schwab wrote:
>>> Currently the man page says:
>>>
>>> EFAULT: addr points outside the user's accessible address space.
>>>
>>> And bind(2) indeed sets errno to EFAULT and return -1 when NULL is
>>> passed as addr.
>>
>> You can never depend on EFAULT for invalid addresses.
> 
> Hmm, is this documented somewhere?

I don't know, but let me have an educated guess:

Holding a pointer to invalid memory is Undefined Behavior by the standard, 
except if that pointer is NULL, or is still indeterminate because the pointer 
has not yet been initialized with a valid address.  Using an uninitialized 
pointer is UB as using any uninitialized variable.  Using a NULL pointer is only 
okay for comparisons, or as a sentinel value, but never for accessing memory. 
So chances are high that the program will already have invoked UB at the time 
bind(2) is called with an invalid address.

I wonder what's the rationale for the kernel reporting EFAULT; I don't seem to 
make any sense of it.  If a program tries to access memory with an invalid 
pointer, the kernel will crash it with SEGV, but if the same program tries that 
the kernel accesses the same memory with the same invalid pointer, it will 
receive an error code and continue running fine; that's not coherent or 
consistent.  If I were the kernel I'd just do in bind(2) (and in many other 
syscalls that are similar):

if (invalid_pointer(addr))
     crash_program();

That would probably help find many hidden cases of UB around the world.

Cheers,

Alex


-- 
<http://www.alejandro-colomar.es/>

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-12-04 11:15 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-03 15:33 bind(2): Missing [[gnu::nonnull]] Alejandro Colomar via Libc-alpha
2022-12-03 15:55 ` Xi Ruoyao via Libc-alpha
2022-12-03 16:41   ` Alejandro Colomar via Libc-alpha
2022-12-03 19:05   ` Andreas Schwab
2022-12-03 19:12     ` Alejandro Colomar via Libc-alpha
2022-12-04  5:59     ` Xi Ruoyao via Libc-alpha
2022-12-04 11:14       ` Alejandro Colomar via Libc-alpha [this message]
2022-12-04 18:46         ` Florian Weimer via Libc-alpha
2022-12-05 18:53           ` Zack Weinberg via Libc-alpha

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

  List information: https://www.gnu.org/software/libc/involved.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4e085ada-10eb-9de9-7681-1c96ec74da30@gmail.com \
    --to=libc-alpha@sourceware.org \
    --cc=alx.manpages@gmail.com \
    --cc=schwab@linux-m68k.org \
    --cc=xry111@xry111.site \
    /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 read-only IMAP folder(s) and NNTP newsgroup(s).