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;