public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Zack Weinberg <zackw@panix.com>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH 2/3] network: recvmsg and sendmsg standard compliance (BZ#16919)
Date: Tue, 07 Jun 2016 13:31:00 -0000	[thread overview]
Message-ID: <a963950f-bb21-be79-bddd-8379b588378a@panix.com> (raw)
In-Reply-To: <1459175641-12520-3-git-send-email-adhemerval.zanella@linaro.org>

On 03/28/2016 10:34 AM, Adhemerval Zanella wrote:
> POSIX specifies that both msghdr::msg_iovlen and msghdr::msg_controllen
> to be of size int and socklen_t respectively.  However Linux defines it as
> both size_t and for 64-bit it requires some adjustments to make the
> functions standard compliance.

I expressed objections to the follow-up patch to this (tackling the same
type inconsistency within cmsgbuf) and, on reflection, my objection
applies as well (with somewhat less force) to this patch, so I'm going
to explain myself once here.

send/recv(m)msg are kernel primitives, and the fundamental basis of my
objection is that I think the C library should always faithfully expose
all the true kernel interfaces, *even if they are in some way wrong*.
This conformance violation should be addressed by the kernel first, and
only then should the C library follow suit.  That means that neither
this patch, nor the follow-up patch tackling cmsgbuf, should be applied
at all.  If either has already been applied, they should be backed out.

(If the kernel developers refuse to fix a conformance violation, then
that kernel has chosen to permanently deviate from the standard and,
again, the C library should faithfully reflect that.)

This objection has extra force under four circumstances all of which
apply to send/recv(m)msg:

 * The problem is a minor deviation from a standard and is unlikely to
   affect non-contrived programs.

 * The kernel primitives in question are async-signal-safe; that is a
   difficult contract to uphold in user space -- the more work the C
   library does, the more likely it is to screw something up.

 * A completely transparent user-space workaround would need to allocate
   memory.  In this case, it is my considered opinion that the proposed
   hard upper limit on the size of cmsgbuf is *far* more likely to break
   existing programs than leaving the status quo alone.

 * The kernel primitives in question are arbitrarily extensible, so it
   is not possible to guarantee that a user-space workaround cannot
   break future additions to the interface.

Earlier, I said that I didn't like copying cmsgbuf because it wasn't
possible to be sure that no cmsg opcodes cared (now or in the future)
about the address of the buffer, and Adhemerval said (effectively) that
such an opcode would not make sense.  That's not true.  Imagine, if you
will, a cmsg that expects the ancillary buffer to be overlaid on a
shared memory area, and rewrites the *non*-ancillary buffer to reflect
the location of that memory area in the receiver. Contrived? Perhaps.
Can we be sure no one will ever want to do something like that?  No, we
cannot.

zw

  parent reply	other threads:[~2016-06-07 13:31 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-28 14:34 [PATCH v4 0/3] Fix {recv,send}{m}msg " Adhemerval Zanella
2016-03-28 14:34 ` [PATCH 3/3] network: recvmmsg and sendmmsg " Adhemerval Zanella
2016-03-28 14:34 ` [PATCH 2/3] network: recvmsg and sendmsg " Adhemerval Zanella
2016-04-07  9:28   ` Szabolcs Nagy
2016-04-07 12:23     ` Adhemerval Zanella
2016-04-07  9:56   ` Florian Weimer
2016-04-07 11:37     ` Szabolcs Nagy
2016-04-07 12:29       ` Adhemerval Zanella
2016-04-21 14:01   ` Szabolcs Nagy
2016-04-21 20:07     ` Adhemerval Zanella
2016-04-22  8:04     ` Michael Kerrisk (man-pages)
2016-04-22 10:25       ` Szabolcs Nagy
2016-04-22 13:20         ` Michael Kerrisk (man-pages)
2016-04-22 13:40           ` Szabolcs Nagy
2016-04-21 17:15   ` Rich Felker
2016-05-02 19:17     ` Adhemerval Zanella
2016-06-07 13:31   ` Zack Weinberg [this message]
2016-06-07 14:21     ` Adhemerval Zanella
2016-06-08 20:15       ` Zack Weinberg
2016-06-08 20:58         ` Adhemerval Zanella
2016-06-09  3:18           ` Carlos O'Donell
2016-06-09 13:35             ` Zack Weinberg
2016-06-10 18:01               ` Carlos O'Donell
2016-06-10 18:19                 ` Joseph Myers
2016-06-10 18:45                   ` Carlos O'Donell
2016-06-10 20:17                     ` Joseph Myers
2016-06-13 14:43                       ` Carlos O'Donell
2016-06-09 14:21             ` Joseph Myers
2016-06-09 13:25           ` Zack Weinberg
2016-06-09 14:25             ` Adhemerval Zanella
2016-03-28 14:34 ` [PATCH 1/3] Adjust kernel-features.h defaults for recvmsg and sendmsg Adhemerval Zanella
2016-03-29 21:32   ` Joseph Myers
2016-03-29 21:50     ` Adhemerval Zanella
2016-03-29 21:53     ` Adhemerval Zanella
2016-03-29 22:16       ` Andreas Schwab
2016-04-01 13:51 ` [PATCH v4 0/3] Fix {recv,send}{m}msg standard compliance (BZ#16919) Adhemerval Zanella
2016-04-06 18:24   ` Adhemerval Zanella
2016-04-21 13:21     ` Adhemerval Zanella
2016-05-24 19:44       ` Adhemerval Zanella
2016-05-26 13:50         ` Joseph Myers
2016-05-26 14:23           ` Adhemerval Zanella
2016-05-26 14:37             ` Adhemerval Zanella
2016-05-27  9:13         ` Florian Weimer
2016-06-08  8:36 ` Florian Weimer
2016-06-08 12:37   ` Joseph Myers
2016-06-08 15:57     ` Mike Frysinger
2016-06-08 19:45       ` Florian Weimer
2016-06-08 20:19         ` Adhemerval Zanella
2016-06-08 20:27           ` Florian Weimer
2016-06-08 21:05             ` Adhemerval Zanella
  -- strict thread matches above, loose matches on Subject: below --
2016-03-25 13:57 [PATCH v3 " Adhemerval Zanella
2016-03-25 13:57 ` [PATCH 2/3] network: recvmsg and sendmsg " Adhemerval Zanella
2016-03-23 14:31 [PATCH v2 0/3] Fix {recv,send}{m}msg " Adhemerval Zanella
2016-03-23 14:31 ` [PATCH 2/3] network: recvmsg and sendmsg " Adhemerval Zanella
2016-03-23 15:00   ` Andreas Schwab
2016-03-23 18:20     ` Adhemerval Zanella
2016-03-23 21:51   ` Joseph Myers
2016-03-24 12:58     ` Adhemerval Zanella

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=a963950f-bb21-be79-bddd-8379b588378a@panix.com \
    --to=zackw@panix.com \
    --cc=libc-alpha@sourceware.org \
    /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).