Intel MPX
Intel MPX (Memory Protection Extensions) is a set of extensions to the x86 instruction set architecture. With compiler, runtime library and operating system support, Intel MPX brings increased security to software by checking pointer references whose normal compile-time intentions are maliciously exploited at runtime due to buffer overflows. Intel MPX introduces new bounds registers, and new instruction set extensions that operate on these registers. Additionally, there is a new set of "bound tables" that store bounds beyond what can fit in the bounds registers.[1][2][3][4]
MPX uses four new 128-bit bounds registers, BND0
to BND3
, each storing a pair of 64-bit lower bound (LB) and upper bound (UB) values of a buffer. The upper bound is stored in ones' complement form, with the load instructions BNDMK
and BNDCU
performing the conversion. The architecture includes user-mode configuration register BNDCFGU
, supervisor-mode configuration register IA32_BNDCFGS
(a model-specific register), and status register BNDSTATUS
, which provides a memory address and error code in case of an exception.[5]
The application can use the Bounds Directory (BD) of several Bounds Tables (BT), which contain the linear address pointer of a buffer, along with its bounds. Two extended load/store instructions BNDLDX
and BNDSTX
will sync BNDx
registers with the Bounds Directory, performing translation as necessary.[5]
Intel MPX was introduced as part of the Skylake microarchitecture.[6] Kernel-level software support for Intel MPX was merged into the Linux kernel mainline in kernel version 3.19, which was released on February 8, 2015.[7][8]
Intel Goldmont microarchitecture also supports Intel MPX.[9]
References
- ↑ "Intel ISA Extensions". Intel. Retrieved 2013-11-04.
- ↑ "Introduction to Intel Memory Protection Extensions". Intel. 2013-07-16. Retrieved 2013-09-10.
- ↑ "Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer". code.google.com. Retrieved 2013-11-04.
- ↑ "Intel Memory Protection Extensions (Intel MPX) support in the GCC compiler". gcc.gnu.org. Retrieved 2013-11-04.
- 1 2 "Intel Architecture Instruction Set Extensions Programming Reference" (PDF). Intel. December 2013. Retrieved 2014-01-17.
- ↑ "Intel Software Development Emulator". Intel. 2012-06-15. Retrieved 2013-11-04.
- ↑ "Linux kernel 3.19, Section 1.2. Support for the Intel Memory Protection Extensions". kernelnewbies.org. February 9, 2015. Retrieved February 9, 2015.
- ↑ Jonathan Corbet (January 29, 2014). "Supporting Intel MPX in Linux". LWN.net. Retrieved February 9, 2015.
- ↑ "Intel Software Development Emulator".
External links
- Intel Architecture Instruction Set Extensions Programming Reference (PDF). Intel. July 2013. Retrieved 2016-01-10.
- "Introduction to Intel Memory Protection Extensions". Intel. 2013-07-16. Retrieved 2013-09-10.
- "Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer". Retrieved 2013-11-04.
- "Intel ISA Extensions". Retrieved 2013-11-04.
- "Intel Memory Protection Extensions (Intel MPX) support in the GCC compiler". Retrieved 2013-11-04.