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>