qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PULL 03/20] linux-user/x86_64: Allocate vsyscall page as a commpage
Date: Thu,  1 Sep 2022 07:51:51 +0100	[thread overview]
Message-ID: <20220901065210.117081-6-richard.henderson@linaro.org> (raw)
In-Reply-To: <20220901065210.117081-1-richard.henderson@linaro.org>

We're about to start validating PAGE_EXEC, which means that we've
got to mark the vsyscall page executable.  We had been special
casing this entirely within translate.

Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/elfload.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 29d910c4cc..b20d513929 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -195,6 +195,27 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUX86State *en
     (*regs)[26] = tswapreg(env->segs[R_GS].selector & 0xffff);
 }
 
+#if ULONG_MAX >= TARGET_VSYSCALL_PAGE
+#define INIT_GUEST_COMMPAGE
+static bool init_guest_commpage(void)
+{
+    /*
+     * The vsyscall page is at a high negative address aka kernel space,
+     * which means that we cannot actually allocate it with target_mmap.
+     * We still should be able to use page_set_flags, unless the user
+     * has specified -R reserved_va, which would trigger an assert().
+     */
+    if (reserved_va != 0 &&
+        TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE >= reserved_va) {
+        error_report("Cannot allocate vsyscall page");
+        exit(EXIT_FAILURE);
+    }
+    page_set_flags(TARGET_VSYSCALL_PAGE,
+                   TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE,
+                   PAGE_EXEC | PAGE_VALID);
+    return true;
+}
+#endif
 #else
 
 #define ELF_START_MMAP 0x80000000
@@ -2360,8 +2381,10 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc, int envc,
 #else
 #define HI_COMMPAGE 0
 #define LO_COMMPAGE -1
+#ifndef INIT_GUEST_COMMPAGE
 #define init_guest_commpage() true
 #endif
+#endif
 
 static void pgb_fail_in_use(const char *image_name)
 {
-- 
2.34.1



  parent reply	other threads:[~2022-09-01  7:06 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01  6:51 [PULL 00/20] tcg patch queue Richard Henderson
2022-09-01  6:51 ` [PULL 01/20] linux-user/arm: Mark the commpage executable Richard Henderson
2022-09-01  6:51 ` [PULL 1/4] target/avr: Support probe argument to tlb_fill Richard Henderson
2022-09-01  6:51 ` [PULL 02/20] linux-user/hppa: Allocate page zero as a commpage Richard Henderson
2022-09-01  6:51 ` [PULL 2/4] target/avr: Call avr_cpu_do_interrupt directly Richard Henderson
2022-09-01  6:51 ` Richard Henderson [this message]
2022-09-01  6:51 ` [PULL 3/4] target/avr: Only execute one interrupt at a time Richard Henderson
2022-09-01  6:51 ` [PULL 04/20] linux-user: Honor PT_GNU_STACK Richard Henderson
2022-09-01  6:51 ` [PULL 4/4] target/avr: Disable interrupts when env->skip set Richard Henderson
2022-09-01  6:51 ` [PULL 05/20] linux-user: Clear translations on mprotect() Richard Henderson
2022-09-01  6:51 ` [PULL 06/20] tests/tcg/i386: Move smc_code2 to an executable section Richard Henderson
2022-09-01  6:51 ` [PULL 07/20] accel/tcg: Introduce is_same_page() Richard Henderson
2022-09-01  6:51 ` [PULL 08/20] accel/tcg: Properly implement get_page_addr_code for user-only Richard Henderson
2022-09-01  6:51 ` [PULL 09/20] accel/tcg: Unlock mmap_lock after longjmp Richard Henderson
2022-09-01  6:52 ` [PULL 10/20] accel/tcg: Make tb_htable_lookup static Richard Henderson
2022-09-01  6:52 ` [PULL 11/20] accel/tcg: Move qemu_ram_addr_from_host_nofail to physmem.c Richard Henderson
2022-09-01  6:52 ` [PULL 12/20] accel/tcg: Use probe_access_internal for softmmu get_page_addr_code_hostp Richard Henderson
2022-09-01  6:52 ` [PULL 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp Richard Henderson
2022-09-01  6:52 ` [PULL 14/20] accel/tcg: Remove translator_ldsw Richard Henderson
2022-09-01  6:52 ` [PULL 15/20] accel/tcg: Add pc and host_pc params to gen_intermediate_code Richard Henderson
2022-09-01  6:52 ` [PULL 16/20] accel/tcg: Add fast path for translator_ld* Richard Henderson
2022-09-01  6:52 ` [PULL 17/20] target/s390x: Make translator stop before the end of a page Richard Henderson
2022-09-01  6:52 ` [PULL 18/20] target/i386: " Richard Henderson
2022-09-01  6:52 ` [PULL 19/20] target/riscv: Add MAX_INSN_LEN and insn_len Richard Henderson
2022-09-01  6:52 ` [PULL 20/20] target/riscv: Make translator stop before the end of a page Richard Henderson
2022-09-01 21:28 ` [PULL 00/20] tcg patch queue Stefan Hajnoczi

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=20220901065210.117081-6-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=iii@linux.ibm.com \
    --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).