svn commit: r362968 - head/sys/kern

Mark Johnston markj at FreeBSD.org
Mon Jul 6 16:34:10 UTC 2020


Author: markj
Date: Mon Jul  6 16:34:09 2020
New Revision: 362968
URL: https://svnweb.freebsd.org/changeset/base/362968

Log:
  Allow accesses of the caller's CPU and domain sets in capability mode.
  
  cpuset_(get|set)(affinity|domain)(2) permit a get or set of the calling
  thread or process' CPU and domain set in capability mode, but only when
  the thread or process ID is specified as -1.  Extend this to cover the
  case where the ID actually matches the caller's TID or PID, since some
  code, such as our pthread_attr_get_np() implementation, always provides
  an explicit ID.
  
  It was not and still is not permitted to access CPU and domain sets for
  other threads in the same process when the process is in capability
  mode.  This might change in the future.
  
  Submitted by:	Greg V <greg at unrelenting.technology> (original version)
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D25552

Modified:
  head/sys/kern/kern_cpuset.c

Modified: head/sys/kern/kern_cpuset.c
==============================================================================
--- head/sys/kern/kern_cpuset.c	Mon Jul  6 16:33:28 2020	(r362967)
+++ head/sys/kern/kern_cpuset.c	Mon Jul  6 16:34:09 2020	(r362968)
@@ -1595,7 +1595,9 @@ cpuset_check_capabilities(struct thread *td, cpulevel_
 			return (ECAPMODE);
 		if (which != CPU_WHICH_TID && which != CPU_WHICH_PID)
 			return (ECAPMODE);
-		if (id != -1)
+		if (id != -1 &&
+		    !(which == CPU_WHICH_TID && id == td->td_tid) &&
+		    !(which == CPU_WHICH_PID && id == td->td_proc->p_pid))
 			return (ECAPMODE);
 	}
 	return (0);


More information about the svn-src-all mailing list