Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Aug 2015 15:57:57 +0000 (UTC)
From:      Roger Pau Monné <royger@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r287000 - in head/sys: amd64/amd64 arm/arm i386/i386 kern mips/beri x86/x86
Message-ID:  <201508211557.t7LFvvvv047709@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: royger
Date: Fri Aug 21 15:57:57 2015
New Revision: 287000
URL: https://svnweb.freebsd.org/changeset/base/287000

Log:
  preload_search_info: make sure mod is set
  
  Add a check to preload_search_info to make sure mod is set. Most of the
  callers of preload_search_info don't check that the mod parameter is
  set, which can cause page faults. While at it, remove some now unnecessary
  checks before calling preload_search_info.
  
  Sponsored by:		Citrix Systems R&D
  Reviewed by:		kib
  Differential Revision:	https://reviews.freebsd.org/D3440

Modified:
  head/sys/amd64/amd64/machdep.c
  head/sys/arm/arm/machdep.c
  head/sys/i386/i386/machdep.c
  head/sys/kern/link_elf.c
  head/sys/kern/subr_module.c
  head/sys/mips/beri/beri_machdep.c
  head/sys/x86/x86/fdt_machdep.c
  head/sys/x86/x86/nexus.c

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/amd64/amd64/machdep.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -1621,8 +1621,8 @@ hammer_time(u_int64_t modulep, u_int64_t
 	 * Use vt(4) by default for UEFI boot (during the sc(4)/vt(4)
 	 * transition).
 	 */
-	if (kmdp != NULL && preload_search_info(kmdp,
-	    MODINFO_METADATA | MODINFOMD_EFI_MAP) != NULL)
+	if (preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_EFI_MAP)
+	    != NULL)
 		vty_set_preferred(VTY_VT);
 
 	identify_cpu();		/* Final stage of CPU initialization */

Modified: head/sys/arm/arm/machdep.c
==============================================================================
--- head/sys/arm/arm/machdep.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/arm/arm/machdep.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -1534,10 +1534,7 @@ initarm(struct arm_boot_params *abp)
 	 * Find the dtb passed in by the boot loader.
 	 */
 	kmdp = preload_search_by_type("elf kernel");
-	if (kmdp != NULL)
-		dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
-	else
-		dtbp = (vm_offset_t)NULL;
+	dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
 #if defined(FDT_DTB_STATIC)
 	/*
 	 * In case the device tree blob was not retrieved (from metadata) try

Modified: head/sys/i386/i386/machdep.c
==============================================================================
--- head/sys/i386/i386/machdep.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/i386/i386/machdep.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -2097,9 +2097,8 @@ getmemsize(int first)
 	kmdp = preload_search_by_type("elf kernel");
 	if (kmdp == NULL)
 		kmdp = preload_search_by_type("elf32 kernel");
-	if (kmdp != NULL)
-		smapbase = (struct bios_smap *)preload_search_info(kmdp,
-		    MODINFO_METADATA | MODINFOMD_SMAP);
+	smapbase = (struct bios_smap *)preload_search_info(kmdp,
+	    MODINFO_METADATA | MODINFOMD_SMAP);
 	if (smapbase != NULL) {
 		add_smap_entries(smapbase, physmap, &physmap_idx);
 		has_smap = 1;
@@ -2778,8 +2777,6 @@ smap_sysctl_handler(SYSCTL_HANDLER_ARGS)
 	kmdp = preload_search_by_type("elf kernel");
 	if (kmdp == NULL)
 		kmdp = preload_search_by_type("elf32 kernel");
-	if (kmdp == NULL)
-		return (0);
 	smapbase = (struct bios_smap *)preload_search_info(kmdp,
 	    MODINFO_METADATA | MODINFOMD_SMAP);
 	if (smapbase == NULL)

Modified: head/sys/kern/link_elf.c
==============================================================================
--- head/sys/kern/link_elf.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/kern/link_elf.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -400,8 +400,7 @@ link_elf_init(void* arg)
 	modptr = preload_search_by_type("elf" __XSTRING(__ELF_WORD_SIZE) " kernel");
 	if (modptr == NULL)
 		modptr = preload_search_by_type("elf kernel");
-	if (modptr != NULL)
-		modname = (char *)preload_search_info(modptr, MODINFO_NAME);
+	modname = (char *)preload_search_info(modptr, MODINFO_NAME);
 	if (modname == NULL)
 		modname = "kernel";
 	linker_kernel_file = linker_make_file(modname, &link_elf_class);

Modified: head/sys/kern/subr_module.c
==============================================================================
--- head/sys/kern/subr_module.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/kern/subr_module.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -160,6 +160,9 @@ preload_search_info(caddr_t mod, int inf
     uint32_t	type = 0;
     int		next;
 
+    if (mod == NULL)
+    	return (NULL);
+
     curp = mod;
     for (;;) {
 	hdr = (uint32_t *)curp;

Modified: head/sys/mips/beri/beri_machdep.c
==============================================================================
--- head/sys/mips/beri/beri_machdep.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/mips/beri/beri_machdep.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -251,10 +251,7 @@ platform_start(__register_t a0, __regist
 	 * Find the dtb passed in by the boot loader (currently fictional).
 	 */
 	kmdp = preload_search_by_type("elf kernel");
-	if (kmdp != NULL)
-		dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
-	else
-		dtbp = (vm_offset_t)NULL;
+	dtbp = MD_FETCH(kmdp, MODINFOMD_DTBP, vm_offset_t);
 
 #if defined(FDT_DTB_STATIC)
 	/*

Modified: head/sys/x86/x86/fdt_machdep.c
==============================================================================
--- head/sys/x86/x86/fdt_machdep.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/x86/x86/fdt_machdep.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -54,7 +54,7 @@ x86_init_fdt(void)
 	mdp = preload_search_by_type("elf kernel");
 	if (mdp == NULL)
 		mdp = preload_search_by_type("elf32 kernel");
-	dtbp = (mdp != NULL) ? MD_FETCH(mdp, MODINFOMD_DTBP, void *) : NULL;
+	dtbp = MD_FETCH(mdp, MODINFOMD_DTBP, void *);
 
 #if defined(FDT_DTB_STATIC)
 	/*

Modified: head/sys/x86/x86/nexus.c
==============================================================================
--- head/sys/x86/x86/nexus.c	Fri Aug 21 15:53:08 2015	(r286999)
+++ head/sys/x86/x86/nexus.c	Fri Aug 21 15:57:57 2015	(r287000)
@@ -690,11 +690,8 @@ ram_attach(device_t dev)
 	kmdp = preload_search_by_type("elf kernel");
 	if (kmdp == NULL)
 		kmdp = preload_search_by_type(ELF_KERN_STR);  
-	if (kmdp != NULL)
-		smapbase = (struct bios_smap *)preload_search_info(kmdp,
-		    MODINFO_METADATA | MODINFOMD_SMAP);
-	else
-		smapbase = NULL;
+	smapbase = (struct bios_smap *)preload_search_info(kmdp,
+	    MODINFO_METADATA | MODINFOMD_SMAP);
 	if (smapbase != NULL) {
 		smapsize = *((u_int32_t *)smapbase - 1);
 		smapend = (struct bios_smap *)((uintptr_t)smapbase + smapsize);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508211557.t7LFvvvv047709>