From: Daniel Wagner <[email protected]>
---
plugins/session_policy_ivi.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/plugins/session_policy_ivi.c b/plugins/session_policy_ivi.c
index 25be047..c4e0e42 100644
--- a/plugins/session_policy_ivi.c
+++ b/plugins/session_policy_ivi.c
@@ -118,12 +118,18 @@ static void selinux_context_reply(unsigned char *context,
unsigned int size,
void *user_data)
{
struct create_data *data = user_data;
- struct policy_data *policy;
+ struct policy_data *policy = NULL;
char *ident;
DBG("session %p", data->session);
ident = parse_ident(context, size);
+ if (ident == NULL)
+ goto err;
+
+ policy = g_hash_table_lookup(ident_hash, ident);
+ if (policy != NULL)
+ goto out;
policy = g_try_new0(struct policy_data, 1);
if (policy == NULL)
@@ -133,6 +139,9 @@ static void selinux_context_reply(unsigned char *context,
unsigned int size,
if (policy->config == NULL)
goto err;
+out:
+ policy->session = data->session;
+
g_hash_table_replace(session_hash, data->session, policy);
(*data->callback)(data->session, policy->config, data->user_data);
@@ -144,7 +153,8 @@ static void selinux_context_reply(unsigned char *context,
unsigned int size,
err:
(*data->callback)(data->session, NULL, data->user_data);
- cleanup_policy(policy);
+ if (policy != NULL && policy->ident == NULL)
+ cleanup_policy(policy);
g_free(data);
g_free(ident);
@@ -189,8 +199,10 @@ static void policy_ivi_destroy(struct connman_session
*session)
policy = g_hash_table_lookup(session_hash, session);
g_hash_table_remove(session_hash, session);
+ policy->session = NULL;
- cleanup_policy(policy);
+ if (policy->ident == NULL)
+ cleanup_policy(policy);
}
static struct connman_session_policy session_policy_ivi = {
--
1.7.12.1.382.gb0576a6
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman