diff mbox series

[PULL,32/52] cputlb: cast size_t to target_ulong before using for address masks

Message ID 20190607090552.12434-33-alex.bennee@linaro.org
State Accepted
Commit ab7a2009df66241a3742cbdfe8f9a1f66c6af21f
Headers show
Series testing, gdbstub and cputlb fixes | expand

Commit Message

Alex Bennée June 7, 2019, 9:05 a.m. UTC
While size_t is defined to happily access the biggest host object this
isn't the case when generating masks for 64 bit guests on 32 bit
hosts. Otherwise we end up truncating the address when we fall back to
our unaligned helper.

Fixes: https://bugs.launchpad.net/qemu/+bug/1831545

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

Tested-by: Andrew Randrianasulu <randrianasulu@gmail.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>


-- 
2.20.1
diff mbox series

Patch

diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
index b796ab1cbe..8f814a1a2c 100644
--- a/accel/tcg/cputlb.c
+++ b/accel/tcg/cputlb.c
@@ -1306,7 +1306,7 @@  load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
         uint64_t r1, r2;
         unsigned shift;
     do_unaligned_access:
-        addr1 = addr & ~(size - 1);
+        addr1 = addr & ~((target_ulong)size - 1);
         addr2 = addr1 + size;
         r1 = full_load(env, addr1, oi, retaddr);
         r2 = full_load(env, addr2, oi, retaddr);