[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/10] linux-user: init_guest_space: Correctly handl
From: |
Luke Shumaker |
Subject: |
[Qemu-devel] [PATCH 04/10] linux-user: init_guest_space: Correctly handle guest_start in commpage initialization |
Date: |
Thu, 28 Dec 2017 13:08:07 -0500 |
From: Luke Shumaker <address@hidden>
init_guest_commpage needs to check if the mapped space, which ends at
real_start+real_size overlaps with where it needs to put the commpage,
which is (assuming sane qemu_host_page_size) guest_base + 0xffff000, where
guest_base is real_start - guest_start.
[guest_base][ 0xffff0000 ][commpage]
[guest_base][guest_start][real_size] [commpage]
[ real_start ][real_size] [commpage]
^
fail if this gap < 0
Since init_guest_commpage wants to do everything relative to guest_base
(rather than real_start), it obviously needs to be comparing 0xffff0000
against guest_start+real_size, not just real_size.
This bug has been present since 806d102141b99d4f1e55a97d68b7ea8c8ba3129f in
2012, but guest_start is usually 0, and prior to v2.11 real_size was
usually much smaller than 0xffff0000, so it was uncommon for it to have
made a difference.
Signed-off-by: Luke Shumaker <address@hidden>
---
linux-user/elfload.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 1a6b660b25..f41cecc3cb 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1882,7 +1882,7 @@ unsigned long init_guest_space(unsigned long host_start,
#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
/* On 32-bit ARM, we need to also be able to map the commpage. */
int valid = init_guest_commpage(real_start - guest_start,
- real_size);
+ real_size + guest_start);
if (valid == 1) {
break;
} else if (valid == -1) {
--
2.15.1
- [Qemu-devel] [PATCH 00/10] linux-user: Speed up guest space initialization on 32-bit ARM target, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 02/10] linux-user: Rename validate_guest_space => init_guest_commpage, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 06/10] linux-user: init_guest_commpage: Add a comment about size check, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 05/10] linux-user: init_guest_space: Clarify page alignment logic, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 04/10] linux-user: init_guest_space: Correctly handle guest_start in commpage initialization,
Luke Shumaker <=
- [Qemu-devel] [PATCH 03/10] linux-user: init_guest_space: Clean up if we can't initialize the commpage, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 08/10] linux-user: init_guest_space: Don't try to align if we'll reject it, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 10/10] linux-user: init_guest_space: Try to make ARM space+commpage continuous, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 01/10] linux-user: Use #if to only call validate_guest_space for 32-bit ARM target, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 07/10] linux-user: init_guest_space: Clean up control flow a bit, Luke Shumaker, 2017/12/28
- [Qemu-devel] [PATCH 09/10] linux-user: init_guest_space: Add a comment about search strategy, Luke Shumaker, 2017/12/28