]> xenbits.xensource.com Git - freebsd.git/commitdiff
Follow up r352244: kenv: tighten up assertions
authorkevans <kevans@FreeBSD.org>
Thu, 12 Sep 2019 14:34:46 +0000 (14:34 +0000)
committerkevans <kevans@FreeBSD.org>
Thu, 12 Sep 2019 14:34:46 +0000 (14:34 +0000)
As I like to forget: static kenv var formatting is actually such that an
empty environment would be double null bytes. We should make sure that a
non-zero buffer has at least enough for this, though most of the current
usage is with a 4k buffer.

sys/kern/kern_environment.c

index f7be09b6eb72357de1f1f81c1abff9e8ce6e041b..7c36a24ff75c96cc2d35e5ece8470f4d0f72940d 100644 (file)
@@ -250,7 +250,15 @@ init_static_kenv(char *buf, size_t len)
        char *eval;
 
        KASSERT(!dynamic_kenv, ("kenv: dynamic_kenv already initialized"));
-       KASSERT(len == 0 || *buf == '\0',
+       /*
+        * Suitably sized means it must be able to hold at least one empty
+        * variable, otherwise things go belly up if a kern_getenv call is
+        * made without a prior call to kern_setenv as we have a malformed
+        * environment.
+        */
+       KASSERT(len == 0 || len >= 2,
+           ("kenv: static env must be initialized or suitably sized"));
+       KASSERT(len == 0 || (*buf == '\0' && *(buf + 1) == '\0'),
            ("kenv: sized buffer must be initially empty"));
 
        /*