From c5954819b6ee601024c081635be0336ce0cb1115 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Thu, 3 May 2012 19:32:15 +0100 Subject: user-exec.c: Don't assert on segfaults for non-valid addresses h2g() will assert if passed an address that's not a valid guest address, so handle_cpu_signal() needs to check before passing "data address which caused a segfault" to it, since for a misbehaving guest that could be anything. If the address isn't a valid guest address then we can simply skip the attempt to unprotect a guest page which was made read-only to catch self-modifying code. This assertion probably fires more readily now than it used to do because of recent changes to default to reserving guest address space. Acked-by: Alexander Graf Signed-off-by: Peter Maydell Signed-off-by: Anthony Liguori --- user-exec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'user-exec.c') diff --git a/user-exec.c b/user-exec.c index be6bc4f64c..d8c2ad9f2f 100644 --- a/user-exec.c +++ b/user-exec.c @@ -97,7 +97,8 @@ static inline int handle_cpu_signal(uintptr_t pc, unsigned long address, pc, address, is_write, *(unsigned long *)old_set); #endif /* XXX: locking issue */ - if (is_write && page_unprotect(h2g(address), pc, puc)) { + if (is_write && h2g_valid(address) + && page_unprotect(h2g(address), pc, puc)) { return 1; } -- cgit v1.2.3