mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/boot: Further simplify CR4 handling in dom0_construct_pv()
The logic would be more robust disabling SMAP based on its precense in CR4, rather than SMAP's accociation with a synthetic feature. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
6e085825cb
commit
4c21b6affb
1 file changed
+5
-4
@@ -1057,6 +1057,7 @@ int __init dom0_construct_pv(struct domain *d,
|
||||
module_t *initrd,
|
||||
const char *cmdline)
|
||||
{
|
||||
unsigned long cr4 = read_cr4();
|
||||
int rc;
|
||||
|
||||
/*
|
||||
@@ -1064,19 +1065,19 @@ int __init dom0_construct_pv(struct domain *d,
|
||||
* prevents us needing to write construct_dom0() in terms of
|
||||
* copy_{to,from}_user().
|
||||
*/
|
||||
if ( boot_cpu_has(X86_FEATURE_XEN_SMAP) )
|
||||
if ( cr4 & X86_CR4_SMAP )
|
||||
{
|
||||
if ( IS_ENABLED(CONFIG_PV32) )
|
||||
cr4_pv32_mask &= ~X86_CR4_SMAP;
|
||||
|
||||
write_cr4(read_cr4() & ~X86_CR4_SMAP);
|
||||
write_cr4(cr4 & ~X86_CR4_SMAP);
|
||||
}
|
||||
|
||||
rc = dom0_construct(d, image, image_headroom, initrd, cmdline);
|
||||
|
||||
if ( boot_cpu_has(X86_FEATURE_XEN_SMAP) )
|
||||
if ( cr4 & X86_CR4_SMAP )
|
||||
{
|
||||
write_cr4(read_cr4() | X86_CR4_SMAP);
|
||||
write_cr4(cr4);
|
||||
|
||||
if ( IS_ENABLED(CONFIG_PV32) )
|
||||
cr4_pv32_mask |= X86_CR4_SMAP;
|
||||
|
||||