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-devel

[Xen-devel] [PATCH 2/6] ioemu: Use the image format sent by blktapctrl

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 2/6] ioemu: Use the image format sent by blktapctrl
From: Kevin Wolf <kwolf@xxxxxxx>
Date: Fri, 13 Mar 2009 10:16:39 +0100
Cc: Ian.Jackson@xxxxxxxxxxxxx, Kevin Wolf <kwolf@xxxxxxx>
Delivery-date: Fri, 13 Mar 2009 02:13:07 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1236935803-32548-1-git-send-email-kwolf@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1236935803-32548-1-git-send-email-kwolf@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Currently the blktap backend in ioemu lets qemu guess which format an
image is in. This was a security problem and the blktap backend
doesn't work any more since this was fixed in qemu.

This patch changes ioemu to respect the format it gets from blktapctrl.

Signed-off-by: Kevin Wolf <kwolf@xxxxxxx>
---
 hw/xen_blktap.c |   22 +++++++++++++++++++---
 hw/xen_blktap.h |   14 ++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/hw/xen_blktap.c b/hw/xen_blktap.c
index 0547889..9cb2a45 100644
--- a/hw/xen_blktap.c
+++ b/hw/xen_blktap.c
@@ -220,9 +220,10 @@ static int map_new_dev(struct td_state *s, int minor)
        return -1;
 }
 
-static int open_disk(struct td_state *s, char *path, int readonly)
+static int open_disk(struct td_state *s, char *path, int driver, int readonly)
 {
        BlockDriverState* bs;
+       BlockDriver* drv;
        char* devname;
        static int devnumber = 0;
        int i;
@@ -232,7 +233,22 @@ static int open_disk(struct td_state *s, char *path, int 
readonly)
        bs = bdrv_new(devname);
        free(devname);
 
-       if (bdrv_open(bs, path, 0) != 0) {
+       /* Search for disk driver */
+       for (i = 0; blktap_drivers[i].idnum >= 0; i++) {
+               if (blktap_drivers[i].idnum == driver)
+                       break;
+       }
+
+       if (blktap_drivers[i].idnum < 0) {
+               fprintf(stderr, "Could not find image format id %d\n", driver);
+               return -ENOMEM;
+       }
+
+       drv = blktap_drivers[i].drv;
+       DPRINTF("%s driver specified\n", drv ? drv->format_name : "No");
+
+       /* Open the image */
+       if (bdrv_open2(bs, path, 0, drv) != 0) {
                fprintf(stderr, "Could not open image file %s\n", path);
                return -ENOMEM;
        }
@@ -523,7 +539,7 @@ static void handle_blktap_ctrlmsg(void* private)
                        s = state_init();
 
                        /*Open file*/
-                       if (s == NULL || open_disk(s, path, msg->readonly)) {
+                       if (s == NULL || open_disk(s, path, msg->drivertype, 
msg->readonly)) {
                                msglen = sizeof(msg_hdr_t);
                                msg->type = CTLMSG_IMG_FAIL;
                                msg->len = msglen;
diff --git a/hw/xen_blktap.h b/hw/xen_blktap.h
index 92cc08e..46ead31 100644
--- a/hw/xen_blktap.h
+++ b/hw/xen_blktap.h
@@ -50,4 +50,18 @@ typedef struct fd_list_entry {
        struct fd_list_entry **pprev, *next;
 } fd_list_entry_t;
 
+typedef struct disk_info {
+       int idnum;
+       struct BlockDriver *drv;
+} disk_info_t;
+
+static disk_info_t blktap_drivers[] = {
+       { DISK_TYPE_AIO, &bdrv_raw },
+       { DISK_TYPE_SYNC, &bdrv_raw },
+       { DISK_TYPE_VMDK, &bdrv_vmdk },
+       { DISK_TYPE_QCOW, &bdrv_qcow },
+       { DISK_TYPE_QCOW2, &bdrv_qcow2 },
+       { -1, NULL }
+};
+
 #endif /*XEN_BLKTAP_H_*/
-- 
1.6.0.2


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