[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] translate-all.c: Remove writable protection feature
From: |
chengang |
Subject: |
[Qemu-devel] [PATCH] translate-all.c: Remove writable protection feature for tb_alloc_page() |
Date: |
Thu, 14 Jan 2016 14:03:42 +0800 |
From: Chen Gang <address@hidden>
Guest may allocate a readable, writable, and executable page, then write
data on the page, and execute data as code on the page too, then write
anther data still within the page.
So remove this feature from linux-user: it not only consumes a little
performance, but also causes issue with the old Linux kernel under some
of architectures (they will directly generate segment fault for it).
Signed-off-by: Chen Gang <address@hidden>
---
translate-all.c | 29 +----------------------------
1 file changed, 1 insertion(+), 28 deletions(-)
diff --git a/translate-all.c b/translate-all.c
index 042a857..1b6e95d 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1430,34 +1430,7 @@ static inline void tb_alloc_page(TranslationBlock *tb,
p->first_tb = (TranslationBlock *)((uintptr_t)tb | n);
invalidate_page_bitmap(p);
-#if defined(CONFIG_USER_ONLY)
- if (p->flags & PAGE_WRITE) {
- target_ulong addr;
- PageDesc *p2;
- int prot;
-
- /* force the host page as non writable (writes will have a
- page fault + mprotect overhead) */
- page_addr &= qemu_host_page_mask;
- prot = 0;
- for (addr = page_addr; addr < page_addr + qemu_host_page_size;
- addr += TARGET_PAGE_SIZE) {
-
- p2 = page_find(addr >> TARGET_PAGE_BITS);
- if (!p2) {
- continue;
- }
- prot |= p2->flags;
- p2->flags &= ~PAGE_WRITE;
- }
- mprotect(g2h(page_addr), qemu_host_page_size,
- (prot & PAGE_BITS) & ~PAGE_WRITE);
-#ifdef DEBUG_TB_INVALIDATE
- printf("protecting code page: 0x" TARGET_FMT_lx "\n",
- page_addr);
-#endif
- }
-#else
+#if !defined(CONFIG_USER_ONLY)
/* if some code is already present, then the pages are already
protected. So we handle the case where only the first TB is
allocated in a physical page */
--
1.9.1
- [Qemu-devel] [PATCH] translate-all.c: Remove writable protection feature for tb_alloc_page(),
chengang <=