diff mbox

Check for invalid initrd file

Message ID 201003041432.24973.mohan@in.ibm.com
State New
Headers show

Commit Message

Mohan Kumar M March 4, 2010, 9:02 a.m. UTC
From c5dca54f67ec6aac16c6c5e09958417b2b3ee5a1 Mon Sep 17 00:00:00 2001
From: M. Mohan Kumar <mohan@in.ibm.com>
Date: Thu, 4 Mar 2010 14:23:07 +0530
Subject: [PATCH] Check for invalid initrd file

When qemu is invoked with an invalid initrd file, it crashes. Following
patch prints a error message and exits if an invalid initrd is specified.

Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
---
 hw/pc.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

Comments

jvrao March 4, 2010, 6:16 p.m. UTC | #1
M. Mohan Kumar wrote:
> From c5dca54f67ec6aac16c6c5e09958417b2b3ee5a1 Mon Sep 17 00:00:00 2001
> From: M. Mohan Kumar <mohan@in.ibm.com>
> Date: Thu, 4 Mar 2010 14:23:07 +0530
> Subject: [PATCH] Check for invalid initrd file
> 
> When qemu is invoked with an invalid initrd file, it crashes. Following
> patch prints a error message and exits if an invalid initrd is specified.
> 
> Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com>
> ---
>  hw/pc.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/pc.c b/hw/pc.c
> index 4f6a522..551c901 100644
> --- a/hw/pc.c
> +++ b/hw/pc.c
> @@ -669,6 +669,12 @@ static void load_linux(void *fw_cfg,
>  	}
>  
>  	initrd_size = get_image_size(initrd_filename);
> +	if (initrd_size < 0) {
> +		fprintf(stderr, "qemu: initrd %s does not exist\n",
> +							initrd_filename);
> +		exit(1);

Looks good...but you may want to check the formatting. 

Also do we know for sure that the file not being there is the only reason for failure?
How about making the error statement more generic like.. "Error reading %S" 

Thanks,
JV

> +	}
> +
>          initrd_addr = (initrd_max-initrd_size) & ~4095;
>  
>          initrd_data = qemu_malloc(initrd_size);
diff mbox

Patch

diff --git a/hw/pc.c b/hw/pc.c
index 4f6a522..551c901 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -669,6 +669,12 @@  static void load_linux(void *fw_cfg,
 	}
 
 	initrd_size = get_image_size(initrd_filename);
+	if (initrd_size < 0) {
+		fprintf(stderr, "qemu: initrd %s does not exist\n",
+							initrd_filename);
+		exit(1);
+	}
+
         initrd_addr = (initrd_max-initrd_size) & ~4095;
 
         initrd_data = qemu_malloc(initrd_size);