mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/xenstore: call remove_domid_from_perm() for special nodes
When destroying a domain, any stale permissions of the domain must be
removed from the special nodes "@...", too. This was not done in the
fix for XSA-322.
Fixes: 496306324d ("tools/xenstore: revoke access rights for removed domains")
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
Release-acked-by: Henry Wang <Henry.Wang@arm.com>
This commit is contained in:
1 parent
1283af6465
commit
0751a75e39
1 file changed
+24
@@ -227,6 +227,27 @@ static void unmap_interface(void *interface)
|
||||
xengnttab_unmap(*xgt_handle, interface, 1);
|
||||
}
|
||||
|
||||
static void remove_domid_from_perm(struct node_perms *perms,
|
||||
struct domain *domain)
|
||||
{
|
||||
unsigned int cur, new;
|
||||
|
||||
if (perms->p[0].id == domain->domid)
|
||||
perms->p[0].id = priv_domid;
|
||||
|
||||
for (cur = new = 1; cur < perms->num; cur++) {
|
||||
if (perms->p[cur].id == domain->domid)
|
||||
continue;
|
||||
|
||||
if (new != cur)
|
||||
perms->p[new] = perms->p[cur];
|
||||
|
||||
new++;
|
||||
}
|
||||
|
||||
perms->num = new;
|
||||
}
|
||||
|
||||
static int domain_tree_remove_sub(const void *ctx, struct connection *conn,
|
||||
struct node *node, void *arg)
|
||||
{
|
||||
@@ -277,6 +298,9 @@ static void domain_tree_remove(struct domain *domain)
|
||||
syslog(LOG_ERR,
|
||||
"error when looking for orphaned nodes\n");
|
||||
}
|
||||
|
||||
remove_domid_from_perm(&dom_release_perms, domain);
|
||||
remove_domid_from_perm(&dom_introduce_perms, domain);
|
||||
}
|
||||
|
||||
static int destroy_domain(void *_domain)
|
||||
|
||||