> I will make necessary changes and resend the patch.
>
Here is a modified patch for further review and to apply if ok.
Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>
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 12:41:11 2011 -0500
@@ -826,6 +826,41 @@ skip_autopass:
/******************************************************************************/
+static int validate_virtual_disk(char *file_name, libxl_disk_phystype
disk_type)
+{
+ struct stat stat_buf;
+
+ if ( file_name == NULL ) {
+ fprintf(stderr, "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 ) {
+ fprintf(stderr, "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)) ) {
+ fprintf(stderr, "Virtual disk %s is not a block device!\n",
+ file_name);
+ return 0;
+ }
+ }else if ( stat_buf.st_size == 0 ) {
+ fprintf(stderr, "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(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
|