CHANGELOG.md | 4 ++++ tools/helpers/init-xenstore-domain.c | 2 +- tools/ocaml/libs/xc/xenctrl.ml | 4 +++- tools/python/xen/lowlevel/xc/xc.c | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-)
Commit 23e2479ff9de ("xen/domain: introduce DOMID_ANY") broke at least:
* xenstored domains
* The Python bindings
* The Ocaml bindings (i.e XAPI, and therefore XenServer/XCP-ng)
by causing Xen to reject 0 (the wildcard sentinel since the start of Xen) and
DOMID_INVALID (since 4.21) without adjusting the callers of xc_domain_create().
Under other circumstances I'd revert, but xenstored has gained a dependent use
of DOMID_ANY.
Fix up the remaining in-tree callers of xc_domain_create(), which covers
init-xenstore-domain and the python bindings.
The Ocaml C bindings, like libxc itself, expose this ABI detail to their
caller, but in this case the caller is still internal to the bindings as a
whole. Adjust the default value in the internal transformation, adding
domid_any for legibility.
Leave a very clear message in CHANGELOG.md that all external callers need
altering.
Fixes: 23e2479ff9de ("xen/domain: introduce DOMID_ANY")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Anthony PERARD <anthony.perard@vates.tech>
CC: Michal Orzel <michal.orzel@amd.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Julien Grall <julien@xen.org>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Stefano Stabellini <sstabellini@kernel.org>
CC: Juergen Gross <jgross@suse.com>
CC: Denis Mukhin <dmukhin@ford.com>
CC: Oleksii Kurochko <oleksii.kurochko@gmail.com>
CC: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
CC: Pau Ruiz Safont <pau.safont@vates.tech>
CC: Colin James <colin.barr@vates.tech>
v2:
* Include XEN_DOMCTL_createdomain in CHANGELOG message too
* Fix the Ocaml stubs too.
There are now 0 Ocaml maintainers. Pau and Colin reviewed my suggestion on
the Xapi Matrix channel.
---
CHANGELOG.md | 4 ++++
tools/helpers/init-xenstore-domain.c | 2 +-
tools/ocaml/libs/xc/xenctrl.ml | 4 +++-
tools/python/xen/lowlevel/xc/xc.c | 2 +-
4 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 25f5a192ed48..1db3efc4864c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
## [4.22.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=staging) - TBD
### Changed
+ - Users of XEN_DOMCTL_createdomain/xc_domain_create() must now pass DOMID_ANY
+ to obtain an automatically allocated domid. The prior sentinel values (0
+ since the start of Xen, and DOMID_INVALID since Xen 4.21) now no longer
+ represent a wildcard input.
- On x86:
- Enable pf-fixup option by default for PVH dom0.
diff --git a/tools/helpers/init-xenstore-domain.c b/tools/helpers/init-xenstore-domain.c
index 01ca667d25d1..2be5831a578d 100644
--- a/tools/helpers/init-xenstore-domain.c
+++ b/tools/helpers/init-xenstore-domain.c
@@ -21,7 +21,7 @@
#define LAPIC_BASE_ADDRESS 0xfee00000UL
-static uint32_t domid = ~0;
+static uint32_t domid = DOMID_ANY;
static char *kernel;
static char *ramdisk;
static char *flask;
diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml
index 97108b9d861a..147afa62c293 100644
--- a/tools/ocaml/libs/xc/xenctrl.ml
+++ b/tools/ocaml/libs/xc/xenctrl.ml
@@ -208,7 +208,9 @@ let with_intf f =
external domain_create_stub: handle -> domid -> domctl_create_config -> domid
= "stub_xc_domain_create"
-let domain_create handle ?(domid=0) config =
+let domid_any = 0x7ff5 (* DOMID_ANY from public/xen.h *)
+
+let domain_create handle ?(domid=domid_any) config =
domain_create_stub handle domid config
external domain_sethandle: handle -> domid -> string -> unit
diff --git a/tools/python/xen/lowlevel/xc/xc.c b/tools/python/xen/lowlevel/xc/xc.c
index 9feb12ae2b16..a94f01d40b58 100644
--- a/tools/python/xen/lowlevel/xc/xc.c
+++ b/tools/python/xen/lowlevel/xc/xc.c
@@ -118,7 +118,7 @@ static PyObject *pyxc_domain_create(XcObject *self,
PyObject *args,
PyObject *kwds)
{
- uint32_t dom = 0, target = 0, max_grant_version = 2;
+ uint32_t dom = DOMID_ANY, target = 0, max_grant_version = 2;
int ret;
size_t i;
PyObject *pyhandle = NULL;
base-commit: e63ba93511b33c0d3bb8cc5870f946f41e1d2655
--
2.39.5
On 28/05/2026 12:39, Andrew Cooper wrote: > --- > CHANGELOG.md | 4 ++++ > tools/helpers/init-xenstore-domain.c | 2 +- > tools/ocaml/libs/xc/xenctrl.ml | 4 +++- > tools/python/xen/lowlevel/xc/xc.c | 2 +- > 4 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/CHANGELOG.md b/CHANGELOG.md > index 25f5a192ed48..1db3efc4864c 100644 > --- a/CHANGELOG.md > +++ b/CHANGELOG.md > @@ -7,6 +7,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) > ## [4.22.0 UNRELEASED](https://xenbits.xenproject.org/gitweb/?p=xen.git;a=shortlog;h=staging) - TBD > > ### Changed > + - Users of XEN_DOMCTL_createdomain/xc_domain_create() must now pass DOMID_ANY > + to obtain an automatically allocated domid. The prior sentinel values (0 > + since the start of Xen, and DOMID_INVALID since Xen 4.21) now no longer > + represent a wildcard input. > - On x86: > - Enable pf-fixup option by default for PVH dom0. > > diff --git a/tools/ocaml/libs/xc/xenctrl.ml b/tools/ocaml/libs/xc/xenctrl.ml > index 97108b9d861a..147afa62c293 100644 > --- a/tools/ocaml/libs/xc/xenctrl.ml > +++ b/tools/ocaml/libs/xc/xenctrl.ml > @@ -208,7 +208,9 @@ let with_intf f = > external domain_create_stub: handle -> domid -> domctl_create_config -> domid > = "stub_xc_domain_create" > > -let domain_create handle ?(domid=0) config = > +let domid_any = 0x7ff5 (* DOMID_ANY from public/xen.h *) > + > +let domain_create handle ?(domid=domid_any) config = > domain_create_stub handle domid config > > external domain_sethandle: handle -> domid -> string -> unit > base-commit: e63ba93511b33c0d3bb8cc5870f946f41e1d2655 Acked-by: Pau Ruiz Safont <pau.safont@vates.tech> Regards, Pau -- Pau Ruiz Safont | Vates XAPI Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech
© 2016 - 2026 Red Hat, Inc.