svn commit: r350099 - head/stand/common

Simon J. Gerraty sjg at FreeBSD.org
Wed Jul 17 23:33:15 UTC 2019


Author: sjg
Date: Wed Jul 17 23:33:14 2019
New Revision: 350099
URL: https://svnweb.freebsd.org/changeset/base/350099

Log:
  loader: ignore some variable settings if input unverified
  
  libsecureboot can tell us if the most recent file opened was
  verfied or not.
  If it's state is VE_UNVERIFIED_OK, skip if variable
  matches one of the restricted prefixes.
  
  Reviewed by:	stevek
  MFC after:	1 week
  Sponsored by:	Juniper Networks
  Differential Revision:	https://reviews.freebsd.org//D20909

Modified:
  head/stand/common/commands.c

Modified: head/stand/common/commands.c
==============================================================================
--- head/stand/common/commands.c	Wed Jul 17 23:09:40 2019	(r350098)
+++ head/stand/common/commands.c	Wed Jul 17 23:33:14 2019	(r350099)
@@ -304,6 +304,36 @@ command_set(int argc, char *argv[])
 		command_errmsg = "wrong number of arguments";
 		return (CMD_ERROR);
 	} else {
+#ifdef LOADER_VERIEXEC
+		/*
+		 * Impose restrictions if input is not verified
+		 */
+		const char *restricted[] = {
+			"boot",
+			"init",
+			"loader.ve.",
+			"rootfs",
+			"secur",
+			"vfs.",
+			NULL,
+		};
+		const char **cp;
+		int ves;
+
+		ves = ve_status_get(-1);
+		if (ves == VE_UNVERIFIED_OK) {
+#ifdef LOADER_VERIEXEC_TESTING
+			printf("Checking: %s\n", argv[1]);
+#endif
+			for (cp = restricted; *cp; cp++) {
+				if (strncmp(argv[1], *cp, strlen(*cp)) == 0) {
+					printf("Ignoring restricted variable: %s\n",
+					    argv[1]);
+					return (CMD_OK);
+				}
+			}
+		}
+#endif
 		if ((err = putenv(argv[1])) != 0) {
 			command_errmsg = strerror(err);
 			return (CMD_ERROR);


More information about the svn-src-head mailing list