Subject: Re: pipe(2) and invalid fildes
To: None <tech-kern@netbsd.org, tech-userlevel@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-userlevel
Date: 10/01/2001 04:04:55
>> The manpage states that EFAULT is returned by pipe(2) if fildes
>> buffer is in an invalid area of the process's address space.  That
>> is simply not true, and thus I think that sentense should be
>> removed.

> Let me translate:

> "Rather than having a static interface definition independent of the
> implementation, we could have a floating definition dependent on the
> current implementation."

If the manpage is the correct interface definition for pipe(2), then
our implementation is imply *broken*, because if you pass an invalid
pointer, you *don't* get EFAULT back - you get a VM signal in libc.

However, it also seems to me that EFAULT is a kludge: such errors
really *ought* to produce SIGBUS/SIGSEGV, and that they don't is a
historical artifact.  I would favor leaving it basically as it is,
except with a little text added:

     [EFAULT]      The fildes buffer is in an invalid area of the process's
                   address space.  (An appropriate signal, SIGBUS or
                   SIGSEGV, may be generated instead of returning in this
                   case.)

Indeed, as I think someone already suggested, I would say that _all_
EFAULT returns, with the possible exception of any that are actually
overloading EFAULT to indicate some other error, should have similar
language added, probably with a note in intro(2) as well.

/~\ The ASCII				der Mouse
\ / Ribbon Campaign
 X  Against HTML	       mouse@rodents.montreal.qc.ca
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B