mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-07-22 02:44:53 +00:00
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>
This commit is contained in:
parent
e92666b0ba
commit
9e6b9f3791
|
@ -2069,6 +2069,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
|
||||||
ram_addr_t offset;
|
ram_addr_t offset;
|
||||||
int flags;
|
int flags;
|
||||||
void *area, *vaddr;
|
void *area, *vaddr;
|
||||||
|
int prot;
|
||||||
|
|
||||||
RAMBLOCK_FOREACH(block) {
|
RAMBLOCK_FOREACH(block) {
|
||||||
offset = addr - block->offset;
|
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 ?
|
flags |= block->flags & RAM_SHARED ?
|
||||||
MAP_SHARED : MAP_PRIVATE;
|
MAP_SHARED : MAP_PRIVATE;
|
||||||
flags |= block->flags & RAM_NORESERVE ? MAP_NORESERVE : 0;
|
flags |= block->flags & RAM_NORESERVE ? MAP_NORESERVE : 0;
|
||||||
|
prot = PROT_READ;
|
||||||
|
prot |= block->flags & RAM_READONLY ? 0 : PROT_WRITE;
|
||||||
if (block->fd >= 0) {
|
if (block->fd >= 0) {
|
||||||
area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
|
area = mmap(vaddr, length, prot, flags, block->fd,
|
||||||
flags, block->fd, offset + block->fd_offset);
|
offset + block->fd_offset);
|
||||||
} else {
|
} else {
|
||||||
flags |= MAP_ANONYMOUS;
|
flags |= MAP_ANONYMOUS;
|
||||||
area = mmap(vaddr, length, PROT_READ | PROT_WRITE,
|
area = mmap(vaddr, length, prot, flags, -1, 0);
|
||||||
flags, -1, 0);
|
|
||||||
}
|
}
|
||||||
if (area != vaddr) {
|
if (area != vaddr) {
|
||||||
error_report("Could not remap addr: "
|
error_report("Could not remap addr: "
|
||||||
|
|
Loading…
Reference in a new issue