svn commit: r352244 - head/sys/kern

Kyle Evans kevans at FreeBSD.org
Thu Sep 12 13:51:44 UTC 2019


Author: kevans
Date: Thu Sep 12 13:51:43 2019
New Revision: 352244
URL: https://svnweb.freebsd.org/changeset/base/352244

Log:
  kenv: assert that an empty static buffer passed in is "empty"
  
  Garbage in the passed-in buffer can cause problems if any attempts to read
  the kenv are inadvertently made between init_static_kenv and the first
  kern_setenv -- assuming there is one.
  
  This is cheap and easy, so do it. This also helps rule out some class of
  bugs as one tries to debug; tunables fetch from the static environment up
  until SI_SUB_KMEM + 1, and many of these buffers are global ~4k buffers that
  rely on BSS clearing while others just grab a page of free memory and use it
  (e.g. xen).

Modified:
  head/sys/kern/kern_environment.c

Modified: head/sys/kern/kern_environment.c
==============================================================================
--- head/sys/kern/kern_environment.c	Thu Sep 12 12:33:09 2019	(r352243)
+++ head/sys/kern/kern_environment.c	Thu Sep 12 13:51:43 2019	(r352244)
@@ -250,6 +250,8 @@ init_static_kenv(char *buf, size_t len)
 	char *eval;
 
 	KASSERT(!dynamic_kenv, ("kenv: dynamic_kenv already initialized"));
+	KASSERT(len == 0 || *buf == '\0',
+	    ("kenv: sized buffer must be initially empty"));
 
 	/*
 	 * We may be called twice, with the second call needed to relocate


More information about the svn-src-all mailing list