x86/pv: disallow access to unknown MSRs

Change the catch-all behavior for MSR not explicitly handled. Instead
of allow full read-access to the MSR space and silently dropping
writes return an exception when the MSR is not explicitly handled.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Roger Pau Monné authored and Jan Beulich committed 2020-09-15 12:42:58 +02:00
1 parent 8a31c255af
commit 322ec7c89f
1 file changed
+10 -8
+10 -8
View File
@@ -988,9 +988,10 @@ static int read_msr(unsigned int reg, uint64_t *val,
}
/* fall through */
default:
gdprintk(XENLOG_WARNING, "RDMSR 0x%08x unimplemented\n", reg);
break;
normal:
/* Everyone can read the MSR space. */
/* gdprintk(XENLOG_WARNING, "Domain attempted RDMSR %08x\n", reg); */
if ( rdmsr_safe(reg, *val) )
break;
return X86EMUL_OKAY;
@@ -1155,14 +1156,15 @@ static int write_msr(unsigned int reg, uint64_t val,
}
/* fall through */
default:
if ( rdmsr_safe(reg, temp) )
break;
gdprintk(XENLOG_WARNING,
"WRMSR 0x%08x val 0x%016"PRIx64" unimplemented\n",
reg, val);
break;
if ( val != temp )
invalid:
gdprintk(XENLOG_WARNING,
"Domain attempted WRMSR %08x from 0x%016"PRIx64" to 0x%016"PRIx64"\n",
reg, temp, val);
gdprintk(XENLOG_WARNING,
"Domain attempted WRMSR 0x%08x from 0x%016"PRIx64" to 0x%016"PRIx64"\n",
reg, temp, val);
return X86EMUL_OKAY;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.