qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 14/15] exec: do not clamp accesses to MMIO regions
Date: Fri, 19 Jun 2015 09:45:35 +0200	[thread overview]
Message-ID: <1434699936-4433-15-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1434699936-4433-1-git-send-email-pbonzini@redhat.com>

It is common for MMIO registers to overlap, for example a 4 byte register
at 0xcf8 (totally random choice... :)) and a 1 byte register at 0xcf9.
If these registers are implemented via separate MemoryRegions, it is
wrong to clamp the accesses as the value written would be truncated.

Hence for these regions the effects of commit 23820db (exec: Respect
as_translate_internal length clamp, 2015-03-16, previously applied as
commit c3c1bb99) must be skipped.

Tested-by: Hervé Poussineau <hpoussin@reactos.org>
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 exec.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/exec.c b/exec.c
index 76bfc4a..d00e017 100644
--- a/exec.c
+++ b/exec.c
@@ -341,6 +341,7 @@ address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *x
                                  hwaddr *plen, bool resolve_subpage)
 {
     MemoryRegionSection *section;
+    MemoryRegion *mr;
     Int128 diff;
 
     section = address_space_lookup_region(d, addr, resolve_subpage);
@@ -350,8 +351,11 @@ address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr, hwaddr *x
     /* Compute offset within MemoryRegion */
     *xlat = addr + section->offset_within_region;
 
-    diff = int128_sub(section->mr->size, int128_make64(addr));
-    *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
+    mr = section->mr;
+    if (memory_region_is_ram(mr)) {
+        diff = int128_sub(mr->size, int128_make64(addr));
+        *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
+    }
     return section;
 }
 
-- 
2.4.3

  parent reply	other threads:[~2015-06-19  7:46 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-19  7:45 [Qemu-devel] [PULL 00/15] Timer, virtio-scsi-test, build, memory changes for 2015-06-19 Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 01/15] qemu-log: Open file for logging when specified Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 02/15] qemu-ga: adding vss-[un]install options Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 03/15] qemu-ga: debug printouts to help troubleshoot installation Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 04/15] qemu-ga: Introduce Windows MSI script Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 05/15] qemu-ga: Building Windows MSI installation with configure/Makefile Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 06/15] i8254: fix out-of-bounds memory access in pit_ioport_read() Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 07/15] tests: Link libqos virtio object to virtio-scsi-test Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 08/15] libqos: Allow calling guest_free on NULL pointer Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 09/15] libqos: Complete virtio device ID definition list Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 10/15] tests: virtio-scsi: Move start/stop to individual test functions Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 11/15] tests: virtio-scsi: Add test for unaligned WRITE SAME Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 12/15] qemu-timer: Call clock reset notifiers on forward jumps Paolo Bonzini
2015-06-19  7:45 ` [Qemu-devel] [PULL 13/15] mc146818rtc: Reset the periodic timer on load Paolo Bonzini
2015-06-19  7:45 ` Paolo Bonzini [this message]
2015-06-19  7:45 ` [Qemu-devel] [PULL 15/15] exec: clamp accesses against the MemoryRegionSection Paolo Bonzini
2015-06-19 10:19 ` [Qemu-devel] [PULL 00/15] Timer, virtio-scsi-test, build, memory changes for 2015-06-19 Peter Maydell
2015-06-19 15:34   ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1434699936-4433-15-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).