svn commit: r277418 - in head/sys: boot/i386/libi386 x86/xen

Roger Pau Monné royger at FreeBSD.org
Tue Jan 20 12:28:25 UTC 2015


Author: royger
Date: Tue Jan 20 12:28:24 2015
New Revision: 277418
URL: https://svnweb.freebsd.org/changeset/base/277418

Log:
  loader: fix the size of MODINFOMD_MODULEP
  
  The data in MODINFOMD_MODULEP is packed by the loader as a 4 byte type, but
  the amd64 kernel expects a vm_paddr_t, which is of size 8 bytes. Fix this by
  saving it as 8 bytes in the loader and retrieving it using the proper type
  in the kernel.
  
  Sponsored by: Citrix Systems R&D

Modified:
  head/sys/boot/i386/libi386/bootinfo64.c
  head/sys/x86/xen/pv.c

Modified: head/sys/boot/i386/libi386/bootinfo64.c
==============================================================================
--- head/sys/boot/i386/libi386/bootinfo64.c	Tue Jan 20 11:43:16 2015	(r277417)
+++ head/sys/boot/i386/libi386/bootinfo64.c	Tue Jan 20 12:28:24 2015	(r277418)
@@ -185,6 +185,7 @@ bi_load64(char *args, vm_offset_t addr, 
     struct file_metadata	*md;
     u_int64_t			kernend;
     u_int64_t			envp;
+    u_int64_t			module;
     vm_offset_t			size;
     char			*rootdevname;
     int				howto;
@@ -222,7 +223,7 @@ bi_load64(char *args, vm_offset_t addr, 
     addr = roundup(addr, PAGE_SIZE);
 
     /* place the metadata before anything */
-    *modulep = addr;
+    module = *modulep = addr;
 
     kfp = file_findfile(NULL, "elf kernel");
     if (kfp == NULL)
@@ -233,7 +234,7 @@ bi_load64(char *args, vm_offset_t addr, 
     file_addmetadata(kfp, MODINFOMD_HOWTO, sizeof howto, &howto);
     file_addmetadata(kfp, MODINFOMD_ENVP, sizeof envp, &envp);
     file_addmetadata(kfp, MODINFOMD_KERNEND, sizeof kernend, &kernend);
-    file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof modulep, modulep);
+    file_addmetadata(kfp, MODINFOMD_MODULEP, sizeof module, &module);
     if (add_smap != 0)
         bios_addsmapdata(kfp);
 

Modified: head/sys/x86/xen/pv.c
==============================================================================
--- head/sys/x86/xen/pv.c	Tue Jan 20 11:43:16 2015	(r277417)
+++ head/sys/x86/xen/pv.c	Tue Jan 20 12:28:24 2015	(r277418)
@@ -402,7 +402,7 @@ xen_pv_parse_preload_data(u_int64_t modu
 		 * then calculating the offset with mod_start,
 		 * which contains the relocated modulep address.
 		 */
-		metadata = MD_FETCH(kmdp, MODINFOMD_MODULEP, int);
+		metadata = MD_FETCH(kmdp, MODINFOMD_MODULEP, vm_paddr_t);
 		off = HYPERVISOR_start_info->mod_start - metadata;
 
 		preload_bootstrap_relocate(off);


More information about the svn-src-all mailing list