mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +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> master commit:0751a75e39master date: 2022-11-02 12:08:22 +0100
This commit is contained in:
1 parent
32445f23fe
commit
201552c5ca
1 file changed
+24
@@ -196,6 +196,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)
|
||||
{
|
||||
@@ -246,6 +267,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)
|
||||
|
||||