[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 36/76] hw/core/loader.c: Read as long as possible in
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 36/76] hw/core/loader.c: Read as long as possible in load_image_size() |
Date: |
Tue, 5 Feb 2019 19:14:46 +0100 |
From: Li Zhijian <address@hidden>
Don't expect read(2) can always read as many as it's told.
CC: Richard Henderson <address@hidden>
CC: Stefano Garzarella <address@hidden>
Signed-off-by: Li Zhijian <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Reviewed-by: Stefano Garzarella <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/core/loader.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/hw/core/loader.c b/hw/core/loader.c
index 3a000d5..fe5cb24 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -77,21 +77,20 @@ int64_t get_image_size(const char *filename)
ssize_t load_image_size(const char *filename, void *addr, size_t size)
{
int fd;
- ssize_t actsize;
+ ssize_t actsize, l = 0;
fd = open(filename, O_RDONLY | O_BINARY);
if (fd < 0) {
return -1;
}
- actsize = read(fd, addr, size);
- if (actsize < 0) {
- close(fd);
- return -1;
+ while ((actsize = read(fd, addr + l, size - l)) > 0) {
+ l += actsize;
}
+
close(fd);
- return actsize;
+ return actsize < 0 ? -1 : l;
}
/* read()-like version */
--
1.8.3.1
- [Qemu-devel] [PULL 45/76] arm: disable CONFIG_SERIAL_ISA, (continued)
- [Qemu-devel] [PULL 45/76] arm: disable CONFIG_SERIAL_ISA, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 44/76] qemu-options: Remove deprecated "-virtioconsole" option, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 49/76] build: actually use CONFIG_PAM, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 34/76] ui: vnc: finish removing TABs, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 25/76] target-i386: hvf: remove MPX support, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 17/76] linuxboot_dma: move common functions in a new header, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 05/76] vhost-user-test: reduce usage of global_qtest, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 18/76] optionrom: add new PVH option rom, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 11/76] elf: Add optional function ptr to load_elf() to parse ELF notes, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 39/76] docker: adjust Xen repository for CentOS 7, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 36/76] hw/core/loader.c: Read as long as possible in load_image_size(),
Paolo Bonzini <=
- [Qemu-devel] [PULL 40/76] i386: hvf: Don't miss 16-bit displacement, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 43/76] Remove deprecated -enable-hax option, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 35/76] unify len and addr type for memory/address APIs, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 46/76] ide: split ioport registration to a separate file, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 50/76] hw/i386/Makefile.objs: Build pc_piix* and pc_q35 boards, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 48/76] hw/pci-host/Makefile.objs: make CONFIGS clear for PCI EXPRESS, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 51/76] hw/arm/Makefile.objs: CONFIG_ARM_VIRT created for virt board, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 54/76] hw/mips/Makefile.objs: Create CONFIG_* for r4k, malta, mipssim boards, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 53/76] hw/microblaze/Makefile.objs: Create configs for petalogix and xilinx boards, Paolo Bonzini, 2019/02/05
- [Qemu-devel] [PULL 55/76] hw/ppc/Makefile.objs: Build all boards conditinally with CONFIG_*, Paolo Bonzini, 2019/02/05