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:
Juergen Gross authored and Jan Beulich committed 2022-11-02 12:08:22 +01:00
1 parent 1283af6465
commit 0751a75e39
1 file changed
+24
+24
View File
@@ -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)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.