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

Re: [Xen-devel] Seg fault running xl create with 4.1.0-rc2

To: M A Young <m.a.young@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] Seg fault running xl create with 4.1.0-rc2
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Fri, 28 Jan 2011 16:45:07 +0000
Cc: Ian, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Delivery-date: Fri, 28 Jan 2011 08:44:39 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <alpine.LFD.2.02.1101271934100.26031@xxxxxxxxxxxxxxx>
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: <alpine.LFD.2.02.1101271934100.26031@xxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
On Thu, 27 Jan 2011, M A Young wrote:
> If I run xl create configfile where configfile includes the lines
> bootloader = "/usr/bin/pygrub"
> disk = [ 'file:/dev/mapper/vg0-partname,xvda1,w' ]
> 
> then xl segfaults at the line
>      ret = strdup(dev);
> 
> of libxl_device_disk_local_attach() in tools/libxl/libxl.c . The problem 
> is that dev is not set if libxl__blktap_enabled(&gc) is false or if 
> phystype isn't recognized. In the latter case I presume we want to skip 
> that line and return NULL, but if libxl__blktap_enabled(&gc) is false we 
> should be returning something, at least in the case where 
> phystype=PHYSTYPE_FILE, so that we can fall back to qdisk. I think 
> something like the attached patch (not yet tested) should work.


Thanks for the patch.
I extended it a bit, covering qcow and qcow2 as well:



diff -r 722f7b7678dc tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri Jan 28 11:08:49 2011 +0000
+++ b/tools/libxl/libxl.c       Fri Jan 28 16:42:47 2011 +0000
@@ -1021,7 +1021,7 @@ char * libxl_device_disk_local_attach(li
 {
     libxl__gc gc = LIBXL_INIT_GC(ctx);
     const char *dev = NULL;
-    char *ret;
+    char *ret = NULL;
     int phystype = disk->phystype;
     switch (phystype) {
         case PHYSTYPE_PHY: {
@@ -1033,18 +1033,27 @@ char * libxl_device_disk_local_attach(li
             /* let's pretend is tap:aio for the moment */
             phystype = PHYSTYPE_AIO;
         case PHYSTYPE_AIO:
-        case PHYSTYPE_QCOW:
-        case PHYSTYPE_QCOW2:
+            if (!libxl__blktap_enabled(&gc)) {
+                dev = disk->physpath;
+                break;
+            }
         case PHYSTYPE_VHD:
             if (libxl__blktap_enabled(&gc))
                 dev = libxl__blktap_devpath(&gc, disk->physpath, phystype);
+            else
+                LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "tapdisk2 is required to 
open a vhd disk\n");
+            break;
+        case PHYSTYPE_QCOW:
+        case PHYSTYPE_QCOW2:
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "cannot locally attach a qcow or 
qcow2 disk image\n");
             break;
 
         default:
             LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "unrecognized disk physical 
type: %d\n", phystype);
             break;
     }
-    ret = strdup(dev);
+    if (dev != NULL)
+        ret = strdup(dev);
     libxl__free_all(&gc);
     return ret;
 }

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

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