[XEN][PATCH 1/2] xenstored: Default priv_domid to store_domid

Jason Andryuk posted 2 patches 2 weeks, 5 days ago
[XEN][PATCH 1/2] xenstored: Default priv_domid to store_domid
Posted by Jason Andryuk 2 weeks, 5 days ago
On a system without a control domain, a hardware|xenstore domain
starting xenstored shows:
common/grant_table.c:1041:d2v0 Could not find domain 32756
gnttab: error: mmap failed: Invalid argument
Could not initialize dom32756

setup_structure() does not get called without priv_domid.  Subsequent
introduce_domain() calls will fault when calling fire_special_watches().

Default priv_domid to store_domid when there is no control domain.

Fixes: e5b0a9405571 ("tools/xenstored: Auto-introduce domains")
Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
---
I didn't verify the segfault in fire_watches() in this situation, but I
saw that previously when working on this.  Regardless of the specific
error, xenstored was not working properly without this change.
---
 tools/xenstored/domain.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c
index 5ce539d640..d504e9994b 100644
--- a/tools/xenstored/domain.c
+++ b/tools/xenstored/domain.c
@@ -1388,6 +1388,12 @@ void init_domains(void)
 	if (store_domid == DOMID_INVALID)
 		barf("Could not determine xenstore domid\n");
 
+	if (priv_domid == DOMID_INVALID)
+	{
+		priv_domid = store_domid;
+		xprintf("priv_domid defaulted to %u\n", priv_domid);
+	}
+
 	snprintf(store_domain_path, sizeof(store_domain_path),
 		 "/local/domain/%u", store_domid);
 
-- 
2.51.1
Re: [XEN][PATCH 1/2] xenstored: Default priv_domid to store_domid
Posted by Jürgen Groß 2 weeks, 4 days ago
On 24.11.25 23:35, Jason Andryuk wrote:
> On a system without a control domain, a hardware|xenstore domain
> starting xenstored shows:
> common/grant_table.c:1041:d2v0 Could not find domain 32756
> gnttab: error: mmap failed: Invalid argument
> Could not initialize dom32756
> 
> setup_structure() does not get called without priv_domid.  Subsequent
> introduce_domain() calls will fault when calling fire_special_watches().
> 
> Default priv_domid to store_domid when there is no control domain.
> 
> Fixes: e5b0a9405571 ("tools/xenstored: Auto-introduce domains")
> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>

Reviewed-by: Juergen Gross <jgross@suse.com>

> ---
> I didn't verify the segfault in fire_watches() in this situation, but I
> saw that previously when working on this.  Regardless of the specific
> error, xenstored was not working properly without this change.

The segfault was probably really related to the missing call of
setup_structure() in this case, as the nodes hashtable wouldn't be
initialized. This will result in a NULL dereference as soon as any
watch is tried to be fired when the existence of the related node
(@introduceDomain in this case) is checked.


Juergen
Re: [XEN][PATCH 1/2] xenstored: Default priv_domid to store_domid
Posted by Jan Beulich 2 weeks, 4 days ago
On 24.11.2025 23:35, Jason Andryuk wrote:
> On a system without a control domain, a hardware|xenstore domain
> starting xenstored shows:
> common/grant_table.c:1041:d2v0 Could not find domain 32756
> gnttab: error: mmap failed: Invalid argument
> Could not initialize dom32756
> 
> setup_structure() does not get called without priv_domid.  Subsequent
> introduce_domain() calls will fault when calling fire_special_watches().
> 
> Default priv_domid to store_domid when there is no control domain.
> 
> Fixes: e5b0a9405571 ("tools/xenstored: Auto-introduce domains")
> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>

Just to mention - unless told otherwise, the Fixes: tag here won't make
me take this change for backport, as I don't think a "system without
control domain" was deemed as thing back at the time.

Jan