diff -r db50ed637dae -r eef4af3baaa4 xen/include/xsm/acm/acm_core.h --- a/xen/include/xsm/acm/acm_core.h Sat Feb 14 15:54:02 2015 -0500 +++ b/xen/include/xsm/acm/acm_core.h Fri Sep 28 07:53:39 2007 -0400 @@ -154,7 +154,7 @@ static inline int acm_array_append_tuple /* 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, diff -r db50ed637dae -r eef4af3baaa4 xen/include/xsm/acm/acm_hooks.h --- a/xen/include/xsm/acm/acm_hooks.h Sat Feb 14 15:54:02 2015 -0500 +++ b/xen/include/xsm/acm/acm_hooks.h Fri Sep 28 07:53:39 2007 -0400 @@ -258,7 +258,7 @@ static inline void acm_domain_destroy(st 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); } } @@ -294,7 +294,7 @@ static inline int acm_domain_create(stru { acm_domain_ssid_onto_list(d->ssid); } else { - acm_free_domain_ssid(d->ssid); + acm_free_domain_ssid(d); } error_out: diff -r db50ed637dae -r eef4af3baaa4 xen/xsm/acm/acm_core.c --- a/xen/xsm/acm/acm_core.c Sat Feb 14 15:54:02 2015 -0500 +++ b/xen/xsm/acm/acm_core.c Fri Sep 28 07:53:39 2007 -0400 @@ -361,7 +361,7 @@ int acm_init_domain_ssid(struct domain * { 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; } @@ -372,8 +372,10 @@ int acm_init_domain_ssid(struct domain * 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; @@ -387,6 +389,8 @@ acm_free_domain_ssid(struct acm_ssid_dom ssid->secondary_ssid = NULL; xfree(ssid); + d->ssid = NULL; + printkd("%s: Freed individual domain ssid (domain=%02x).\n", __func__, id); }