Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jun 2018 10:04:36 -0700
From:      Matthew Macy <mmacy@freebsd.org>
To:        Mark Johnston <markj@freebsd.org>
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r334960 - head/sys/kern
Message-ID:  <CAPrugNoPJFwgEDy7cWngsL=8diy0JGgt3cpKv3zoX-ACyyjZuQ@mail.gmail.com>
In-Reply-To: <20180611165433.GD55005@raichu>
References:  <201806111631.w5BGVh2M051386@repo.freebsd.org> <20180611165433.GD55005@raichu>

next in thread | previous in thread | raw e-mail | index | archive | help
Fair. But it didn't actually work before. It's not clear anyone has
ever used it.

On Mon, Jun 11, 2018 at 9:54 AM, Mark Johnston <markj@freebsd.org> wrote:
> On Mon, Jun 11, 2018 at 04:31:43PM +0000, Matt Macy wrote:
>> Author: mmacy
>> Date: Mon Jun 11 16:31:42 2018
>> New Revision: 334960
>> URL: https://svnweb.freebsd.org/changeset/base/334960
>>
>> Log:
>>   soreceive_stream: correctly handle edge cases
>>
>>   - non NULL controlp is not an error, returning EINVAL
>>     would cause X forwarding to fail
>>
>>   - MSG_PEEK and MSG_WAITALL are fairly exceptional, but we still
>>     want to handle them - punt to soreceive_generic
>>
>> Modified:
>>   head/sys/kern/uipc_socket.c
>>
>> Modified: head/sys/kern/uipc_socket.c
>> ==============================================================================
>> --- head/sys/kern/uipc_socket.c       Mon Jun 11 16:27:09 2018        (r334959)
>> +++ head/sys/kern/uipc_socket.c       Mon Jun 11 16:31:42 2018        (r334960)
>> @@ -2162,7 +2162,6 @@ release:
>>
>>  /*
>>   * Optimized version of soreceive() for stream (TCP) sockets.
>> - * XXXAO: (MSG_WAITALL | MSG_PEEK) isn't properly handled.
>>   */
>>  int
>>  soreceive_stream(struct socket *so, struct sockaddr **psa, struct uio *uio,
>> @@ -2177,12 +2176,14 @@ soreceive_stream(struct socket *so, struct sockaddr **
>>               return (EINVAL);
>>       if (psa != NULL)
>>               *psa = NULL;
>> -     if (controlp != NULL)
>> -             return (EINVAL);
>>       if (flagsp != NULL)
>>               flags = *flagsp &~ MSG_EOR;
>>       else
>>               flags = 0;
>> +     if (flags & (MSG_PEEK|MSG_WAITALL))
>> +             return (soreceive_generic(so, psa, uio, mp0, controlp, flagsp));
>> +     if (controlp != NULL)
>> +             *controlp = NULL;
>
> Now soreceive_stream() contains dead code to handle MSG_WAITALL, and a
> bunch of always-true checks for both flags.
>
> Changes to this code should be reviewed.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPrugNoPJFwgEDy7cWngsL=8diy0JGgt3cpKv3zoX-ACyyjZuQ>