mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-18 10:34:24 +08:00
x86, mpx: Update documentation
I was writing some MPX test programs and realized that the current design makes it tricky. I did something like: bndcfgu |= bnd_dir | BNDCFGU_ENABLE; xrstor(); printf("xrstor done"); // #BR bounds exception here prctl(MPX_ENABLE_MANAGEMENT); and then compiled the app with "-fcheck-pointer-bounds -mmpx" to enable MPX instrumentation. The problem is that there is MPX instrumentation inserted in to the area of the printf(). The kernel gets a bounds exception and since management isn't yet enabled, it SIGSEGV's. Add a bit to the documentation to explain a way around this and where apps need to be careful. Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Cc: Dave Hansen <dave@sr71.net> Link: http://lkml.kernel.org/r/20141212183835.8C581B3E@viggo.jf.intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
e10abb2f77
commit
010e593b14
@ -30,9 +30,15 @@ is how we expect the compiler, application and kernel to work together.
|
|||||||
instrumentation as well as some setup code called early after the app
|
instrumentation as well as some setup code called early after the app
|
||||||
starts. New instruction prefixes are noops for old CPUs.
|
starts. New instruction prefixes are noops for old CPUs.
|
||||||
2) That setup code allocates (virtual) space for the "bounds directory",
|
2) That setup code allocates (virtual) space for the "bounds directory",
|
||||||
points the "bndcfgu" register to the directory and notifies the kernel
|
points the "bndcfgu" register to the directory (must also set the valid
|
||||||
(via the new prctl(PR_MPX_ENABLE_MANAGEMENT)) that the app will be using
|
bit) and notifies the kernel (via the new prctl(PR_MPX_ENABLE_MANAGEMENT))
|
||||||
MPX.
|
that the app will be using MPX. The app must be careful not to access
|
||||||
|
the bounds tables between the time when it populates "bndcfgu" and
|
||||||
|
when it calls the prctl(). This might be hard to guarantee if the app
|
||||||
|
is compiled with MPX. You can add "__attribute__((bnd_legacy))" to
|
||||||
|
the function to disable MPX instrumentation to help guarantee this.
|
||||||
|
Also be careful not to call out to any other code which might be
|
||||||
|
MPX-instrumented.
|
||||||
3) The kernel detects that the CPU has MPX, allows the new prctl() to
|
3) The kernel detects that the CPU has MPX, allows the new prctl() to
|
||||||
succeed, and notes the location of the bounds directory. Userspace is
|
succeed, and notes the location of the bounds directory. Userspace is
|
||||||
expected to keep the bounds directory at that locationWe note it
|
expected to keep the bounds directory at that locationWe note it
|
||||||
|
Loading…
Reference in New Issue
Block a user