From: Thayne Harbaugh <thayne@c2.net>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] RFC: x86_64 Best way to fix 'cast to pointer from integer of different size' problems?
Date: Mon, 12 Nov 2007 09:42:58 -0700 [thread overview]
Message-ID: <1194885778.20408.26.camel@phantasm.home.enterpriseandprosperity.com> (raw)
In-Reply-To: <47320F6E.5060505@bellard.org>
[-- Attachment #1: Type: text/plain, Size: 398 bytes --]
On Wed, 2007-11-07 at 20:18 +0100, Fabrice Bellard wrote:
> - Fix page_check_range() so that it handles writes to pages containing
> code by calling page_unprotect when necessary (the current code can fail
> in this case !).
>
> - Suppress no longer needed page_unprotect_range() call in syscall.c.
Something like this?
Looks like exec.c needs some attention regarding target_ulong/abi_ulong.
[-- Attachment #2: 06_efault.patch.1.4 --]
[-- Type: text/x-patch, Size: 1919 bytes --]
Index: qemu/linux-user/syscall.c
===================================================================
--- qemu.orig/linux-user/syscall.c 2007-11-12 09:56:01.000000000 -0700
+++ qemu/linux-user/syscall.c 2007-11-12 09:56:12.000000000 -0700
@@ -2745,7 +2745,6 @@
ret = 0; /* avoid warning */
break;
case TARGET_NR_read:
- page_unprotect_range(arg2, arg3);
if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
goto efault;
ret = get_errno(read(arg1, p, arg3));
@@ -4538,7 +4537,6 @@
break;
#ifdef TARGET_NR_pread
case TARGET_NR_pread:
- page_unprotect_range(arg2, arg3);
if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
goto efault;
ret = get_errno(pread(arg1, p, arg3, arg4));
Index: qemu/exec.c
===================================================================
--- qemu.orig/exec.c 2007-11-12 09:56:01.000000000 -0700
+++ qemu/exec.c 2007-11-12 10:00:41.000000000 -0700
@@ -1898,6 +1898,9 @@
return -1;
if (!(p->flags & PAGE_WRITE) && (flags & PAGE_WRITE) )
return -1;
+ if ((p->flags & PAGE_EXEC) && (flags & PAGE_WRITE)
+ && page_unprotect(addr, 0, NULL))
+ return -1;
}
return 0;
}
@@ -1942,21 +1945,6 @@
return 0;
}
-/* call this function when system calls directly modify a memory area */
-/* ??? This should be redundant now we have lock_user. */
-void page_unprotect_range(target_ulong data, target_ulong data_size)
-{
- target_ulong start, end, addr;
-
- start = data;
- end = start + data_size;
- start &= TARGET_PAGE_MASK;
- end = TARGET_PAGE_ALIGN(end);
- for(addr = start; addr < end; addr += TARGET_PAGE_SIZE) {
- page_unprotect(addr, 0, NULL);
- }
-}
-
static inline void tlb_set_dirty(CPUState *env,
unsigned long addr, target_ulong vaddr)
{
next prev parent reply other threads:[~2007-11-12 16:51 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-03 17:26 [Qemu-devel] RFC: x86_64 Best way to fix 'cast to pointer from integer of different size' problems? TJ
2007-11-03 17:52 ` Paul Brook
2007-11-05 19:51 ` Thayne Harbaugh
2007-11-06 1:05 ` Paul Brook
2007-11-06 2:00 ` Thayne Harbaugh
2007-11-07 19:18 ` Fabrice Bellard
2007-11-07 20:59 ` Thayne Harbaugh
2007-11-07 23:02 ` Paul Brook
2007-11-12 16:42 ` Thayne Harbaugh [this message]
2007-11-06 20:05 ` Fabrice Bellard
2007-11-06 21:52 ` Stuart Anderson
2007-11-06 22:05 ` Paul Brook
2007-11-06 22:19 ` Stuart Anderson
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=1194885778.20408.26.camel@phantasm.home.enterpriseandprosperity.com \
--to=thayne@c2.net \
--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).