[PATCH 1/9] xen/x86: prevent PVH type from getting clobbered

Jan Beulich posted 9 patches 4 years, 5 months ago
There is a newer version of this series
[PATCH 1/9] xen/x86: prevent PVH type from getting clobbered
Posted by Jan Beulich 4 years, 5 months ago
Like xen_start_flags, xen_domain_type gets set before .bss gets cleared.
Hence this variable also needs to be prevented from getting put in .bss,
which is possible because XEN_NATIVE is an enumerator evaluating to
zero. Any use prior to init_hvm_pv_info() setting the variable again
would lead to wrong decisions; one such case is xenboot_console_setup()
when called as a result of "earlyprintk=xen".

Use __ro_after_init as more applicable than either __section(".data") or
__read_mostly.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -52,9 +52,6 @@ DEFINE_PER_CPU(struct vcpu_info, xen_vcp
 DEFINE_PER_CPU(uint32_t, xen_vcpu_id);
 EXPORT_PER_CPU_SYMBOL(xen_vcpu_id);
 
-enum xen_domain_type xen_domain_type = XEN_NATIVE;
-EXPORT_SYMBOL_GPL(xen_domain_type);
-
 unsigned long *machine_to_phys_mapping = (void *)MACH2PHYS_VIRT_START;
 EXPORT_SYMBOL(machine_to_phys_mapping);
 unsigned long  machine_to_phys_nr;
@@ -69,9 +66,11 @@ __read_mostly int xen_have_vector_callba
 EXPORT_SYMBOL_GPL(xen_have_vector_callback);
 
 /*
- * NB: needs to live in .data because it's used by xen_prepare_pvh which runs
- * before clearing the bss.
+ * NB: These need to live in .data or alike because they're used by
+ * xen_prepare_pvh() which runs before clearing the bss.
  */
+enum xen_domain_type __ro_after_init xen_domain_type = XEN_NATIVE;
+EXPORT_SYMBOL_GPL(xen_domain_type);
 uint32_t xen_start_flags __section(".data") = 0;
 EXPORT_SYMBOL(xen_start_flags);
 


Re: [PATCH 1/9] xen/x86: prevent PVH type from getting clobbered
Posted by Juergen Gross 4 years, 4 months ago
On 07.09.21 12:07, Jan Beulich wrote:
> Like xen_start_flags, xen_domain_type gets set before .bss gets cleared.
> Hence this variable also needs to be prevented from getting put in .bss,
> which is possible because XEN_NATIVE is an enumerator evaluating to
> zero. Any use prior to init_hvm_pv_info() setting the variable again
> would lead to wrong decisions; one such case is xenboot_console_setup()
> when called as a result of "earlyprintk=xen".
> 
> Use __ro_after_init as more applicable than either __section(".data") or
> __read_mostly.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen