summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorRoman Kapl <rka@sysgo.com>2017-01-09 12:09:21 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2017-01-16 17:52:35 +0100
commit5ad4a2b75f85dd854a781a6e03b90320cb3441d3 (patch)
treea0737f33526c34d8a355282a4deed45fdfa67ac3 /exec.c
parent0f254b1ae04b36e2ab2d91528297ed60d40c8c08 (diff)
downloadqemu-5ad4a2b75f85dd854a781a6e03b90320cb3441d3.tar.gz
exec: Add missing rcu_read_unlock
rcu_read_unlock was not called if the address_space_access_valid result is negative. This caused (at least) a problem when qemu on PPC/E500+TAP failed to terminate properly and instead got stuck in a deadlock. Signed-off-by: Roman Kapl <rka@sysgo.com> Message-Id: <20170109110921.4931-1-rka@sysgo.com> Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/exec.c b/exec.c
index 47835c1dc1..c95ae3344d 100644
--- a/exec.c
+++ b/exec.c
@@ -2960,6 +2960,7 @@ bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len, bool is_
if (!memory_access_is_direct(mr, is_write)) {
l = memory_access_size(mr, l, addr);
if (!memory_region_access_valid(mr, xlat, l, is_write)) {
+ rcu_read_unlock();
return false;
}
}