/* protos */
int acm_init_domain_ssid(struct domain *, ssidref_t ssidref);
-void acm_free_domain_ssid(struct acm_ssid_domain *ssid);
+void acm_free_domain_ssid(struct domain *);
int acm_init_binary_policy(u32 policy_code);
int acm_set_policy(XEN_GUEST_HANDLE_64(void) buf, u32 buf_size);
int do_acm_set_policy(void *buf, u32 buf_size, int is_bootpolicy,
acm_secondary_ops->domain_destroy(ssid, d);
/* free security ssid for the destroyed domain (also if null policy */
acm_domain_ssid_off_list(ssid);
- acm_free_domain_ssid((struct acm_ssid_domain *)(ssid));
+ acm_free_domain_ssid(d);
}
}
{
acm_domain_ssid_onto_list(d->ssid);
} else {
- acm_free_domain_ssid(d->ssid);
+ acm_free_domain_ssid(d);
}
error_out:
{
printk("%s: ERROR instantiating individual ssids for domain 0x%02x.\n",
__func__, subj->domain_id);
- acm_free_domain_ssid(ssid);
+ acm_free_domain_ssid(subj);
return ACM_INIT_SSID_ERROR;
}
void
-acm_free_domain_ssid(struct acm_ssid_domain *ssid)
+acm_free_domain_ssid(struct domain *d)
{
+ struct acm_ssid_domain *ssid = d->ssid;
+
/* domain is already gone, just ssid is left */
if (ssid == NULL)
return;
ssid->secondary_ssid = NULL;
xfree(ssid);
+ d->ssid = NULL;
+
printkd("%s: Freed individual domain ssid (domain=%02x).\n",
__func__, id);
}