svn commit: r334960 - head/sys/kern
Mark Johnston
markj at freebsd.org
Mon Jun 11 16:54:39 UTC 2018
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