From f46e9a0b9911fcfbc13f85f3a8808067990a0f5c Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 29 May 2014 09:12:23 -0500 Subject: target-ppc: Confirm That .bss Pages Are Valid The existing code does a check to ensure that a .bss region is properly mmap'd. When additional mmap is required, the (guest) pages are also validated. However, this code has a bug: when host page size is larger than target page size, it is possible for the .bss pages to already be (host) mapped but the guest .bss pages may not be valid. The check to mmap additional space is separated from the flagging of the target (guest) pages, thus ensuring that both aspects are done properly. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- linux-user/elfload.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'linux-user/elfload.c') diff --git a/linux-user/elfload.c b/linux-user/elfload.c index d08fc80..eb8d3ad 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1425,10 +1425,11 @@ static void zero_bss(abi_ulong elf_bss, abi_ulong last_bss, int prot) perror("cannot mmap brk"); exit(-1); } + } - /* Since we didn't use target_mmap, make sure to record - the validity of the pages with qemu. */ - page_set_flags(elf_bss & TARGET_PAGE_MASK, last_bss, prot|PAGE_VALID); + /* Ensure that the bss page(s) are valid */ + if ((page_get_flags(last_bss-1) & prot) != prot) { + page_set_flags(elf_bss & TARGET_PAGE_MASK, last_bss, prot | PAGE_VALID); } if (host_start < host_map_start) { -- cgit v1.1