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. _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"