diff options
author | David Hildenbrand <david@redhat.com> | 2023-09-06 14:04:56 +0200 |
---|---|---|
committer | David Hildenbrand <david@redhat.com> | 2023-09-19 10:23:21 +0200 |
commit | 9e6b9f379130c77a08c8ea67a09fc90cb30f8d09 (patch) | |
tree | 05804528e82e9e0a130d382132506997cfa8bbe4 /softmmu | |
parent | e92666b0ba4cbaa71a5dd98c31414926a9915487 (diff) | |
download | qemu-9e6b9f379130c77a08c8ea67a09fc90cb30f8d09.zip qemu-9e6b9f379130c77a08c8ea67a09fc90cb30f8d09.tar.gz qemu-9e6b9f379130c77a08c8ea67a09fc90cb30f8d09.tar.bz2 |
softmmu/physmem: Remap with proper protection in qemu_ram_remap()
Let's remap with the proper protection that we can derive from
RAM_READONLY.
Message-ID: <20230906120503.359863-5-david@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Diffstat (limited to 'softmmu')
-rw-r--r-- | softmmu/physmem.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 7e03ed7..88482bd 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2069,6 +2069,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) ram_addr_t offset; int flags; void *area, *vaddr; + int prot; RAMBLOCK_FOREACH(block) { offset = addr - block->offset; @@ -2083,13 +2084,14 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) flags |= block->flags & RAM_SHARED ? MAP_SHARED : MAP_PRIVATE; flags |= block->flags & RAM_NORESERVE ? MAP_NORESERVE : 0; + prot = PROT_READ; + prot |= block->flags & RAM_READONLY ? 0 : PROT_WRITE; if (block->fd >= 0) { - area = mmap(vaddr, length, PROT_READ | PROT_WRITE, - flags, block->fd, offset + block->fd_offset); + area = mmap(vaddr, length, prot, flags, block->fd, + offset + block->fd_offset); } else { flags |= MAP_ANONYMOUS; - area = mmap(vaddr, length, PROT_READ | PROT_WRITE, - flags, -1, 0); + area = mmap(vaddr, length, prot, flags, -1, 0); } if (area != vaddr) { error_report("Could not remap addr: " |