From patchwork Fri Jun 14 11:27:36 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 17925 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-yh0-f69.google.com (mail-yh0-f69.google.com [209.85.213.69]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 20A1725DF7 for ; Fri, 14 Jun 2013 11:27:41 +0000 (UTC) Received: by mail-yh0-f69.google.com with SMTP id b12sf479476yha.0 for ; Fri, 14 Jun 2013 04:27:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:x-beenthere:x-forwarded-to:x-forwarded-for :delivered-to:from:to:cc:subject:date:message-id:x-mailer :x-gm-message-state:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-google-group-id:list-post:list-help:list-archive:list-unsubscribe; bh=DXnRd/o/RRhcWg8jUIhP2iFV3S3EPjSxr/Yfj7bg6IY=; b=Pahq+oExfCT84aPPX8go0IIaLTPwXwYmk6YiTMa6NzRqISyfTr8UXrh6yzhNOrBEco e4ZcE5J6+RItogHr/Vv7KVgX/jmPMUk6mO2K/9b/6KKvoU1FWEa9qv9+f09QgzJpi1pG G7hd7NlZsDNZ9m/ZR7DpFrbELp3hQiryF/eyUtTImLVHdlQk55P4irEzqtClIb/B1NEM DmnD5iAAmfhxlJIJnqXpVzfmMcGI3kEUAHCiccukVETiQmNN8EJSSJj31PmsDae/pCGy IDLCSwvZK4PSaKykIFD23urZCxRzMve7KhrP14Zdx2Xqzj/5V8hA0nB+pHIWIgmBsYn9 0RAA== X-Received: by 10.224.205.138 with SMTP id fq10mr976533qab.1.1371209260647; Fri, 14 Jun 2013 04:27:40 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.97.103 with SMTP id dz7ls148725qeb.96.gmail; Fri, 14 Jun 2013 04:27:40 -0700 (PDT) X-Received: by 10.52.112.5 with SMTP id im5mr651138vdb.4.1371209260433; Fri, 14 Jun 2013 04:27:40 -0700 (PDT) Received: from mail-vb0-x22a.google.com (mail-vb0-x22a.google.com [2607:f8b0:400c:c02::22a]) by mx.google.com with ESMTPS id d4si750044vcl.66.2013.06.14.04.27.40 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 14 Jun 2013 04:27:40 -0700 (PDT) Received-SPF: neutral (google.com: 2607:f8b0:400c:c02::22a is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=2607:f8b0:400c:c02::22a; Received: by mail-vb0-f42.google.com with SMTP id i3so338012vbh.15 for ; Fri, 14 Jun 2013 04:27:40 -0700 (PDT) X-Received: by 10.58.22.74 with SMTP id b10mr758409vef.47.1371209259998; Fri, 14 Jun 2013 04:27:39 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.58.191.99 with SMTP id gx3csp58581vec; Fri, 14 Jun 2013 04:27:39 -0700 (PDT) X-Received: by 10.14.205.72 with SMTP id i48mr2529540eeo.109.1371209258643; Fri, 14 Jun 2013 04:27:38 -0700 (PDT) Received: from mnementh.archaic.org.uk (1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.d.1.0.0.b.8.0.1.0.0.2.ip6.arpa. [2001:8b0:1d0::1]) by mx.google.com with ESMTPS id s8si1473986ees.328.2013.06.14.04.27.37 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 14 Jun 2013 04:27:38 -0700 (PDT) Received-SPF: neutral (google.com: 2001:8b0:1d0::1 is neither permitted nor denied by best guess record for domain of pm215@archaic.org.uk) client-ip=2001:8b0:1d0::1; Received: from pm215 by mnementh.archaic.org.uk with local (Exim 4.80) (envelope-from ) id 1UnSAK-0002yT-CH; Fri, 14 Jun 2013 12:27:36 +0100 From: Peter Maydell To: qemu-devel@nongnu.org Cc: patches@linaro.org Subject: [PATCH] arm/boot: Free dtb blob memory after use Date: Fri, 14 Jun 2013 12:27:36 +0100 Message-Id: <1371209256-11408-1-git-send-email-peter.maydell@linaro.org> X-Mailer: git-send-email 1.7.10.4 X-Gm-Message-State: ALoCoQkPhMs52VaVjrjupNc+f7aZxbP+4GAp/V4D87whU4DM/5rscYMo4ZvDf1LIDmHgmByEPnaF X-Original-Sender: peter.maydell@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 2607:f8b0:400c:c02::22a is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Precedence: list Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , The dtb blob returned by load_device_tree() is in memory allocated with g_malloc(). Free it accordingly once we have copied its contents into the guest memory. To make this easy, we need also to clean up the error handling in load_dtb() so that we consistently handle errors in the same way (by printing a message and then returning -1, rather than either plowing on or exiting immediately). Signed-off-by: Peter Maydell Reviewed-by: Andreas Färber --- hw/arm/boot.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/hw/arm/boot.c b/hw/arm/boot.c index f8c2031..f5870f6 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -238,14 +238,14 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, binfo->dtb_filename); if (!filename) { fprintf(stderr, "Couldn't open dtb file %s\n", binfo->dtb_filename); - return -1; + goto fail; } fdt = load_device_tree(filename, &size); if (!fdt) { fprintf(stderr, "Couldn't open dtb file %s\n", filename); g_free(filename); - return -1; + goto fail; } g_free(filename); @@ -253,7 +253,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) scells = qemu_devtree_getprop_cell(fdt, "/", "#size-cells"); if (acells == 0 || scells == 0) { fprintf(stderr, "dtb file invalid (#address-cells or #size-cells 0)\n"); - return -1; + goto fail; } mem_reg_propsize = acells + scells; @@ -265,7 +265,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) } else if (hival != 0) { fprintf(stderr, "qemu: dtb file not compatible with " "RAM start address > 4GB\n"); - exit(1); + goto fail; } mem_reg_property[acells + scells - 1] = cpu_to_be32(binfo->ram_size); hival = cpu_to_be32(binfo->ram_size >> 32); @@ -274,13 +274,14 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) } else if (hival != 0) { fprintf(stderr, "qemu: dtb file not compatible with " "RAM size > 4GB\n"); - exit(1); + goto fail; } rc = qemu_devtree_setprop(fdt, "/memory", "reg", mem_reg_property, mem_reg_propsize * sizeof(uint32_t)); if (rc < 0) { fprintf(stderr, "couldn't set /memory/reg\n"); + goto fail; } if (binfo->kernel_cmdline && *binfo->kernel_cmdline) { @@ -288,6 +289,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) binfo->kernel_cmdline); if (rc < 0) { fprintf(stderr, "couldn't set /chosen/bootargs\n"); + goto fail; } } @@ -296,20 +298,28 @@ static int load_dtb(hwaddr addr, const struct arm_boot_info *binfo) binfo->initrd_start); if (rc < 0) { fprintf(stderr, "couldn't set /chosen/linux,initrd-start\n"); + goto fail; } rc = qemu_devtree_setprop_cell(fdt, "/chosen", "linux,initrd-end", binfo->initrd_start + binfo->initrd_size); if (rc < 0) { fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); + goto fail; } } qemu_devtree_dumpdtb(fdt, size); cpu_physical_memory_write(addr, fdt, size); + g_free(fdt); + return 0; +fail: + g_free(fdt); + return -1; + #else fprintf(stderr, "Device tree requested, " "but qemu was compiled without fdt support\n");