diff options
-rw-r--r-- | sys/kern/init_main.c | 13 | ||||
-rw-r--r-- | sys/kern/stack_protector.c | 3 | ||||
-rw-r--r-- | sys/sys/kernel.h | 1 |
3 files changed, 15 insertions, 2 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 0af22fa..f1508c8 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -570,6 +570,19 @@ proc0_post(void *dummy __unused) } SYSINIT(p0post, SI_SUB_INTRINSIC_POST, SI_ORDER_FIRST, proc0_post, NULL); +static void +random_init(void *dummy __unused) +{ + + /* + * After CPU has been started we have some randomness on most + * platforms via get_cyclecount(). For platforms that don't + * we will reseed random(9) in proc0_post() as well. + */ + srandom(get_cyclecount()); +} +SYSINIT(random, SI_SUB_RANDOM, SI_ORDER_FIRST, random_init, NULL); + /* *************************************************************************** **** diff --git a/sys/kern/stack_protector.c b/sys/kern/stack_protector.c index 554d47d..b5f9973 100644 --- a/sys/kern/stack_protector.c +++ b/sys/kern/stack_protector.c @@ -28,5 +28,4 @@ __stack_chk_init(void *dummy __unused) for (i = 0; i < __arraycount(guard); i++) __stack_chk_guard[i] = guard[i]; } -/* SI_SUB_EVENTHANDLER is right after SI_SUB_LOCK used by arc4rand() init. */ -SYSINIT(stack_chk, SI_SUB_EVENTHANDLER, SI_ORDER_ANY, __stack_chk_init, NULL); +SYSINIT(stack_chk, SI_SUB_RANDOM, SI_ORDER_ANY, __stack_chk_init, NULL); diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h index 5461dfd..1a9cb5c 100644 --- a/sys/sys/kernel.h +++ b/sys/sys/kernel.h @@ -109,6 +109,7 @@ enum sysinit_sub_id { SI_SUB_VNET_PRELINK = 0x1E00000, /* vnet init before modules */ SI_SUB_KLD = 0x2000000, /* KLD and module setup */ SI_SUB_CPU = 0x2100000, /* CPU resource(s)*/ + SI_SUB_RANDOM = 0x2120000, /* random number generator */ SI_SUB_KDTRACE = 0x2140000, /* Kernel dtrace hooks */ SI_SUB_MAC = 0x2180000, /* TrustedBSD MAC subsystem */ SI_SUB_MAC_POLICY = 0x21C0000, /* TrustedBSD MAC policies */ |