Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jul 2018 16:51:35 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r336036 - head/sys/kern
Message-ID:  <201807061651.w66GpZOc090879@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Fri Jul  6 16:51:35 2018
New Revision: 336036
URL: https://svnweb.freebsd.org/changeset/base/336036

Log:
  kern_environment: Fix SYSINIT ordering
  
  The dynamic environment was being initialized at SI_SUB_KMEM, SI_ORDER_ANY.
  I added the hint-merging at SI_SUB_KMEM, SI_ORDER_ANY as well in r335998 -
  this can only work by coincidence.
  
  Re-do both to operate at SI_SUB_KMEM + 1, SI_ORDER_FIRST and SI_ORDER_SECOND
  respectively to be safe. It's sufficiently obfuscated away as to when in
  SU_SUB_KMEM malloc will be available, and the dynamic environment cannot be
  relied upon there anyways since it's initialized at SI_ORDER_ANY.
  
  Reported by:	bde
  Discussed with:	bde
  X-MFC-With: r335998

Modified:
  head/sys/kern/kern_environment.c
  head/sys/kern/subr_hints.c

Modified: head/sys/kern/kern_environment.c
==============================================================================
--- head/sys/kern/kern_environment.c	Fri Jul  6 16:23:30 2018	(r336035)
+++ head/sys/kern/kern_environment.c	Fri Jul  6 16:51:35 2018	(r336036)
@@ -346,7 +346,7 @@ init_dynamic_kenv(void *data __unused)
 	mtx_init(&kenv_lock, "kernel environment", NULL, MTX_DEF);
 	dynamic_kenv = 1;
 }
-SYSINIT(kenv, SI_SUB_KMEM, SI_ORDER_ANY, init_dynamic_kenv, NULL);
+SYSINIT(kenv, SI_SUB_KMEM + 1, SI_ORDER_FIRST, init_dynamic_kenv, NULL);
 
 void
 freeenv(char *env)

Modified: head/sys/kern/subr_hints.c
==============================================================================
--- head/sys/kern/subr_hints.c	Fri Jul  6 16:23:30 2018	(r336035)
+++ head/sys/kern/subr_hints.c	Fri Jul  6 16:51:35 2018	(r336036)
@@ -88,7 +88,7 @@ static_hints_to_env(void *data __unused)
 }
 
 /* Any time after dynamic env is setup */
-SYSINIT(hintenv, SI_SUB_KMEM, SI_ORDER_ANY, static_hints_to_env, NULL);
+SYSINIT(hintenv, SI_SUB_KMEM + 1, SI_ORDER_SECOND, static_hints_to_env, NULL);
 
 /*
  * Checks the environment to see if we even have any hints.  If it has no hints,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807061651.w66GpZOc090879>