diff options
author | Philippe Mathieu-Daudé <philmd@redhat.com> | 2020-10-05 17:27:25 +0200 |
---|---|---|
committer | Laurent Vivier <laurent@vivier.eu> | 2020-10-13 13:33:45 +0200 |
commit | 21786c7e59847b1612406ff394958f22e5b323f8 (patch) | |
tree | ebae503e9f0845752ffabe292566905f2c25db8d /softmmu | |
parent | 5ad1037cad3572e382043a2a525b7967ddc9357f (diff) |
softmmu/memory: Log invalid memory accesses
Log invalid memory accesses with as GUEST_ERROR.
This is particularly useful since commit 5d971f9e67 which reverted
("memory: accept mismatching sizes in memory_region_access_valid").
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20201005152725.2143444-1-philmd@redhat.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'softmmu')
-rw-r--r-- | softmmu/memory.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/softmmu/memory.c b/softmmu/memory.c index fa280a19f7..403ff3abc9 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -14,6 +14,7 @@ */ #include "qemu/osdep.h" +#include "qemu/log.h" #include "qapi/error.h" #include "cpu.h" #include "exec/memory.h" @@ -1353,10 +1354,18 @@ bool memory_region_access_valid(MemoryRegion *mr, { if (mr->ops->valid.accepts && !mr->ops->valid.accepts(mr->opaque, addr, size, is_write, attrs)) { + qemu_log_mask(LOG_GUEST_ERROR, "Invalid access at addr " + "0x%" HWADDR_PRIX ", size %u, " + "region '%s', reason: rejected\n", + addr, size, memory_region_name(mr)); return false; } if (!mr->ops->valid.unaligned && (addr & (size - 1))) { + qemu_log_mask(LOG_GUEST_ERROR, "Invalid access at addr " + "0x%" HWADDR_PRIX ", size %u, " + "region '%s', reason: unaligned\n", + addr, size, memory_region_name(mr)); return false; } @@ -1367,6 +1376,13 @@ bool memory_region_access_valid(MemoryRegion *mr, if (size > mr->ops->valid.max_access_size || size < mr->ops->valid.min_access_size) { + qemu_log_mask(LOG_GUEST_ERROR, "Invalid access at addr " + "0x%" HWADDR_PRIX ", size %u, " + "region '%s', reason: invalid size " + "(min:%u max:%u)\n", + addr, size, memory_region_name(mr), + mr->ops->valid.min_access_size, + mr->ops->valid.max_access_size); return false; } return true; |