From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:40378) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QRk81-0005Ad-Ex for qemu-devel@nongnu.org; Wed, 01 Jun 2011 08:02:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QRk7z-0006Jv-Mo for qemu-devel@nongnu.org; Wed, 01 Jun 2011 08:02:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10213) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QRk7z-0006Jl-95 for qemu-devel@nongnu.org; Wed, 01 Jun 2011 08:02:23 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p51C2MQx015826 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 1 Jun 2011 08:02:22 -0400 From: Kevin Wolf Date: Wed, 1 Jun 2011 14:05:12 +0200 Message-Id: <1306929912-15484-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH] bdrv_img_create: Fix segfault List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com Block drivers that don't support creating images don't have a size option. Fail gracefully instead of segfaulting when trying to access the option's value. Signed-off-by: Kevin Wolf --- block.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/block.c b/block.c index ebd1501..8df2a5f 100644 --- a/block.c +++ b/block.c @@ -2900,7 +2900,7 @@ int bdrv_img_create(const char *filename, const char *fmt, char *options, uint64_t img_size, int flags) { QEMUOptionParameter *param = NULL, *create_options = NULL; - QEMUOptionParameter *backing_fmt, *backing_file; + QEMUOptionParameter *backing_fmt, *backing_file, *size; BlockDriverState *bs = NULL; BlockDriver *drv, *proto_drv; BlockDriver *backing_drv = NULL; @@ -2983,7 +2983,8 @@ int bdrv_img_create(const char *filename, const char *fmt, // The size for the image must always be specified, with one exception: // If we are using a backing file, we can obtain the size from there - if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) { + size = get_option_parameter(param, BLOCK_OPT_SIZE); + if (size && size->value.n == -1) { if (backing_file && backing_file->value.s) { uint64_t size; char buf[32]; -- 1.7.5.2