Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Mar 2014 02:44:43 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r263962 - stable/10/sys/kern
Message-ID:  <201403310244.s2V2ihak031349@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mjg
Date: Mon Mar 31 02:44:43 2014
New Revision: 263962
URL: http://svnweb.freebsd.org/changeset/base/263962

Log:
  MFC r263755:
  Document a known problem with handling the process intended to receive
  SIGIO in /dev/devctl.

Modified:
  stable/10/sys/kern/subr_bus.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/subr_bus.c
==============================================================================
--- stable/10/sys/kern/subr_bus.c	Mon Mar 31 02:30:55 2014	(r263961)
+++ stable/10/sys/kern/subr_bus.c	Mon Mar 31 02:44:43 2014	(r263962)
@@ -497,6 +497,21 @@ devioctl(struct cdev *dev, u_long cmd, c
 			devsoftc.nonblock = 0;
 		return (0);
 	case FIOASYNC:
+		/*
+		 * FIXME:
+		 * Since this is a simple assignment there is no guarantee that
+		 * devsoftc.async_proc consumers will get a valid pointer.
+		 *
+		 * Example scenario where things break (processes A and B):
+		 * 1. A opens devctl
+		 * 2. A sends fd to B
+		 * 3. B sets itself as async_proc
+		 * 4. B exits
+		 *
+		 * However, normally this requires root privileges and the only
+		 * in-tree consumer does not behave in a dangerous way so the
+		 * issue is not critical.
+		 */
 		if (*(int*)data)
 			devsoftc.async_proc = td->td_proc;
 		else
@@ -582,6 +597,7 @@ devctl_queue_data_f(char *data, int flag
 	cv_broadcast(&devsoftc.cv);
 	mtx_unlock(&devsoftc.mtx);
 	selwakeup(&devsoftc.sel);
+	/* XXX see a comment in devioctl */
 	p = devsoftc.async_proc;
 	if (p != NULL) {
 		PROC_LOCK(p);



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