qemu-e2k/softmmu
David Hildenbrand ca01f1b89b softmmu/physmem: Never return directories from file_ram_open()
open() does not fail on directories when opening them readonly (O_RDONLY).

Currently, we succeed opening such directories and fail later during
mmap(), resulting in a misleading error message.

$ ./qemu-system-x86_64 \
    -object memory-backend-file,id=ram0,mem-path=tmp,readonly=true,size=1g
 qemu-system-x86_64: unable to map backing store for guest RAM: No such device

To identify directories and handle them accordingly in file_ram_open()
also when readonly=true was specified, detect if we just opened a directory
using fstat() instead. Then, fail file_ram_open() right away, similarly
to how we now fail if the file does not exist and we want to open the
file readonly.

With this change, we get a nicer error message:
 qemu-system-x86_64: can't open backing store tmp for guest RAM: Is a directory

Note that the only memory-backend-file will end up calling
memory_region_init_ram_from_file() -> qemu_ram_alloc_from_file() ->
file_ram_open().

Message-ID: <20230906120503.359863-8-david@redhat.com>
Reported-by: Thiner Logoer <logoerthiner1@163.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Tested-by: Mario Casquero <mcasquer@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
2023-09-19 10:23:21 +02:00
..
arch_init.c
async-teardown.c util/async-teardown.c: move to softmmu/, only build it when system build is requested 2023-09-01 23:46:20 +02:00
balloon.c
bootdevice.c
cpu-throttle.c
cpu-timers.c
cpus.c accel: Remove HAX accelerator 2023-08-31 19:46:43 +02:00
datadir.c
device_tree.c
dirtylimit.c softmmu/dirtylimit: Convert free to g_free 2023-08-29 10:19:03 +08:00
dma-helpers.c dma-helpers: prevent dma_blk_cb() vs dma_aio_cancel() race 2023-02-23 19:49:35 +01:00
globals.c accel/tcg: Use one_insn_per_tb global instead of old singlestep global 2023-05-02 15:47:40 +01:00
icount.c accel/tcg: spelling fixes 2023-08-31 19:47:43 +02:00
ioport.c accel/tcg: spelling fixes 2023-08-31 19:47:43 +02:00
main.c
memory_mapping.c bulk: Rename TARGET_FMT_plx -> HWADDR_FMT_plx 2023-01-18 11:14:34 +01:00
memory.c softmmu/physmem: Distinguish between file access mode and mmap protection 2023-09-19 10:23:21 +02:00
meson.build util/async-teardown.c: move to softmmu/, only build it when system build is requested 2023-09-01 23:46:20 +02:00
physmem.c softmmu/physmem: Never return directories from file_ram_open() 2023-09-19 10:23:21 +02:00
qdev-monitor.c bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
qemu-seccomp.c
qtest.c qtest: irq_intercept_[out/in]: return FAIL if no intercepts are installed 2023-08-22 17:31:01 +01:00
rtc.c rtc: Use time_t for passing and returning time offsets 2023-08-31 09:45:18 +01:00
runstate-action.c
runstate-hmp-cmds.c hmp: Add 'one-insn-per-tb' command equivalent to 'singlestep' 2023-05-02 15:47:40 +01:00
runstate.c sysemu: Add prepare callback to struct VMChangeStateEntry 2023-09-11 08:34:05 +02:00
timers-state.h
tpm-hmp-cmds.c tpm: Move HMP commands from monitor/ to softmmu/ 2023-02-04 07:56:54 +01:00
tpm.c
trace-events
trace.h
vl.c * only build util/async-teardown.c when system build is requested 2023-09-07 10:29:06 -04:00
watchpoint.c softmmu: Restore use of CPU watchpoint for all accelerators 2023-03-28 15:24:06 -07:00