svn commit: r351774 - head/usr.bin/proccontrol

Konstantin Belousov kib at FreeBSD.org
Tue Sep 3 18:58:48 UTC 2019


Author: kib
Date: Tue Sep  3 18:58:48 2019
New Revision: 351774
URL: https://svnweb.freebsd.org/changeset/base/351774

Log:
  Add stackgap control mode to proccontrol(1).
  
  PR:	239894
  Reviewed by:	alc
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D21352

Modified:
  head/usr.bin/proccontrol/proccontrol.c

Modified: head/usr.bin/proccontrol/proccontrol.c
==============================================================================
--- head/usr.bin/proccontrol/proccontrol.c	Tue Sep  3 18:56:25 2019	(r351773)
+++ head/usr.bin/proccontrol/proccontrol.c	Tue Sep  3 18:58:48 2019	(r351774)
@@ -44,6 +44,7 @@ enum {
 	MODE_TRACE,
 	MODE_TRAPCAP,
 	MODE_PROTMAX,
+	MODE_STACKGAP,
 #ifdef PROC_KPTI_CTL
 	MODE_KPTI,
 #endif
@@ -73,8 +74,8 @@ static void __dead2
 usage(void)
 {
 
-	fprintf(stderr, "Usage: proccontrol -m (aslr|protmax|trace|trapcap"
-	    KPTI_USAGE") [-q] "
+	fprintf(stderr, "Usage: proccontrol -m (aslr|protmax|trace|trapcap|"
+	    "stackgap"KPTI_USAGE") [-q] "
 	    "[-s (enable|disable)] [-p pid | command]\n");
 	exit(1);
 }
@@ -101,6 +102,8 @@ main(int argc, char *argv[])
 				mode = MODE_TRACE;
 			else if (strcmp(optarg, "trapcap") == 0)
 				mode = MODE_TRAPCAP;
+			else if (strcmp(optarg, "stackgap") == 0)
+				mode = MODE_STACKGAP;
 #ifdef PROC_KPTI_CTL
 			else if (strcmp(optarg, "kpti") == 0)
 				mode = MODE_KPTI;
@@ -153,6 +156,9 @@ main(int argc, char *argv[])
 		case MODE_PROTMAX:
 			error = procctl(P_PID, pid, PROC_PROTMAX_STATUS, &arg);
 			break;
+		case MODE_STACKGAP:
+			error = procctl(P_PID, pid, PROC_STACKGAP_STATUS, &arg);
+			break;
 #ifdef PROC_KPTI_CTL
 		case MODE_KPTI:
 			error = procctl(P_PID, pid, PROC_KPTI_STATUS, &arg);
@@ -217,6 +223,26 @@ main(int argc, char *argv[])
 			else
 				printf(", not active\n");
 			break;
+		case MODE_STACKGAP:
+			switch (arg & (PROC_STACKGAP_ENABLE |
+			    PROC_STACKGAP_DISABLE)) {
+			case PROC_STACKGAP_ENABLE:
+				printf("enabled\n");
+				break;
+			case PROC_STACKGAP_DISABLE:
+				printf("disabled\n");
+				break;
+			}
+			switch (arg & (PROC_STACKGAP_ENABLE_EXEC |
+			    PROC_STACKGAP_DISABLE_EXEC)) {
+			case PROC_STACKGAP_ENABLE_EXEC:
+				printf("enabled after exec\n");
+				break;
+			case PROC_STACKGAP_DISABLE_EXEC:
+				printf("disabled after exec\n");
+				break;
+			}
+			break;
 #ifdef PROC_KPTI_CTL
 		case MODE_KPTI:
 			switch (arg & ~PROC_KPTI_STATUS_ACTIVE) {
@@ -255,6 +281,12 @@ main(int argc, char *argv[])
 			arg = enable ? PROC_PROTMAX_FORCE_ENABLE :
 			    PROC_PROTMAX_FORCE_DISABLE;
 			error = procctl(P_PID, pid, PROC_PROTMAX_CTL, &arg);
+			break;
+		case MODE_STACKGAP:
+			arg = enable ? PROC_STACKGAP_ENABLE_EXEC :
+			    (PROC_STACKGAP_DISABLE |
+			    PROC_STACKGAP_DISABLE_EXEC);
+			error = procctl(P_PID, pid, PROC_STACKGAP_CTL, &arg);
 			break;
 #ifdef PROC_KPTI_CTL
 		case MODE_KPTI:


More information about the svn-src-all mailing list