Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Nov 2018 23:46:23 +0000 (UTC)
From:      Conrad Meyer <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r340038 - in head: lib/libc/sys sys/kern
Message-ID:  <201811012346.wA1NkNS5079845@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Thu Nov  1 23:46:23 2018
New Revision: 340038
URL: https://svnweb.freebsd.org/changeset/base/340038

Log:
  kern_poll: Restore explanatory comment removed in r177374
  
  The comment isn't stale.  The check is bogus in the sense that poll(2)
  does not require pollfd entries to be unique in fd space, so there is no
  reason there cannot be more pollfd entries than open or even allowed
  fds.  The check is mostly a seatbelt against accidental misuse or
  abuse.  FD_SETSIZE, while usually unrelated to poll, is used as an
  arbitrary floor for systems with very low kern.maxfilesperproc.
  
  Additionally, document this possible EINVAL condition in the poll.2
  manual.
  
  No functional change.
  
  Reviewed by:	markj
  Sponsored by:	Dell EMC Isilon
  Differential Revision:	https://reviews.freebsd.org/D17671

Modified:
  head/lib/libc/sys/poll.2
  head/sys/kern/sys_generic.c

Modified: head/lib/libc/sys/poll.2
==============================================================================
--- head/lib/libc/sys/poll.2	Thu Nov  1 23:42:35 2018	(r340037)
+++ head/lib/libc/sys/poll.2	Thu Nov  1 23:46:23 2018	(r340038)
@@ -28,7 +28,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd November 13, 2014
+.Dd November 1, 2018
 .Dt POLL 2
 .Os
 .Sh NAME
@@ -232,7 +232,15 @@ points outside the process's allocated address space.
 A signal was delivered before the time limit expired and
 before any of the selected events occurred.
 .It Bq Er EINVAL
-The specified time limit is invalid. One of its components is negative or too large.
+The specified time limit is invalid.
+One of its components is negative or too large.
+.It Bq Er EINVAL
+The number of pollfd structures specified by
+.Fa nfds
+exceeds the system tunable
+.Va kern.maxfilesperproc
+and
+.Dv FD_SETSIZE .
 .El
 .Sh SEE ALSO
 .Xr accept 2 ,

Modified: head/sys/kern/sys_generic.c
==============================================================================
--- head/sys/kern/sys_generic.c	Thu Nov  1 23:42:35 2018	(r340037)
+++ head/sys/kern/sys_generic.c	Thu Nov  1 23:46:23 2018	(r340038)
@@ -1339,6 +1339,13 @@ kern_poll(struct thread *td, struct pollfd *ufds, u_in
 	} else
 		sbt = -1;
 
+	/*
+	 * This is kinda bogus.  We have fd limits, but that is not
+	 * really related to the size of the pollfd array.  Make sure
+	 * we let the process use at least FD_SETSIZE entries and at
+	 * least enough for the system-wide limits.  We want to be reasonably
+	 * safe, but not overly restrictive.
+	 */
 	if (nfds > maxfilesperproc && nfds > FD_SETSIZE) 
 		return (EINVAL);
 	if (nfds > nitems(stackfds))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811012346.wA1NkNS5079845>