[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



On Thu, 2011-01-13 at 15:35 +0000, Kamala Narasimhan wrote:
> This patch performs some very basic validation on the virtual disk
> file passed through the config file.  This validation ensures that we
> don't go too far with the initialization like spawn qemu and more
> while there could be some potentially fundamental issues.  Obviously,
> there is a lot of room for improvement in the kind of validations we
> could do but the below is a minimal first stab at it.  Please consider
> this for inclusion or feel free to tweak it as necessary.
> 
> Signed-off-by: Kamala Narasimhan <kamala.narasimhan@xxxxxxxxxx>

I wonder if the validation function should be part of libxl?

> Kamala
> 
> 
> diff -r ce208811f540 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c  Thu Jan 13 01:26:44 2011 +0000
> +++ b/tools/libxl/xl_cmdimpl.c  Thu Jan 13 10:16:57 2011 -0500
> @@ -432,6 +432,35 @@ static int parse_action_on_shutdown(cons
>  #define DSTATE_RW        5
>  #define DSTATE_TERMINAL  6
> 
> +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;
> +    }
> +
> +    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;
> +}
> +
>  static int parse_disk_config(libxl_device_disk *disk, char *buf2)
>  {
>      int state = DSTATE_INITIAL;
> @@ -485,6 +514,9 @@ static int parse_disk_config(libxl_devic
> 
>                  *p = '\0';
>                  disk->physpath = (*tok) ? strdup(tok) : NULL;
> +                if ( validate_virtual_disk(disk->physpath,
> disk->phystype) == 0 )
> +                    return 0;
> +
>                  tok = p + 1;
> 
>                  /* hack for ioemu disk spec */
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
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®.