[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xl: Perform minimal validation of virtual disk file while parsing config file


  • To: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx>
  • From: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxx>
  • Date: Wed, 19 Jan 2011 13:26:57 -0500
  • Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 19 Jan 2011 10:27:50 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=w5+VqWD6DrQcZ4hpaJ2JCA63ZwwpMreagobrftb0AcnG9JRVjhVBtiO7LoSWIc4fR5 JqYUrKqprd1lNQ+6QiUN/S8+qJ+eixQxo+DVUKgjUUcCny/5Y4b9kdTJaGdGRvEqNchI 2QhRejio3mtkEnYvk0Mio58Th+ec7e0hpJ06s=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Apologies.  I inadvertently neglected Gianni's suggestion to switch to
logging from fprintf.

Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>

Kamala

diff -r fe8a177ae9cb tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Wed Jan 19 15:29:04 2011 +0000
+++ b/tools/libxl/libxl.c       Wed Jan 19 13:23:16 2011 -0500
@@ -826,6 +826,41 @@ skip_autopass:

 
/******************************************************************************/

+static int validate_virtual_disk(libxl_ctx *ctx, char *file_name,
libxl_disk_phystype disk_type)
+{
+    struct stat stat_buf;
+
+    if ( file_name == NULL ) {
+        LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk file name is NULL!\n");
+        return 0;
+    }
+
+    /* Return without further validation for empty cdrom drive.
+       Note: Post 4.1 we need to change the interface to handle empty
+       cdrom rather than go with the below assumption.
+     */
+    if ( (strncmp(file_name, "", sizeof("")) == 0) && (disk_type ==
PHYSTYPE_PHY) )
+        return 1;
+
+    if ( stat(file_name, &stat_buf) != 0 ) {
+        LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Stat on virtual disk %s
returned error - \"%s\".\n",
+            file_name, strerror(errno));
+        return 0;
+    }
+    if ( disk_type == PHYSTYPE_PHY ) {
+        if ( !(S_ISBLK(stat_buf.st_mode)) ) {
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s is not
a block device!\n",
+                file_name);
+            return 0;
+        }
+    } else if ( stat_buf.st_size == 0 ) {
+        LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "Virtual disk %s size is
0!\n", file_name);
+        return 0;
+    }
+
+    return 1;
+}
+
 int libxl_device_disk_add(libxl_ctx *ctx, uint32_t domid,
libxl_device_disk *disk)
 {
     libxl__gc gc = LIBXL_INIT_GC(ctx);
@@ -835,6 +870,9 @@ int libxl_device_disk_add(libxl_ctx *ctx
     int devid;
     libxl__device device;
     int major, minor, rc;
+
+    if ( validate_virtual_disk(ctx, disk->physpath, disk->phystype) == 0 )
+        return ERROR_FAIL;

     front = flexarray_make(16, 1);
     if (!front) {

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.