From b8aecea23aaccf39da54c77ef248f5fa50dcfbc1 Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Fri, 6 Nov 2015 16:02:45 +0800 Subject: memory: don't try to adjust endianness for zero length eventfd There's no need to adjust endianness for zero length eventfd since the data wrote was actually ignored by kernel. So skip the adjust in this case to fix a possible crash when trying to use wildcard mmio eventfd in ppc. Cc: Greg Kurz Cc: Peter Maydell Cc: Paolo Bonzini Acked-by: Greg Kurz Signed-off-by: Jason Wang Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- memory.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'memory.c') diff --git a/memory.c b/memory.c index c435c8827a..e193658fc7 100644 --- a/memory.c +++ b/memory.c @@ -1688,7 +1688,9 @@ void memory_region_add_eventfd(MemoryRegion *mr, }; unsigned i; - adjust_endianness(mr, &mrfd.data, size); + if (size) { + adjust_endianness(mr, &mrfd.data, size); + } memory_region_transaction_begin(); for (i = 0; i < mr->ioeventfd_nb; ++i) { if (memory_region_ioeventfd_before(mrfd, mr->ioeventfds[i])) { @@ -1721,7 +1723,9 @@ void memory_region_del_eventfd(MemoryRegion *mr, }; unsigned i; - adjust_endianness(mr, &mrfd.data, size); + if (size) { + adjust_endianness(mr, &mrfd.data, size); + } memory_region_transaction_begin(); for (i = 0; i < mr->ioeventfd_nb; ++i) { if (memory_region_ioeventfd_equal(mrfd, mr->ioeventfds[i])) { -- cgit v1.2.1