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>