session-policy-local: Check policy being non-NULL before using
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 21 Dec 2012 12:10:33 +0000 (14:10 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 21 Dec 2012 13:09:00 +0000 (15:09 +0200)
When running unit/test-session the following happens if SELinux is disabled but
--enable-session-policy-local is specified for ./configure:

connmand[6468]: src/session.c:__connman_session_create() owner :1.269
connmand[6468]: src/dbus.c:selinux_get_context_reply() Failed to retrieve SELinux context
connmand[6468]: src/session.c:session_create_cb() session 0x2388dc0 config (nil)
connmand[6468]: Aborting (signal 11) [src/connmand]
connmand[6468]: ++++++++ backtrace ++++++++
connmand[6468]: #0  0x7f5b2b8184f0 in /lib/x86_64-linux-gnu/libc.so.6
connmand[6468]: #1  0x4379b4 in policy_local_destroy() at plugins/session_policy_local.c:245
connmand[6468]: #2  0x46703f in free_session() at src/session.c:258
connmand[6468]: #3  0x468603 in session_create_cb() at src/session.c:1710
connmand[6468]: #4  0x4377e7 in selinux_context_reply() at plugins/session_policy_local.c:201
connmand[6468]: #5  0x461366 in selinux_get_context_reply() at src/dbus.c:475
connmand[6468]: #6  0x7f5b2c66b1ca in /lib/x86_64-linux-gnu/libdbus-1.so.3
connmand[6468]: #7  0x7f5b2c66e293 in /lib/x86_64-linux-gnu/libdbus-1.so.3
connmand[6468]: #8  0x410aa8 in message_dispatch() at gdbus/mainloop.c:76
connmand[6468]: #9  0x7f5b2c8eeeeb in /lib/x86_64-linux-gnu/libglib-2.0.so.0
connmand[6468]: #10 0x7f5b2c8ee355 in /lib/x86_64-linux-gnu/libglib-2.0.so.0
connmand[6468]: #11 0x7f5b2c8ee688 in /lib/x86_64-linux-gnu/libglib-2.0.so.0
connmand[6468]: #12 0x7f5b2c8eea82 in /lib/x86_64-linux-gnu/libglib-2.0.so.0
connmand[6468]: #13 0x410592 in main() at src/main.c:672
connmand[6468]: #14 0x7f5b2b804ead in /lib/x86_64-linux-gnu/libc.so.6
connmand[6468]: +++++++++++++++++++++++++++

plugins/session_policy_local.c

index 11b1665..5a8f6b8 100644 (file)
@@ -241,9 +241,11 @@ static void policy_local_destroy(struct connman_session *session)
        DBG("session %p", session);
 
        policy = g_hash_table_lookup(session_hash, session);
+       if (policy == NULL)
+               return;
+
        g_hash_table_remove(session_hash, session);
        policy->session = NULL;
-
        policy_unref(policy);
 }