From cae22dd9043efd39392d90c60416e512ce313c75 Mon Sep 17 00:00:00 2001 From: Kyle Evans Date: Fri, 6 Jul 2018 16:51:35 +0000 Subject: [PATCH] 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 --- sys/kern/kern_environment.c | 2 +- sys/kern/subr_hints.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_environment.c b/sys/kern/kern_environment.c index a2d4102d917c..d5f0873fa40e 100644 --- a/sys/kern/kern_environment.c +++ b/sys/kern/kern_environment.c @@ -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) diff --git a/sys/kern/subr_hints.c b/sys/kern/subr_hints.c index c9d9af1324d4..b44020173d9b 100644 --- a/sys/kern/subr_hints.c +++ b/sys/kern/subr_hints.c @@ -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,