summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrei Vagin <avagin@google.com>2021-07-22 15:53:06 -0700
committergVisor bot <gvisor-bot@google.com>2021-07-22 15:55:31 -0700
commit0690c25e062ad1b8dc162b4b4d70ab59879b9bff (patch)
tree398eb2c9eacea328748780f3040f00d37e7b909a
parent47f025461e6fdf8da99c780b17c2227696e83845 (diff)
kvm: set CR0.NE = 1
CR0.NE enables internal x87 floating point error reporting when set, else enables PC style x87 error detection. On AMD, the #MF exception isn't generated if CR0.NE isn't set. PiperOrigin-RevId: 386340269
-rw-r--r--pkg/ring0/kernel_amd64.go2
-rw-r--r--pkg/ring0/x86.go1
2 files changed, 2 insertions, 1 deletions
diff --git a/pkg/ring0/kernel_amd64.go b/pkg/ring0/kernel_amd64.go
index 23ec33f92..4a4c0ae26 100644
--- a/pkg/ring0/kernel_amd64.go
+++ b/pkg/ring0/kernel_amd64.go
@@ -177,7 +177,7 @@ func (c *CPU) TSS() (uint64, uint16, *SegmentDescriptor) {
//
//go:nosplit
func (c *CPU) CR0() uint64 {
- return _CR0_PE | _CR0_PG | _CR0_AM | _CR0_ET
+ return _CR0_PE | _CR0_PG | _CR0_AM | _CR0_ET | _CR0_NE
}
// CR4 returns the CPU's CR4 value.
diff --git a/pkg/ring0/x86.go b/pkg/ring0/x86.go
index 7c96cca6b..9a98703da 100644
--- a/pkg/ring0/x86.go
+++ b/pkg/ring0/x86.go
@@ -25,6 +25,7 @@ import (
const (
_CR0_PE = 1 << 0
_CR0_ET = 1 << 4
+ _CR0_NE = 1 << 5
_CR0_AM = 1 << 18
_CR0_PG = 1 << 31