Skip to content

Commit

Permalink
tools/helpers: fix broken xenstore stubdom init
Browse files Browse the repository at this point in the history
Commit 1787cc1 ("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: 1787cc1 ("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>
  • Loading branch information
jgross1 authored and andyhhp committed Nov 4, 2021
1 parent 0f50d16 commit 86a192e
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions tools/helpers/init-xenstore-domain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down Expand Up @@ -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 )
{
Expand Down

0 comments on commit 86a192e

Please sign in to comment.