From nobody Mon Feb 9 21:12:05 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1538501157331953.6940689412385; Tue, 2 Oct 2018 10:25:57 -0700 (PDT) Received: from localhost ([::1]:44923 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g7OQm-00018D-2t for importer@patchew.org; Tue, 02 Oct 2018 13:25:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46987) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g7ONr-0006fa-K4 for qemu-devel@nongnu.org; Tue, 02 Oct 2018 13:22:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g7ONo-0006IT-T3 for qemu-devel@nongnu.org; Tue, 02 Oct 2018 13:22:55 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37479) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1g7ONo-0006I9-LJ for qemu-devel@nongnu.org; Tue, 02 Oct 2018 13:22:52 -0400 Received: by mail-wm1-x341.google.com with SMTP id 185-v6so2997808wmt.2 for ; Tue, 02 Oct 2018 10:22:52 -0700 (PDT) Received: from 640k.lan (94-36-187-248.adsl-ull.clienti.tiscali.it. [94.36.187.248]) by smtp.gmail.com with ESMTPSA id t2-v6sm16987812wre.96.2018.10.02.10.22.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Oct 2018 10:22:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Yb8eCNx4UvFFz36jFyGBLzI6VmubJoDLmQsSb4VQSoE=; b=EWnGHhOk/h/GRT7OgHxzGcAnEL737qqW0mCRv6gyyQYQSVNnJ7fnukf9PFsC+O2ktM gUYO3UNWbA3RhdjjHEpPKYfzh75n1JblblBRgtbZ9aNecZgKbgVYC/ad0JIf1pCLmMSz S70kkQgzlyYgZ7WMwvsrFUuUt1PId7GyKitacCdLq3dfwEiudggvozZXLzEtEpBYrEGE cc2BRRNAmJBl1k4gba+VYFFXhUx4MlYAppfj52wQz5/Q5qywKf1OfeW+jevHYZuynUK3 w1zZd3fTtcxmV0gwh4z5UVmMbWL7wus1L8pf8lnvwM1Q+MuTfu2uewh990lRt0Vw06MY F1Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Yb8eCNx4UvFFz36jFyGBLzI6VmubJoDLmQsSb4VQSoE=; b=C05qgbcO19Dpoo+H2rhRvW8TlT0HW0zTiV0tCN/7qyFYRBTIvCGtVmBUAu605yWYgT 727epQGRqXzeTF4WD+I4P/YFuzjVaM5vxoo6S5X74gX+MfmtL7qM6VmRBAE0LbTh6Dm7 lDfEs4FpO5ojXO0x/70NdlRQp4jSBkIW4IcoNv2mL0oPLIKoIO7ojCZfT0jp/z7NgO2E FIv9DAbzw/QlYprAVb+saZk+A16hTK2TVYEDR2eNIepZ6l0yBdb3z1O+nT4v7wtZ6QQA cKVQcu082s3cmquiFQuMYgUdUgRkpxfxiEv3/IoTUWGIOXUAmncb5Mx+IhNL+8+U5GsO 5sqQ== X-Gm-Message-State: ABuFfojZfDpVllxpqvccSclTQnS70zjQqZbun8rPAuzVHzsk4oLIUYW2 La1t2mlmchRd5hotZuLOXLa3Xjuv X-Google-Smtp-Source: ACcGV62sgL/SND7aZSxCWlKRRQS20rW37CUwTpLxwbdJMehIuvB8BkEjTR9jxYJi1/S563rdZTDPDw== X-Received: by 2002:a1c:8a55:: with SMTP id m82-v6mr2449908wmd.70.1538500971137; Tue, 02 Oct 2018 10:22:51 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 2 Oct 2018 19:22:45 +0200 Message-Id: <1538500966-5506-2-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1538500966-5506-1-git-send-email-pbonzini@redhat.com> References: <1538500966-5506-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::341 Subject: [Qemu-devel] [PULL 24/80] change get_image_size return type to int64_t X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Li Zhijian Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Li Zhijian Previously, if the size of initrd >=3D2G, qemu exits with error: root@haswell-OptiPlex-9020:/home/lizj# /home/lizhijian/lkp/qemu-colo/x86_64= -softmmu/qemu-system-x86_64 -kernel ./vmlinuz-4.16.0-rc4 -initrd large.cgz = -nographic qemu: error reading initrd large.cgz: No such file or directory root@haswell-OptiPlex-9020:/home/lizj# du -sh large.cgz 2.5G large.cgz this patch changes the caller side that use this function to calculate size of initrd file as well. v2: update error message and int64_t printing format Signed-off-by: Li Zhijian Message-Id: <1536833233-14121-1-git-send-email-lizhijian@cn.fujitsu.com> Signed-off-by: Paolo Bonzini --- hw/alpha/dp264.c | 3 ++- hw/core/loader.c | 5 +++-- hw/hppa/machine.c | 2 +- hw/i386/pc.c | 7 ++++++- hw/mips/mips_fulong2e.c | 6 +++--- hw/mips/mips_malta.c | 6 +++--- hw/mips/mips_mipssim.c | 3 +-- hw/mips/mips_r4k.c | 6 +++--- hw/moxie/moxiesim.c | 2 +- include/hw/loader.h | 2 +- 10 files changed, 24 insertions(+), 18 deletions(-) diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c index 80b987f..dd62f2a 100644 --- a/hw/alpha/dp264.c +++ b/hw/alpha/dp264.c @@ -150,7 +150,8 @@ static void clipper_init(MachineState *machine) } =20 if (initrd_filename) { - long initrd_base, initrd_size; + long initrd_base; + int64_t initrd_size; =20 initrd_size =3D get_image_size(initrd_filename); if (initrd_size < 0) { diff --git a/hw/core/loader.c b/hw/core/loader.c index 390987a..aa0b3fc 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -61,9 +61,10 @@ static int roms_loaded; =20 /* return the size or -1 if error */ -int get_image_size(const char *filename) +int64_t get_image_size(const char *filename) { - int fd, size; + int fd; + int64_t size; fd =3D open(filename, O_RDONLY | O_BINARY); if (fd < 0) return -1; diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index 0fb8fb8..ac6dd7f 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -191,7 +191,7 @@ static void machine_hppa_init(MachineState *machine) =20 if (initrd_filename) { ram_addr_t initrd_base; - long initrd_size; + int64_t initrd_size; =20 initrd_size =3D get_image_size(initrd_filename); if (initrd_size < 0) { diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 0314845..cd5029c 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -838,7 +838,8 @@ static void load_linux(PCMachineState *pcms, FWCfgState *fw_cfg) { uint16_t protocol; - int setup_size, kernel_size, initrd_size =3D 0, cmdline_size; + int setup_size, kernel_size, cmdline_size; + int64_t initrd_size =3D 0; int dtb_size, setup_data_offset; uint32_t initrd_max; uint8_t header[8192], *setup, *kernel, *initrd_data; @@ -974,6 +975,10 @@ static void load_linux(PCMachineState *pcms, fprintf(stderr, "qemu: error reading initrd %s: %s\n", initrd_filename, strerror(errno)); exit(1); + } else if (initrd_size >=3D initrd_max) { + fprintf(stderr, "qemu: initrd is too large, cannot support." + "(max: %"PRIu32", need %"PRId64")\n", initrd_max, init= rd_size); + exit(1); } =20 initrd_addr =3D (initrd_max-initrd_size) & ~4095; diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c index c1694c8..2fbba32 100644 --- a/hw/mips/mips_fulong2e.c +++ b/hw/mips/mips_fulong2e.c @@ -104,9 +104,9 @@ static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_= buf, int index, =20 static int64_t load_kernel (CPUMIPSState *env) { - int64_t kernel_entry, kernel_low, kernel_high; + int64_t kernel_entry, kernel_low, kernel_high, initrd_size; int index =3D 0; - long kernel_size, initrd_size; + long kernel_size; ram_addr_t initrd_offset; uint32_t *prom_buf; long prom_size; @@ -150,7 +150,7 @@ static int64_t load_kernel (CPUMIPSState *env) =20 prom_set(prom_buf, index++, "%s", loaderparams.kernel_filename); if (initrd_size > 0) { - prom_set(prom_buf, index++, "rd_start=3D0x%" PRIx64 " rd_size=3D%l= i %s", + prom_set(prom_buf, index++, "rd_start=3D0x%" PRIx64 " rd_size=3D%"= PRId64 " %s", cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size, loaderparams.kernel_cmdline); } else { diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index 40041d5..29b90ba 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -995,8 +995,8 @@ static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_= buf, int index, /* Kernel */ static int64_t load_kernel (void) { - int64_t kernel_entry, kernel_high; - long kernel_size, initrd_size; + int64_t kernel_entry, kernel_high, initrd_size; + long kernel_size; ram_addr_t initrd_offset; int big_endian; uint32_t *prom_buf; @@ -1070,7 +1070,7 @@ static int64_t load_kernel (void) =20 prom_set(prom_buf, prom_index++, "%s", loaderparams.kernel_filename); if (initrd_size > 0) { - prom_set(prom_buf, prom_index++, "rd_start=3D0x%" PRIx64 " rd_size= =3D%li %s", + prom_set(prom_buf, prom_index++, "rd_start=3D0x%" PRIx64 " rd_size= =3D%" PRId64 " %s", xlate_to_kseg0(NULL, initrd_offset), initrd_size, loaderparams.kernel_cmdline); } else { diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c index 241faa1..f665752 100644 --- a/hw/mips/mips_mipssim.c +++ b/hw/mips/mips_mipssim.c @@ -58,9 +58,8 @@ typedef struct ResetData { =20 static int64_t load_kernel(void) { - int64_t entry, kernel_high; + int64_t entry, kernel_high, initrd_size; long kernel_size; - long initrd_size; ram_addr_t initrd_offset; int big_endian; =20 diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c index d5725d0..3e852e9 100644 --- a/hw/mips/mips_r4k.c +++ b/hw/mips/mips_r4k.c @@ -81,8 +81,8 @@ typedef struct ResetData { static int64_t load_kernel(void) { const size_t params_size =3D 264; - int64_t entry, kernel_high; - long kernel_size, initrd_size; + int64_t entry, kernel_high, initrd_size; + long kernel_size; ram_addr_t initrd_offset; uint32_t *params_buf; int big_endian; @@ -136,7 +136,7 @@ static int64_t load_kernel(void) params_buf[1] =3D tswap32(0x12345678); =20 if (initrd_size > 0) { - snprintf((char *)params_buf + 8, 256, "rd_start=3D0x%" PRIx64 " rd= _size=3D%li %s", + snprintf((char *)params_buf + 8, 256, "rd_start=3D0x%" PRIx64 " rd= _size=3D%" PRId64 " %s", cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size, loaderparams.kernel_cmdline); } else { diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c index d41247d..4b0ce09 100644 --- a/hw/moxie/moxiesim.c +++ b/hw/moxie/moxiesim.c @@ -54,8 +54,8 @@ typedef struct { static void load_kernel(MoxieCPU *cpu, LoaderParams *loader_params) { uint64_t entry, kernel_low, kernel_high; + int64_t initrd_size; long kernel_size; - long initrd_size; ram_addr_t initrd_offset; =20 kernel_size =3D load_elf(loader_params->kernel_filename, NULL, NULL, diff --git a/include/hw/loader.h b/include/hw/loader.h index 3c11297..67a0af8 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -10,7 +10,7 @@ * Returns the size of the image file on success, -1 otherwise. * On error, errno is also set as appropriate. */ -int get_image_size(const char *filename); +int64_t get_image_size(const char *filename); int load_image(const char *filename, uint8_t *addr); /* deprecated */ ssize_t load_image_size(const char *filename, void *addr, size_t size); =20 --=20 1.8.3.1