Module Name: src Committed By: maxv Date: Sun Oct 8 09:06:50 UTC 2017
Modified Files: src/sys/arch/amd64/amd64: machdep.c src/sys/arch/amd64/conf: GENERIC_KASLR files.amd64 src/sys/arch/i386/conf: files.i386 src/sys/arch/x86/x86: pmap.c x86_machdep.c src/sys/arch/xen/conf: files.compat Log Message: KASLR: add workarounds to compute the bootinfo VAs (use the direct map), and don't use large pages yet. Both will be fixed later. To generate a diff of this commit: cvs rdiff -u -r1.262 -r1.263 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/amd64/conf/GENERIC_KASLR cvs rdiff -u -r1.93 -r1.94 src/sys/arch/amd64/conf/files.amd64 cvs rdiff -u -r1.387 -r1.388 src/sys/arch/i386/conf/files.i386 cvs rdiff -u -r1.260 -r1.261 src/sys/arch/x86/x86/pmap.c cvs rdiff -u -r1.96 -r1.97 src/sys/arch/x86/x86/x86_machdep.c cvs rdiff -u -r1.28 -r1.29 src/sys/arch/xen/conf/files.compat 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.262 src/sys/arch/amd64/amd64/machdep.c:1.263 --- src/sys/arch/amd64/amd64/machdep.c:1.262 Sat Sep 30 11:43:57 2017 +++ src/sys/arch/amd64/amd64/machdep.c Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.262 2017/09/30 11:43:57 maxv Exp $ */ +/* $NetBSD: machdep.c,v 1.263 2017/10/08 09:06:50 maxv 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.262 2017/09/30 11:43:57 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.263 2017/10/08 09:06:50 maxv Exp $"); /* #define XENDEBUG_LOW */ @@ -122,6 +122,7 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v #include "opt_mtrr.h" #include "opt_realmem.h" #include "opt_xen.h" +#include "opt_kaslr.h" #ifndef XEN #include "opt_physmem.h" #endif @@ -1472,8 +1473,13 @@ init_x86_64_ksyms(void) #ifndef XEN symtab = lookup_bootinfo(BTINFO_SYMTAB); if (symtab) { +#ifdef KASLR + tssym = PMAP_DIRECT_MAP((paddr_t)symtab->ssym); + tesym = PMAP_DIRECT_MAP((paddr_t)symtab->esym); +#else tssym = (vaddr_t)symtab->ssym + KERNBASE; tesym = (vaddr_t)symtab->esym + KERNBASE; +#endif ksyms_addsyms_elf(symtab->nsym, (void *)tssym, (void *)tesym); } else ksyms_addsyms_elf(*(long *)(void *)&end, Index: src/sys/arch/amd64/conf/GENERIC_KASLR diff -u src/sys/arch/amd64/conf/GENERIC_KASLR:1.1 src/sys/arch/amd64/conf/GENERIC_KASLR:1.2 --- src/sys/arch/amd64/conf/GENERIC_KASLR:1.1 Sat Oct 7 10:16:47 2017 +++ src/sys/arch/amd64/conf/GENERIC_KASLR Sun Oct 8 09:06:50 2017 @@ -1,5 +1,6 @@ -# $NetBSD: GENERIC_KASLR,v 1.1 2017/10/07 10:16:47 maxv Exp $ +# $NetBSD: GENERIC_KASLR,v 1.2 2017/10/08 09:06:50 maxv Exp $ include "arch/amd64/conf/GENERIC" makeoptions KASLR=1 # Kernel ASLR +options KASLR Index: src/sys/arch/amd64/conf/files.amd64 diff -u src/sys/arch/amd64/conf/files.amd64:1.93 src/sys/arch/amd64/conf/files.amd64:1.94 --- src/sys/arch/amd64/conf/files.amd64:1.93 Sun Oct 8 08:26:01 2017 +++ src/sys/arch/amd64/conf/files.amd64 Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -# $NetBSD: files.amd64,v 1.93 2017/10/08 08:26:01 maxv Exp $ +# $NetBSD: files.amd64,v 1.94 2017/10/08 09:06:50 maxv Exp $ # # new style config file for amd64 architecture # @@ -26,6 +26,7 @@ defparam opt_physmem.h PHYSMEM_MAX_ADDR defflag PMC defflag USER_LDT +defflag KASLR defflag eisa.h EISA # Start code Index: src/sys/arch/i386/conf/files.i386 diff -u src/sys/arch/i386/conf/files.i386:1.387 src/sys/arch/i386/conf/files.i386:1.388 --- src/sys/arch/i386/conf/files.i386:1.387 Tue Aug 15 08:51:38 2017 +++ src/sys/arch/i386/conf/files.i386 Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -# $NetBSD: files.i386,v 1.387 2017/08/15 08:51:38 maxv Exp $ +# $NetBSD: files.i386,v 1.388 2017/10/08 09:06:50 maxv Exp $ # # new style config file for i386 architecture # @@ -19,6 +19,7 @@ defparam CPURESET_DELAY obsolete defflag XBOX defflag PMC +defflag KASLR # User-settable LDT (used by WINE) defflag USER_LDT Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.260 src/sys/arch/x86/x86/pmap.c:1.261 --- src/sys/arch/x86/x86/pmap.c:1.260 Sat Sep 30 12:35:48 2017 +++ src/sys/arch/x86/x86/pmap.c Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.260 2017/09/30 12:35:48 maxv Exp $ */ +/* $NetBSD: pmap.c,v 1.261 2017/10/08 09:06:50 maxv Exp $ */ /* * Copyright (c) 2008, 2010, 2016, 2017 The NetBSD Foundation, Inc. @@ -51,7 +51,6 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * */ /* @@ -171,12 +170,13 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.260 2017/09/30 12:35:48 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.261 2017/10/08 09:06:50 maxv Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" #include "opt_multiprocessor.h" #include "opt_xen.h" +#include "opt_kaslr.h" #include <sys/param.h> #include <sys/systm.h> @@ -1605,6 +1605,11 @@ pmap_remap_largepages(void) vaddr_t kva, kva_end; paddr_t pa; +#ifdef KASLR + /* XXX no large pages yet, soon */ + return; +#endif + /* Remap the kernel text using large pages. */ kva = rounddown(bootspace.text.va, NBPD_L2); kva_end = rounddown(bootspace.text.va + Index: src/sys/arch/x86/x86/x86_machdep.c diff -u src/sys/arch/x86/x86/x86_machdep.c:1.96 src/sys/arch/x86/x86/x86_machdep.c:1.97 --- src/sys/arch/x86/x86/x86_machdep.c:1.96 Mon Oct 2 19:23:16 2017 +++ src/sys/arch/x86/x86/x86_machdep.c Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: x86_machdep.c,v 1.96 2017/10/02 19:23:16 maxv Exp $ */ +/* $NetBSD: x86_machdep.c,v 1.97 2017/10/08 09:06:50 maxv Exp $ */ /*- * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi, @@ -31,11 +31,12 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.96 2017/10/02 19:23:16 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.97 2017/10/08 09:06:50 maxv Exp $"); #include "opt_modular.h" #include "opt_physmem.h" #include "opt_splash.h" +#include "opt_kaslr.h" #include <sys/types.h> #include <sys/param.h> @@ -229,7 +230,11 @@ module_init_md(void) bi->path, bi->len, bi->base); KASSERT(trunc_page(bi->base) == bi->base); module_prime(bi->path, +#ifdef KASLR + (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base), +#else (void *)((uintptr_t)bi->base + KERNBASE), +#endif bi->len); break; case BI_MODULE_IMAGE: @@ -238,7 +243,12 @@ module_init_md(void) bi->path, bi->len, bi->base); KASSERT(trunc_page(bi->base) == bi->base); splash_setimage( - (void *)((uintptr_t)bi->base + KERNBASE), bi->len); +#ifdef KASLR + (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base), +#else + (void *)((uintptr_t)bi->base + KERNBASE), +#endif + bi->len); #endif break; case BI_MODULE_RND: @@ -246,7 +256,11 @@ module_init_md(void) 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); break; case BI_MODULE_FS: @@ -254,7 +268,12 @@ module_init_md(void) bi->path, bi->len, bi->base); KASSERT(trunc_page(bi->base) == bi->base); #if defined(MEMORY_DISK_HOOKS) && defined(MEMORY_DISK_DYNAMIC) - md_root_setconf((void *)((uintptr_t)bi->base + KERNBASE), + md_root_setconf( +#ifdef KASLR + (void *)PMAP_DIRECT_MAP((uintptr_t)bi->base), +#else + (void *)((uintptr_t)bi->base + KERNBASE), +#endif bi->len); #endif break; Index: src/sys/arch/xen/conf/files.compat diff -u src/sys/arch/xen/conf/files.compat:1.28 src/sys/arch/xen/conf/files.compat:1.29 --- src/sys/arch/xen/conf/files.compat:1.28 Sat Aug 12 07:21:57 2017 +++ src/sys/arch/xen/conf/files.compat Sun Oct 8 09:06:50 2017 @@ -1,4 +1,4 @@ -# $NetBSD: files.compat,v 1.28 2017/08/12 07:21:57 maxv Exp $ +# $NetBSD: files.compat,v 1.29 2017/10/08 09:06:50 maxv Exp $ # NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp # options for MP configuration through the MP spec @@ -6,7 +6,7 @@ #defflag opt_mpacpi.h MPACPI MPACPI_SCANPCI # MTRR support -defflag MTRR +defflag MTRR defflag opt_xen.h XEN PAE @@ -25,7 +25,8 @@ defflag bioscall.h XXXBIOSCALL defflag opt_pcibios.h XXXOPT_PCIBIOS defflag opt_pcifixup.h XXXOPT_PCIFIXUP -defflag opt_pmc.h XXXPMC +defflag opt_pmc.h XXXPMC +defflag opt_kaslr.h XXXKASLR # User-settable LDT (used by WINE) defflag opt_user_ldt.h XXXUSER_LDT