]> xenbits.xensource.com Git - people/jgross/xen.git/commitdiff
tools/libxl: Work around libvirt breakage in libxl__cpuid_legacy()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 2 Oct 2020 17:23:42 +0000 (18:23 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 2 Oct 2020 17:57:50 +0000 (18:57 +0100)
OSSTest reports that libvirt is reliably regressed.

The only possible option is a side effect of using libxl_defbool_val(), which
can only be the assert() within.  Unfortunately, libvirt actually crashes in
__vfscanf_internal() while presumably trying to render some form of error.

Open code the check without the assert() to unblock staging, while we
investigate what is going on with libvirt.  This will want reverting at some
point in the future.

Not-really-fixes: bfcc97c08c ("tools/cpuid: Plumb nested_virt down into xc_cpuid_apply_policy()" reliably breaks libvirt.)
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Ian Jackson <iwj@xenproject.org>
tools/libs/light/libxl_cpuid.c

index 08e85dcffb0ae955ccaaa063e916e786386466d3..16c077cceba8d52cb61446dedd75296dd8d76c62 100644 (file)
@@ -422,7 +422,15 @@ void libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid, bool restore,
 {
     bool pae = true;
     bool itsc;
-    bool nested_virt = libxl_defbool_val(info->nested_hvm);
+
+    /*
+     * Gross hack.  Using libxl_defbool_val() here causes libvirt to crash in
+     * __vfscanf_internal(), which is probably collateral damage from a side
+     * effect of the assert().
+     *
+     * Unblock things for now by opencoding without the assert.
+     */
+    bool nested_virt = info->nested_hvm.val > 0;
 
     /*
      * For PV guests, PAE is Xen-controlled (it is the 'p' that differentiates