svn commit: r334960 - head/sys/kern

Matthew Macy mmacy at freebsd.org
Mon Jun 11 17:04:38 UTC 2018


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 at 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.


More information about the svn-src-head mailing list