Skip to content

Commit 9038ec9

Browse files
keesbostrovs
authored andcommitted
x86/xen: Distribute switch variables for initialization
Variables declared in a switch statement before any case statements cannot be automatically initialized with compiler instrumentation (as they are not part of any execution flow). With GCC's proposed automatic stack variable initialization feature, this triggers a warning (and they don't get initialized). Clang's automatic stack variable initialization (via CONFIG_INIT_STACK_ALL=y) doesn't throw a warning, but it also doesn't initialize such variables[1]. Note that these warnings (or silent skipping) happen before the dead-store elimination optimization phase, so even when the automatic initializations are later elided in favor of direct initializations, the warnings remain. To avoid these problems, move such variables into the "case" where they're used or lift them up into the main function body. arch/x86/xen/enlighten_pv.c: In function ‘xen_write_msr_safe’: arch/x86/xen/enlighten_pv.c:904:12: warning: statement will never be executed [-Wswitch-unreachable] 904 | unsigned which; | ^~~~~ [1] https://bugs.llvm.org/show_bug.cgi?id=44916 Signed-off-by: Kees Cook <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Juergen Gross <[email protected]> [boris: made @which an 'unsigned int'] Signed-off-by: Boris Ostrovsky <[email protected]>
1 parent 8557bbe commit 9038ec9

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

arch/x86/xen/enlighten_pv.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -896,14 +896,15 @@ static u64 xen_read_msr_safe(unsigned int msr, int *err)
896896
static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
897897
{
898898
int ret;
899+
#ifdef CONFIG_X86_64
900+
unsigned int which;
901+
u64 base;
902+
#endif
899903

900904
ret = 0;
901905

902906
switch (msr) {
903907
#ifdef CONFIG_X86_64
904-
unsigned which;
905-
u64 base;
906-
907908
case MSR_FS_BASE: which = SEGBASE_FS; goto set;
908909
case MSR_KERNEL_GS_BASE: which = SEGBASE_GS_USER; goto set;
909910
case MSR_GS_BASE: which = SEGBASE_GS_KERNEL; goto set;

0 commit comments

Comments
 (0)