Patchwork Check for invalid initrd file

login
register
mail settings
Submitter Mohan Kumar M
Date March 4, 2010, 9:02 a.m.
Message ID <201003041432.24973.mohan@in.ibm.com>
Download mbox | patch
Permalink /patch/46901/
State New
Headers show

Comments

Mohan Kumar M - March 4, 2010, 9:02 a.m.
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(-)
jvrao - March 4, 2010, 6:16 p.m.
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);

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);