mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Don't XSAVE PKRU state.
We don't implement any of the `pkey_*` syscalls, so applications can't use protection keys. Updates #10087 PiperOrigin-RevId: 611287272
This commit is contained in:
@@ -88,12 +88,13 @@
|
||||
#define PTRACE_FS_BASE 168 // +checkoffset linux PtraceRegs.Fs_base
|
||||
#define PTRACE_GS_BASE 176 // +checkoffset linux PtraceRegs.Gs_base
|
||||
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for AMX
|
||||
// regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX Support.
|
||||
#define XCR0_AMX_MASK ((1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_AMX_MASK)
|
||||
#define XCR0_EDX 0xffffffff
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for PKRU and
|
||||
// AMX regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX support.
|
||||
// TODO(gvisor.dev/issues/10087): Implement PKRU support.
|
||||
#define XCR0_DISABLED_MASK ((1 << 9) | (1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_DISABLED_MASK)
|
||||
#define XCR0_EDX 0xffffffff
|
||||
|
||||
// Saves a register set.
|
||||
//
|
||||
|
||||
@@ -119,8 +119,8 @@ func Init(fs cpuid.FeatureSet) {
|
||||
hasFSGSBASE = fs.HasFeature(cpuid.X86FeatureFSGSBase)
|
||||
validXCR0Mask = uintptr(fs.ValidXCR0Mask())
|
||||
if hasXSAVE {
|
||||
XCR0AMXMask := uintptr((1 << 17) | (1 << 18))
|
||||
localXCR0 = xgetbv(0) &^ XCR0AMXMask
|
||||
XCR0DisabledMask := uintptr((1 << 9) | (1 << 17) | (1 << 18))
|
||||
localXCR0 = xgetbv(0) &^ XCR0DisabledMask
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,12 +22,13 @@
|
||||
// FXSAVE/XSAVE area. (Intel SDM Vol. 1, Table 10-2 "Format of an FXSAVE Area")
|
||||
#define MXCSR_OFFSET 24
|
||||
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for AMX
|
||||
// regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX Support.
|
||||
#define XCR0_AMX_MASK ((1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_AMX_MASK)
|
||||
#define XCR0_EDX 0xffffffff
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for PKRU and
|
||||
// AMX regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX support.
|
||||
// TODO(gvisor.dev/issues/10087): Implement PKRU support.
|
||||
#define XCR0_DISABLED_MASK ((1 << 9) | (1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_DISABLED_MASK)
|
||||
#define XCR0_EDX 0xffffffff
|
||||
|
||||
// initX86FPState initializes floating point state.
|
||||
//
|
||||
|
||||
@@ -480,7 +480,7 @@ static void prep_fpstate_for_sigframe(void *buf, uint32_t user_size,
|
||||
|
||||
sw_bytes->magic1 = FP_XSTATE_MAGIC1;
|
||||
sw_bytes->extended_size = user_size + FP_XSTATE_MAGIC2_SIZE;
|
||||
sw_bytes->xfeatures = ~(0ULL) ^ (XCR0_AMX_MASK);
|
||||
sw_bytes->xfeatures = ~(0ULL) ^ (XCR0_DISABLED_MASK);
|
||||
sw_bytes->xstate_size = user_size;
|
||||
*(uint32_t *)(buf + user_size) = use_xsave ? FP_XSTATE_MAGIC2 : 0;
|
||||
}
|
||||
|
||||
@@ -20,11 +20,12 @@
|
||||
// for the pkg/sentry/platform/systrap/usertrap package.
|
||||
#define FAULT_OPCODE 0x06
|
||||
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for AMX
|
||||
// regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX Support.
|
||||
#define XCR0_AMX_MASK ((1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_AMX_MASK)
|
||||
// The value for XCR0 is defined to xsave/xrstor everything except for PKRU and
|
||||
// AMX regions.
|
||||
// TODO(gvisor.dev/issues/9896): Implement AMX support.
|
||||
// TODO(gvisor.dev/issues/10087): Implement PKRU support.
|
||||
#define XCR0_DISABLED_MASK ((1 << 9) | (1 << 17) | (1 << 18))
|
||||
#define XCR0_EAX (0xffffffff ^ XCR0_DISABLED_MASK)
|
||||
#define XCR0_EDX 0xffffffff
|
||||
|
||||
// LINT.IfChange
|
||||
|
||||
Reference in New Issue
Block a user