summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Gross <jgross@suse.com>2021-11-04 15:42:42 +0100
committerAndrew Cooper <andrew.cooper3@citrix.com>2021-11-04 18:43:20 +0000
commit86a192e511bd826c59ae1643d06fd52a5bc21ca6 (patch)
treefc925301dd9f44715725b7c75dad4eda3a9ff36c
parent0f50d1696b3c13cbf0b18fec817fc291d5a30a31 (diff)
tools/helpers: fix broken xenstore stubdom init
Commit 1787cc167906f3f ("libs/guest: Move the guest ABI check earlier into xc_dom_parse_image()") broke starting the xenstore stubdom. This is due to a rather special way the xenstore stubdom domain config is being initialized: in order to support both, PV and PVH stubdom, init-xenstore-domain is using xc_dom_parse_image() to find the correct domain type. Unfortunately above commit requires xc_dom_boot_xen_init() to have been called before using xc_dom_parse_image(). This requires the domid, which is known only after xc_domain_create(), which requires the domain type. In order to break this circular dependency, call xc_dom_boot_xen_init() with an arbitrary domid first, and then set dom->guest_domid later. Fixes: 1787cc167906f3f ("libs/guest: Move the guest ABI check earlier into xc_dom_parse_image()") Signed-off-by: Juergen Gross <jgross@suse.com> Release-acked-by: Ian Jackson <iwj@xenproject.org> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
-rw-r--r--tools/helpers/init-xenstore-domain.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c
index 6836002f0b..a79662bd1b 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -132,6 +132,13 @@ static int build(xc_interface *xch)
}
}
+ rv = xc_dom_boot_xen_init(dom, xch, domid);
+ if ( rv )
+ {
+ fprintf(stderr, "xc_dom_boot_xen_init failed\n");
+ goto err;
+ }
+
dom->container_type = XC_DOM_HVM_CONTAINER;
rv = xc_dom_parse_image(dom);
if ( rv )
@@ -214,16 +221,11 @@ static int build(xc_interface *xch)
else
snprintf(cmdline, 512, "--event %d --internal-db", rv);
+ dom->guest_domid = domid;
dom->cmdline = xc_dom_strdup(dom, cmdline);
dom->xenstore_domid = domid;
dom->console_evtchn = console_evtchn;
- rv = xc_dom_boot_xen_init(dom, xch, domid);
- if ( rv )
- {
- fprintf(stderr, "xc_dom_boot_xen_init failed\n");
- goto err;
- }
rv = xc_dom_mem_init(dom, memory);
if ( rv )
{