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:
Andrew Cooper committed 2024-10-18 11:30:34 +01:00
1 parent 6e085825cb
commit 4c21b6affb
1 file changed
+5 -4
+5 -4
View File
@@ -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;
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.