From: Qiaowei Ren <qiaowei.ren@intel.com>
To: "H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@intel.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
Qiaowei Ren <qiaowei.ren@intel.com>
Subject: [PATCH v6 10/10] x86, mpx: add documentation on Intel MPX
Date: Wed, 18 Jun 2014 17:44:16 +0800 [thread overview]
Message-ID: <1403084656-27284-11-git-send-email-qiaowei.ren@intel.com> (raw)
In-Reply-To: <1403084656-27284-1-git-send-email-qiaowei.ren@intel.com>
This patch adds the Documentation/x86/intel_mpx.txt file with some
information about Intel MPX.
Signed-off-by: Qiaowei Ren <qiaowei.ren@intel.com>
---
Documentation/x86/intel_mpx.txt | 127 +++++++++++++++++++++++++++++++++++++++
1 files changed, 127 insertions(+), 0 deletions(-)
create mode 100644 Documentation/x86/intel_mpx.txt
diff --git a/Documentation/x86/intel_mpx.txt b/Documentation/x86/intel_mpx.txt
new file mode 100644
index 0000000..1af9809
--- /dev/null
+++ b/Documentation/x86/intel_mpx.txt
@@ -0,0 +1,127 @@
+1. Intel(R) MPX Overview
+========================
+
+Intel(R) Memory Protection Extensions (Intel(R) MPX) is a new
+capability introduced into Intel Architecture. Intel MPX provides
+hardware features that can be used in conjunction with compiler
+changes to check memory references, for those references whose
+compile-time normal intentions are usurped at runtime due to
+buffer overflow or underflow.
+
+For more information, please refer to Intel(R) Architecture
+Instruction Set Extensions Programming Reference, Chapter 9:
+Intel(R) Memory Protection Extensions.
+
+Note: Currently no hardware with MPX ISA is available but it is always
+possible to use SDE (Intel(R) Software Development Emulator) instead,
+which can be downloaded from
+http://software.intel.com/en-us/articles/intel-software-development-emulator
+
+
+2. How does MPX kernel code work
+================================
+
+Handling #BR faults caused by MPX
+---------------------------------
+
+When MPX is enabled, there are 2 new situations that can generate
+#BR faults.
+ * bounds violation caused by MPX instructions.
+ * new bounds tables (BT) need to be allocated to save bounds.
+
+We hook #BR handler to handle these two new situations.
+
+Decoding MPX instructions
+-------------------------
+
+If a #BR is generated due to a bounds violation caused by MPX.
+We need to decode MPX instructions to get violation address and
+set this address into extended struct siginfo.
+
+The _sigfault feild of struct siginfo is extended as follow:
+
+87 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
+88 struct {
+89 void __user *_addr; /* faulting insn/memory ref. */
+90 #ifdef __ARCH_SI_TRAPNO
+91 int _trapno; /* TRAP # which caused the signal */
+92 #endif
+93 short _addr_lsb; /* LSB of the reported address */
+94 struct {
+95 void __user *_lower;
+96 void __user *_upper;
+97 } _addr_bnd;
+98 } _sigfault;
+
+The '_addr' field refers to violation address, and new '_addr_and'
+field refers to the upper/lower bounds when a #BR is caused.
+
+Glibc will be also updated to support this new siginfo. So user
+can get violation address and bounds when bounds violations occur.
+
+Freeing unused bounds tables
+----------------------------
+
+When a BNDSTX instruction attempts to save bounds to a bounds directory
+entry marked as invalid, a #BR is generated. This is an indication that
+no bounds table exists for this entry. In this case the fault handler
+will allocate a new bounds table on demand.
+
+Since the kernel allocated those tables on-demand without userspace
+knowledge, it is also responsible for freeing them when the associated
+mappings go away.
+
+Here, the solution for this issue is to hook do_munmap() to check
+whether one process is MPX enabled. If yes, those bounds tables covered
+in the virtual address region which is being unmapped will be freed also.
+
+Adding new prctl commands
+-------------------------
+
+Runtime library in userspace is responsible for allocation of bounds
+directory. So kernel have to use XSAVE instruction to get the base
+of bounds directory from BNDCFG register.
+
+But XSAVE is expected to be very expensive. In order to do performance
+optimization, we have to add new prctl command to get the base of
+bounds directory to be used in future.
+
+Two new prctl commands are added to register and unregister MPX related
+resource.
+
+155 #define PR_MPX_REGISTER 41
+156 #define PR_MPX_UNREGISTER 42
+
+The base of the bounds directory is set into mm_struct during
+PR_MPX_REGISTER command execution. This member can be used to
+check whether one application is mpx enabled.
+
+
+3. Tips
+=======
+
+1) Users are not allowed to create bounds tables and point the bounds
+directory at them in the userspace. In fact, it is not also necessary
+for users to create bounds tables in the userspace.
+
+When #BR fault is produced due to invalid entry, bounds table will be
+created in kernel on demand and kernel will not transfer this fault to
+userspace. So usersapce can't receive #BR fault for invalid entry, and
+it is not also necessary for users to create bounds tables by themselves.
+
+Certainly users can allocate bounds tables and forcibly point the bounds
+directory at them through XSAVE instruction, and then set valid bit
+of bounds entry to have this entry valid. But we have no way to track
+the memory usage of these user-created bounds tables. In regard to this,
+this behaviour is outlawed here.
+
+2) We will not support the case that multiple bounds directory entries
+are pointed at the same bounds table.
+
+Users can be allowed to take multiple bounds directory entries and point
+them at the same bounds table. See more information "Intel(R) Architecture
+Instruction Set Extensions Programming Reference" (9.3.4).
+
+If userspace did this, it will be possible for kernel to unmap an in-use
+bounds table since it does not recognize sharing. So this behavior is
+also outlawed here.
--
1.7.1
next prev parent reply other threads:[~2014-06-18 9:48 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-18 9:44 [PATCH v6 00/10] Intel MPX support Qiaowei Ren
2014-06-18 9:44 ` [PATCH v6 01/10] x86, mpx: introduce VM_MPX to indicate that a VMA is MPX specific Qiaowei Ren
2014-06-18 9:44 ` [PATCH v6 02/10] x86, mpx: add MPX specific mmap interface Qiaowei Ren
2014-06-23 19:49 ` Andy Lutomirski
2014-06-23 20:03 ` Dave Hansen
2014-06-23 20:06 ` Andy Lutomirski
2014-06-23 20:28 ` Dave Hansen
2014-06-23 21:04 ` Andy Lutomirski
2014-06-24 5:53 ` Ren, Qiaowei
2014-06-24 23:55 ` Andy Lutomirski
2014-06-25 1:40 ` Ren, Qiaowei
2014-06-25 21:04 ` Andy Lutomirski
2014-06-25 21:05 ` Andy Lutomirski
2014-06-25 21:45 ` Dave Hansen
2014-06-26 22:19 ` Andy Lutomirski
2014-06-26 22:58 ` Dave Hansen
2014-06-26 23:15 ` Andy Lutomirski
2014-06-27 0:19 ` Dave Hansen
2014-06-27 0:26 ` Andy Lutomirski
2014-06-27 17:34 ` Dave Hansen
2014-06-27 17:42 ` Dave Hansen
2014-06-27 18:57 ` Andy Lutomirski
2014-06-25 21:43 ` Dave Hansen
2014-06-24 2:53 ` Ren, Qiaowei
2014-06-18 9:44 ` [PATCH v6 03/10] x86, mpx: add macro cpu_has_mpx Qiaowei Ren
2014-06-18 9:57 ` Borislav Petkov
2014-06-18 14:35 ` Dave Hansen
2014-06-18 14:44 ` Borislav Petkov
2014-06-18 14:58 ` Dave Hansen
2014-06-18 15:25 ` Borislav Petkov
2014-06-18 16:17 ` Dave Hansen
2014-06-18 15:00 ` H. Peter Anvin
2014-06-18 15:27 ` Borislav Petkov
2014-06-18 14:59 ` H. Peter Anvin
2014-06-18 16:25 ` Dave Hansen
2014-06-18 17:21 ` Borislav Petkov
2014-06-19 18:02 ` H. Peter Anvin
2014-06-19 18:50 ` Dave Hansen
2014-06-20 3:28 ` H. Peter Anvin
2014-06-18 9:44 ` [PATCH v6 04/10] x86, mpx: hook #BR exception handler to allocate bound tables Qiaowei Ren
2014-06-23 19:54 ` Andy Lutomirski
2014-06-24 1:53 ` Ren, Qiaowei
2014-07-11 16:23 ` Dave Hansen
2014-06-18 9:44 ` [PATCH v6 05/10] x86, mpx: extend siginfo structure to include bound violation information Qiaowei Ren
2014-06-18 9:44 ` [PATCH v6 06/10] mips: sync struct siginfo with general version Qiaowei Ren
2014-06-18 9:44 ` [PATCH v6 07/10] x86, mpx: decode MPX instruction to get bound violation information Qiaowei Ren
2014-06-18 10:07 ` Borislav Petkov
2014-06-19 1:13 ` Ren, Qiaowei
2014-06-19 6:28 ` Borislav Petkov
2014-06-19 6:53 ` Ren, Qiaowei
2014-06-19 17:04 ` Dave Hansen
2014-06-19 17:32 ` H. Peter Anvin
2014-06-20 3:21 ` Ren, Qiaowei
2014-06-18 9:44 ` [PATCH v6 08/10] x86, mpx: add prctl commands PR_MPX_REGISTER, PR_MPX_UNREGISTER Qiaowei Ren
2014-06-19 20:58 ` Dave Hansen
2014-06-23 20:00 ` Andy Lutomirski
2014-06-23 20:09 ` Dave Hansen
2014-06-23 22:00 ` Andy Lutomirski
2014-06-23 23:42 ` Dave Hansen
2014-06-24 0:01 ` Andy Lutomirski
2014-06-24 0:10 ` Dave Hansen
2014-06-18 9:44 ` [PATCH v6 09/10] x86, mpx: cleanup unused bound tables Qiaowei Ren
2014-06-23 19:57 ` Andy Lutomirski
2014-06-18 9:44 ` Qiaowei Ren [this message]
2014-06-18 14:41 ` [PATCH v6 00/10] Intel MPX support Dave Hansen
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=1403084656-27284-11-git-send-email-qiaowei.ren@intel.com \
--to=qiaowei.ren@intel.com \
--cc=dave.hansen@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--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 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).