svn commit: r338409 - head/sys/riscv/riscv

Ruslan Bukin br at FreeBSD.org
Fri Aug 31 16:15:47 UTC 2018


Author: br
Date: Fri Aug 31 16:15:46 2018
New Revision: 338409
URL: https://svnweb.freebsd.org/changeset/base/338409

Log:
  Fix an integer overflow while setting the kernel address (MODINFO_ADDR).
  
  This eliminates build warning and makes kldstat happy.
  
  Approved by:	re (marius)

Modified:
  head/sys/riscv/riscv/machdep.c

Modified: head/sys/riscv/riscv/machdep.c
==============================================================================
--- head/sys/riscv/riscv/machdep.c	Fri Aug 31 16:10:01 2018	(r338408)
+++ head/sys/riscv/riscv/machdep.c	Fri Aug 31 16:15:46 2018	(r338409)
@@ -734,13 +734,15 @@ cache_setup(void)
 vm_offset_t
 fake_preload_metadata(struct riscv_bootparams *rvbp __unused)
 {
+	static uint32_t fake_preload[35];
 #ifdef DDB
 	vm_offset_t zstart = 0, zend = 0;
 #endif
 	vm_offset_t lastaddr;
-	int i = 0;
-	static uint32_t fake_preload[35];
+	int i;
 
+	i = 0;
+
 	fake_preload[i++] = MODINFO_NAME;
 	fake_preload[i++] = strlen("kernel") + 1;
 	strcpy((char*)&fake_preload[i++], "kernel");
@@ -751,12 +753,13 @@ fake_preload_metadata(struct riscv_bootparams *rvbp __
 	i += 3;
 	fake_preload[i++] = MODINFO_ADDR;
 	fake_preload[i++] = sizeof(vm_offset_t);
-	fake_preload[i++] = (uint64_t)(KERNBASE + KERNENTRY);
+	*(vm_offset_t *)&fake_preload[i++] =
+	    (vm_offset_t)(KERNBASE + KERNENTRY);
 	i += 1;
 	fake_preload[i++] = MODINFO_SIZE;
-	fake_preload[i++] = sizeof(uint64_t);
-	printf("end is 0x%016lx\n", (uint64_t)&end);
-	fake_preload[i++] = (uint64_t)&end - (uint64_t)(KERNBASE + KERNENTRY);
+	fake_preload[i++] = sizeof(vm_offset_t);
+	fake_preload[i++] = (vm_offset_t)&end -
+	    (vm_offset_t)(KERNBASE + KERNENTRY);
 	i += 1;
 #ifdef DDB
 #if 0


More information about the svn-src-all mailing list