Module Name:    src
Committed By:   bouyer
Date:           Sat Jan 23 18:26:37 UTC 2010

Modified Files:
        src/sys/arch/xen/xen: privcmd.c

Log Message:
Use paddr_t to store physical address and cast mfn values to paddr_t
before shift. Fix overflow issue preventing xend from working as
reported by Mark Davies on port-xen@


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/xen/xen/privcmd.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/xen/xen/privcmd.c
diff -u src/sys/arch/xen/xen/privcmd.c:1.39 src/sys/arch/xen/xen/privcmd.c:1.40
--- src/sys/arch/xen/xen/privcmd.c:1.39	Fri Oct 23 02:32:34 2009
+++ src/sys/arch/xen/xen/privcmd.c	Sat Jan 23 18:26:37 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: privcmd.c,v 1.39 2009/10/23 02:32:34 snj Exp $ */
+/* $NetBSD: privcmd.c,v 1.40 2010/01/23 18:26:37 bouyer Exp $ */
 
 /*-
  * Copyright (c) 2004 Christian Limpach.
@@ -27,7 +27,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.39 2009/10/23 02:32:34 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.40 2010/01/23 18:26:37 bouyer Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -336,7 +336,7 @@
 		privcmd_mmap_t *mcmd = ap->a_data;
 		privcmd_mmap_entry_t mentry;
 		vaddr_t va;
-		u_long ma;
+		paddr_t ma;
 		struct vm_map *vmm = &curlwp->l_proc->p_vmspace->vm_map;
 
 		for (i = 0; i < mcmd->num; i++) {
@@ -357,7 +357,7 @@
 			if (maddr == NULL)
 				return ENOMEM;
 			va = mentry.va & ~PAGE_MASK;
-			ma = mentry.mfn <<  PGSHIFT; /* XXX ??? */
+			ma = ((paddr_t)mentry.mfn) <<  PGSHIFT; /* XXX ??? */
 			for (j = 0; j < mentry.npages; j++) {
 				maddr[j] = ma;
 				ma += PAGE_SIZE;
@@ -374,7 +374,8 @@
 		int i;
 		privcmd_mmapbatch_t* pmb = ap->a_data;
 		vaddr_t va0, va;
-		u_long mfn, ma;
+		u_long mfn;
+		paddr_t ma;
 		struct vm_map *vmm;
 		struct vm_map_entry *entry;
 		vm_prot_t prot;
@@ -420,7 +421,7 @@
 				    UVM_KMF_VAONLY);
 				return error;
 			}
-			ma = mfn << PGSHIFT;
+			ma = ((paddr_t)mfn) << PGSHIFT;
 			if (pmap_enter_ma(pmap_kernel(), trymap, ma, 0,
 			    prot, PMAP_CANFAIL, pmb->dom)) {
 				mfn |= 0xF0000000;

Reply via email to