From: Christoph Hellwig <hch@lst.de>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Dexuan Cui <decui@microsoft.com>, Christoph Hellwig <hch@lst.de>,
Stephen Hemminger <stephen@networkplumber.org>,
Andy Lutomirski <luto@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Andy Lutomirski <luto@amacapital.net>,
Michael Kelley <mikelley@microsoft.com>,
Ju-Hyoung Lee <juhlee@microsoft.com>,
"x86@kernel.org" <x86@kernel.org>,
"linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
KY Srinivasan <kys@microsoft.com>
Subject: Re: hv_hypercall_pg page permissios
Date: Tue, 16 Jun 2020 11:55:49 +0200 [thread overview]
Message-ID: <20200616095549.GA27917@lst.de> (raw)
In-Reply-To: <20200616093341.GA26400@lst.de>
Actually, what do you think of this one:
---
From a5ee278f4244c6bfc0ce2d2b2fd4f99358dbde4d Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Tue, 16 Jun 2020 11:50:59 +0200
Subject: x86/hyperv: allocate the hypercall page with only read and execute
bits
Avoid a W^X violation cause by the fact that PAGE_KERNEL_EXEC includes the
writable bit.
Fixes: 78bb17f76edc ("x86/hyperv: use vmalloc_exec for the hypercall page")
Reported-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
arch/x86/hyperv/hv_init.c | 4 +++-
arch/x86/include/asm/pgtable_types.h | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index a54c6a401581dd..f4875bf05c17ff 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -375,7 +375,9 @@ void __init hyperv_init(void)
guest_id = generate_guest_id(0, LINUX_VERSION_CODE, 0);
wrmsrl(HV_X64_MSR_GUEST_OS_ID, guest_id);
- hv_hypercall_pg = vmalloc_exec(PAGE_SIZE);
+ hv_hypercall_pg = __vmalloc_node_range(PAGE_SIZE, 1, VMALLOC_START,
+ VMALLOC_END, GFP_KERNEL, PAGE_KERNEL_RX,
+ VM_FLUSH_RESET_PERMS, NUMA_NO_NODE, __func__);
if (hv_hypercall_pg == NULL) {
wrmsrl(HV_X64_MSR_GUEST_OS_ID, 0);
goto remove_cpuhp_state;
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
index 2da1f95b88d761..591b5c92a66249 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
@@ -194,6 +194,7 @@ enum page_cache_mode {
#define _PAGE_TABLE_NOENC (__PP|__RW|_USR|___A| 0|___D| 0| 0)
#define _PAGE_TABLE (__PP|__RW|_USR|___A| 0|___D| 0| 0| _ENC)
#define __PAGE_KERNEL_RO (__PP| 0| 0|___A|__NX|___D| 0|___G)
+#define __PAGE_KERNEL_RX (__PP| 0| 0|___A| 0|___D| 0|___G)
#define __PAGE_KERNEL_NOCACHE (__PP|__RW| 0|___A|__NX|___D| 0|___G| __NC)
#define __PAGE_KERNEL_VVAR (__PP| 0|_USR|___A|__NX|___D| 0|___G)
#define __PAGE_KERNEL_LARGE (__PP|__RW| 0|___A|__NX|___D|_PSE|___G)
@@ -219,6 +220,7 @@ enum page_cache_mode {
#define PAGE_KERNEL_RO __pgprot_mask(__PAGE_KERNEL_RO | _ENC)
#define PAGE_KERNEL_EXEC __pgprot_mask(__PAGE_KERNEL_EXEC | _ENC)
#define PAGE_KERNEL_EXEC_NOENC __pgprot_mask(__PAGE_KERNEL_EXEC | 0)
+#define PAGE_KERNEL_RX __pgprot_mask(__PAGE_KERNEL_RX | _ENC)
#define PAGE_KERNEL_NOCACHE __pgprot_mask(__PAGE_KERNEL_NOCACHE | _ENC)
#define PAGE_KERNEL_LARGE __pgprot_mask(__PAGE_KERNEL_LARGE | _ENC)
#define PAGE_KERNEL_LARGE_EXEC __pgprot_mask(__PAGE_KERNEL_LARGE_EXEC | _ENC)
--
2.26.2
next prev parent reply other threads:[~2020-06-16 9:55 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-07 6:55 hv_hypercall_pg page permissios Christoph Hellwig
2020-04-07 7:28 ` Vitaly Kuznetsov
2020-04-07 7:38 ` Christoph Hellwig
2020-04-07 21:01 ` Andy Lutomirski
2020-06-12 7:48 ` Dexuan Cui
2020-06-15 8:35 ` Vitaly Kuznetsov
2020-06-15 17:41 ` Dexuan Cui
2020-06-15 19:49 ` Dexuan Cui
2020-06-16 7:23 ` Christoph Hellwig
2020-06-16 10:18 ` Peter Zijlstra
2020-06-16 10:23 ` Christoph Hellwig
2020-06-16 10:24 ` Christoph Hellwig
2020-06-16 10:31 ` Peter Zijlstra
2020-06-16 10:33 ` Christoph Hellwig
2020-06-16 10:40 ` Peter Zijlstra
2020-06-16 10:42 ` Christoph Hellwig
2020-06-16 10:52 ` Christoph Hellwig
2020-06-16 11:24 ` Peter Zijlstra
2020-06-16 14:39 ` Christoph Hellwig
2020-06-16 9:29 ` Vitaly Kuznetsov
2020-06-16 9:33 ` Christoph Hellwig
2020-06-16 9:55 ` Christoph Hellwig [this message]
2020-06-16 10:08 ` Christoph Hellwig
2020-06-16 10:50 ` Vitaly Kuznetsov
2020-06-16 10:20 ` Peter Zijlstra
2020-04-07 18:10 ` Dexuan Cui
2020-04-07 20:42 ` Wei Liu
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=20200616095549.GA27917@lst.de \
--to=hch@lst.de \
--cc=decui@microsoft.com \
--cc=juhlee@microsoft.com \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mikelley@microsoft.com \
--cc=peterz@infradead.org \
--cc=stephen@networkplumber.org \
--cc=vkuznets@redhat.com \
--cc=x86@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.