WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] stubdom: mmap on /dev/mem support

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] stubdom: mmap on /dev/mem support
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 21 Oct 2009 08:10:15 -0700
Delivery-date: Wed, 21 Oct 2009 08:10:47 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1256137708 -3600
# Node ID 37829fd7c1e3faf19f77058ab604fd79dee194d0
# Parent  9ba4d512bd0c364d4d15adf79f496f7b2a033fb2
stubdom: mmap on /dev/mem support

This patch adds support for mmap on /dev/mem in a stubdom; it is
secure because it only works for memory areas that have been
explicitly allowed by the toolstack (xc_domain_iomem_permission).
Incidentally this is all that is needed to make MSI-X passthrough work
with stubdoms.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
 extras/mini-os/include/lib.h |    1 +
 extras/mini-os/lib/sys.c     |   12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff -r 9ba4d512bd0c -r 37829fd7c1e3 extras/mini-os/include/lib.h
--- a/extras/mini-os/include/lib.h      Wed Oct 21 16:07:37 2009 +0100
+++ b/extras/mini-os/include/lib.h      Wed Oct 21 16:08:28 2009 +0100
@@ -145,6 +145,7 @@ enum fd_type {
     FTYPE_BLK,
     FTYPE_KBD,
     FTYPE_FB,
+    FTYPE_MEM,
 };
 
 #define MAX_EVTCHN_PORTS 16
diff -r 9ba4d512bd0c -r 37829fd7c1e3 extras/mini-os/lib/sys.c
--- a/extras/mini-os/lib/sys.c  Wed Oct 21 16:07:37 2009 +0100
+++ b/extras/mini-os/lib/sys.c  Wed Oct 21 16:08:28 2009 +0100
@@ -188,6 +188,11 @@ int open(const char *pathname, int flags
     if (!strncmp(pathname,LOG_PATH,strlen(LOG_PATH))) {
        fd = alloc_fd(FTYPE_CONSOLE);
         printk("open(%s) -> %d\n", pathname, fd);
+        return fd;
+    }
+    if (!strncmp(pathname, "/dev/mem", strlen("/dev/mem"))) {
+        fd = alloc_fd(FTYPE_MEM);
+        printk("open(/dev/mem) -> %d\n", fd);
         return fd;
     }
     if (!strncmp(pathname, "/dev/ptmx", strlen("/dev/ptmx")))
@@ -1244,13 +1249,18 @@ void *mmap(void *start, size_t length, i
     ASSERT(prot == (PROT_READ|PROT_WRITE));
     ASSERT((fd == -1 && (flags == (MAP_SHARED|MAP_ANON) || flags == 
(MAP_PRIVATE|MAP_ANON)))
         || (fd != -1 && flags == MAP_SHARED));
-    ASSERT(offset == 0);
 
     if (fd == -1)
         return map_zero(n, 1);
     else if (files[fd].type == FTYPE_XC) {
         unsigned long zero = 0;
         return map_frames_ex(&zero, n, 0, 0, 1, DOMID_SELF, 0, 0);
+    } else if (files[fd].type == FTYPE_MEM) {
+        int i;
+        unsigned long mfns[n];
+        for (i = 0; i < n; i++)
+            mfns[i] = ((unsigned long) offset + (i * PAGE_SIZE)) >> PAGE_SHIFT;
+        return map_frames_ex(mfns, n, 1, 0, 1, DOMID_IO, 0, 
_PAGE_PRESENT|_PAGE_RW);
     } else ASSERT(0);
 }
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>