Module Name: src Committed By: riastradh Date: Thu Oct 28 10:45:49 UTC 2021
Modified Files: src/sys/arch/amd64/amd64: machdep.c src/sys/arch/i386/i386: machdep.c src/sys/arch/x86/include: machdep.h src/sys/arch/x86/x86: x86_machdep.c Log Message: x86: Process bootloader rndseed much sooner. To generate a diff of this commit: cvs rdiff -u -r1.358 -r1.359 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.831 -r1.832 src/sys/arch/i386/i386/machdep.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/x86/include/machdep.h cvs rdiff -u -r1.149 -r1.150 src/sys/arch/x86/x86/x86_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/amd64/amd64/machdep.c diff -u src/sys/arch/amd64/amd64/machdep.c:1.358 src/sys/arch/amd64/amd64/machdep.c:1.359 --- src/sys/arch/amd64/amd64/machdep.c:1.358 Sun Jan 24 14:17:10 2021 +++ src/sys/arch/amd64/amd64/machdep.c Thu Oct 28 10:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.358 2021/01/24 14:17:10 simonb Exp $ */ +/* $NetBSD: machdep.c,v 1.359 2021/10/28 10:45:48 riastradh Exp $ */ /* * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011 @@ -110,7 +110,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.358 2021/01/24 14:17:10 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.359 2021/10/28 10:45:48 riastradh Exp $"); #include "opt_modular.h" #include "opt_user_ldt.h" @@ -1719,6 +1719,7 @@ init_x86_64(paddr_t first_avail) #endif cpu_init_msrs(&cpu_info_primary, true); cpu_rng_init(); + x86_rndseed(); #ifndef XENPV cpu_speculation_init(&cpu_info_primary); #endif Index: src/sys/arch/i386/i386/machdep.c diff -u src/sys/arch/i386/i386/machdep.c:1.831 src/sys/arch/i386/i386/machdep.c:1.832 --- src/sys/arch/i386/i386/machdep.c:1.831 Tue Jul 14 00:45:52 2020 +++ src/sys/arch/i386/i386/machdep.c Thu Oct 28 10:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.831 2020/07/14 00:45:52 yamaguchi Exp $ */ +/* $NetBSD: machdep.c,v 1.832 2021/10/28 10:45:48 riastradh Exp $ */ /* * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009, 2017 @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.831 2020/07/14 00:45:52 yamaguchi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.832 2021/10/28 10:45:48 riastradh Exp $"); #include "opt_beep.h" #include "opt_compat_freebsd.h" @@ -1162,6 +1162,7 @@ init386(paddr_t first_avail) cpu_probe(&cpu_info_primary); cpu_init_msrs(&cpu_info_primary, true); cpu_rng_init(); + x86_rndseed(); #ifndef XENPV cpu_speculation_init(&cpu_info_primary); #endif Index: src/sys/arch/x86/include/machdep.h diff -u src/sys/arch/x86/include/machdep.h:1.11 src/sys/arch/x86/include/machdep.h:1.12 --- src/sys/arch/x86/include/machdep.h:1.11 Sun Nov 15 13:59:42 2020 +++ src/sys/arch/x86/include/machdep.h Thu Oct 28 10:45:48 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.h,v 1.11 2020/11/15 13:59:42 bouyer Exp $ */ +/* $NetBSD: machdep.h,v 1.12 2021/10/28 10:45:48 riastradh Exp $ */ /* * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc. * All rights reserved. @@ -65,4 +65,6 @@ void init_x86_msgbuf(void); void x86_startup(void); void x86_sysctl_machdep_setup(struct sysctllog **); +void x86_rndseed(void); + #endif /* _X86_MACHDEP_H_ */ Index: src/sys/arch/x86/x86/x86_machdep.c diff -u src/sys/arch/x86/x86/x86_machdep.c:1.149 src/sys/arch/x86/x86/x86_machdep.c:1.150 --- src/sys/arch/x86/x86/x86_machdep.c:1.149 Thu Oct 7 12:52:27 2021 +++ src/sys/arch/x86/x86/x86_machdep.c Thu Oct 28 10:45:49 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: x86_machdep.c,v 1.149 2021/10/07 12:52:27 msaitoh Exp $ */ +/* $NetBSD: x86_machdep.c,v 1.150 2021/10/28 10:45:49 riastradh Exp $ */ /*- * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi, @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.149 2021/10/07 12:52:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.150 2021/10/28 10:45:49 riastradh Exp $"); #include "opt_modular.h" #include "opt_physmem.h" @@ -259,16 +259,7 @@ module_init_md(void) #endif break; case BI_MODULE_RND: - aprint_debug("Random seed data path=%s len=%d pa=%x\n", - bi->path, bi->len, bi->base); - KASSERT(trunc_page(bi->base) == bi->base); - rnd_seed( -#ifdef KASLR - (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base), -#else - (void *)((uintptr_t)bi->base + KERNBASE), -#endif - bi->len); + /* handled in x86_rndseed */ break; case BI_MODULE_FS: aprint_debug("File-system image path=%s len=%d pa=%x\n", @@ -293,6 +284,37 @@ module_init_md(void) #endif /* MODULAR */ void +x86_rndseed(void) +{ + struct btinfo_modulelist *biml; + struct bi_modulelist_entry *bi, *bimax; + + biml = lookup_bootinfo(BTINFO_MODULELIST); + if (biml == NULL) { + aprint_debug("No module info at boot\n"); + return; + } + + bi = (struct bi_modulelist_entry *)((uint8_t *)biml + sizeof(*biml)); + bimax = bi + biml->num; + for (; bi < bimax; bi++) { + switch (bi->type) { + case BI_MODULE_RND: + aprint_debug("Random seed data path=%s len=%d pa=%x\n", + bi->path, bi->len, bi->base); + KASSERT(trunc_page(bi->base) == bi->base); + rnd_seed( +#ifdef KASLR + (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base), +#else + (void *)((uintptr_t)bi->base + KERNBASE), +#endif + bi->len); + } + } +} + +void cpu_need_resched(struct cpu_info *ci, struct lwp *l, int flags) {