|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86: please Clang in arch_set_info_guest()
commit 2bb17a45b1814b0b6aa4646eff58e16f876281fd
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Thu Jun 10 16:56:24 2021 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jun 10 16:56:24 2021 +0200
x86: please Clang in arch_set_info_guest()
Clang 10 reports
domain.c:1328:10: error: variable 'cr3_mfn' is used uninitialized whenever
'if' condition is false [-Werror,-Wsometimes-uninitialized]
if ( !compat )
^~~~~~~
domain.c:1334:34: note: uninitialized use occurs here
cr3_page = get_page_from_mfn(cr3_mfn, d);
^~~~~~~
domain.c:1328:5: note: remove the 'if' if its condition is always true
if ( !compat )
^~~~~~~~~~~~~~
domain.c:1042:18: note: initialize the variable 'cr3_mfn' to silence this
warning
mfn_t cr3_mfn;
^
= 0
domain.c:1189:14: error: variable 'fail' is used uninitialized whenever
'if' condition is false [-Werror,-Wsometimes-uninitialized]
if ( !compat )
^~~~~~~
domain.c:1211:9: note: uninitialized use occurs here
fail |= v->arch.pv.gdt_ents != c(gdt_ents);
^~~~
domain.c:1189:9: note: remove the 'if' if its condition is always true
if ( !compat )
^~~~~~~~~~~~~~
domain.c:1187:18: note: initialize the variable 'fail' to silence this
warning
bool fail;
^
= false
despite this being a build with -O2 in effect, and despite "compat"
being constant "false" when CONFIG_COMPAT (and hence CONFIG_PV32) is not
defined, as it gets set at the top of the function from the result of
is_pv_32bit_domain().
Re-arrange the two "offending" if()s such that when COMPAT=n the
respective variables will be seen as unconditionally initialized. The
original aim was to have the !compat cases first, though.
Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/domain.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index 50a27197b5..ef1812dc14 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1186,7 +1186,17 @@ int arch_set_info_guest(
unsigned long pfn = pagetable_get_pfn(v->arch.guest_table);
bool fail;
- if ( !compat )
+#ifdef CONFIG_COMPAT
+ if ( compat )
+ {
+ l4_pgentry_t *l4tab = map_domain_page(_mfn(pfn));
+
+ pfn = l4e_get_pfn(*l4tab);
+ unmap_domain_page(l4tab);
+ fail = compat_pfn_to_cr3(pfn) != c.cmp->ctrlreg[3];
+ }
+ else
+#endif
{
fail = xen_pfn_to_cr3(pfn) != c.nat->ctrlreg[3];
if ( pagetable_is_null(v->arch.guest_table_user) )
@@ -1197,16 +1207,6 @@ int arch_set_info_guest(
fail |= xen_pfn_to_cr3(pfn) != c.nat->ctrlreg[1];
}
}
-#ifdef CONFIG_COMPAT
- else
- {
- l4_pgentry_t *l4tab = map_domain_page(_mfn(pfn));
-
- pfn = l4e_get_pfn(*l4tab);
- unmap_domain_page(l4tab);
- fail = compat_pfn_to_cr3(pfn) != c.cmp->ctrlreg[3];
- }
-#endif
fail |= v->arch.pv.gdt_ents != c(gdt_ents);
for ( i = 0; !fail && i < nr_gdt_frames; ++i )
@@ -1325,12 +1325,12 @@ int arch_set_info_guest(
set_bit(_VPF_in_reset, &v->pause_flags);
- if ( !compat )
- cr3_mfn = _mfn(xen_cr3_to_pfn(c.nat->ctrlreg[3]));
#ifdef CONFIG_COMPAT
- else
+ if ( compat )
cr3_mfn = _mfn(compat_cr3_to_pfn(c.cmp->ctrlreg[3]));
+ else
#endif
+ cr3_mfn = _mfn(xen_cr3_to_pfn(c.nat->ctrlreg[3]));
cr3_page = get_page_from_mfn(cr3_mfn, d);
if ( !cr3_page )
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |