qemu/system
Steve Sistare 4afd17ebcc physmem: fix qemu_ram_alloc_from_fd size calculation
qemu_ram_alloc_from_fd allocates space if file_size == 0.  If non-zero,
it uses the existing space and verifies it is large enough, but the
verification was broken when the offset parameter was introduced.  As
a result, a file smaller than offset passes the verification and causes
errors later.  Fix that, and update the error message to include offset.

Peter provides this concise reproducer:

  $ touch ramfile
  $ truncate -s 64M ramfile
  $ ./qemu-system-x86_64 -object memory-backend-file,mem-path=./ramfile,offset=128M,size=128M,id=mem1,prealloc=on
  qemu-system-x86_64: qemu_prealloc_mem: preallocating memory failed: Bad address

With the fix, the error message is:
  qemu-system-x86_64: mem1 backing store size 0x4000000 is too small for 'size' option 0x8000000 plus 'offset' option 0x8000000

Cc: qemu-stable@nongnu.org
Fixes: 4b870dc4d0 ("hostmem-file: add offset option")
Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/1736967650-129648-3-git-send-email-steven.sistare@oracle.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
(cherry picked from commit 719168fba7)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2025-02-01 11:56:57 +03:00
..
arch_init.c
async-teardown.c
balloon.c balloon: Fix a misleading error message 2023-11-17 10:07:52 +01:00
bootdevice.c
cpu-throttle.c
cpu-timers.c
cpus.c system/cpus: Fix CPUState.nr_cores' calculation 2023-11-07 13:08:48 +01:00
datadir.c
device_tree.c
dirtylimit.c system/dirtylimit: Drop the reduplicative check 2023-11-03 07:48:25 +01:00
dma-helpers.c
globals.c
ioport.c
main.c softmmu: pass the main loop status to gdb "Wxx" packet 2023-10-12 12:33:24 +10:00
memory.c system/memory: use ldn_he_p/stn_he_p 2023-12-04 16:21:00 +01:00
memory_mapping.c memory: follow Error API guidelines 2023-10-19 23:13:27 +02:00
meson.build
physmem.c physmem: fix qemu_ram_alloc_from_fd size calculation 2025-02-01 11:56:57 +03:00
qdev-monitor.c system/qdev-monitor: move drain_call_rcu call under if (!dev) in qmp_device_add() 2024-03-10 12:25:05 +03:00
qemu-seccomp.c
qtest.c system/qtest: Clean up global variable shadowing in qtest_server_init() 2023-10-27 09:39:08 +02:00
rtc.c
runstate-action.c
runstate-hmp-cmds.c
runstate.c softmmu: pass the main loop status to gdb "Wxx" packet 2023-10-12 12:33:24 +10:00
tpm-hmp-cmds.c
tpm.c * util/log: re-allow switching away from stderr log file 2023-10-09 10:11:18 -04:00
trace-events
trace.h
vl.c system/vl: Update description for input grab key 2024-02-22 18:46:06 +03:00
watchpoint.c accel/tcg: Remove CF_LAST_IO 2023-11-14 10:40:54 -08:00