raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=32c37d084c15c9de4f01ed38a7eda7b8a26cf82a

commit 32c37d084c15c9de4f01ed38a7eda7b8a26cf82a
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Dec 17 10:16:55 2020 +0000

    connman agent msg handling -  be more clean to try avoid possible seg
    
    As this was reported with no reproduction method - like a "one off" I
    can't be sure this is it and fixes it, but looking for agent->msg and
    it becoming a wild crazy pointer. So either it was left there from
    long ago and has since been forgotten bhy asan and is thus wild, or ..
    memory was scribbled over with junk. in the latter case... who knows.
    in the former, this may fix that.
    
    @fix
---
 src/modules/connman/agent.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/modules/connman/agent.c b/src/modules/connman/agent.c
index fa188f969..e97da4fb6 100644
--- a/src/modules/connman/agent.c
+++ b/src/modules/connman/agent.c
@@ -137,6 +137,7 @@ _dialog_del_cb(void *data)
 
    // FIXME need to mark cs->pending_connect = NULL;
    eldbus_message_unref(agent->msg);
+   agent->msg = NULL;
    agent->dialog = NULL;
 }
 
@@ -396,10 +397,13 @@ _agent_request_input(const Eldbus_Service_Interface 
*iface,
 
    /* Discard previous requests */
    // if msg is the current agent msg? eek.
-   if (agent->msg == msg) return NULL;
+   if (agent->msg == msg)
+     {
+        ERR("agent->msg == msg -> this should not be happening?");
+        return NULL;
+     }
 
-   if (agent->msg)
-     eldbus_message_unref(agent->msg);
+   if (agent->msg) eldbus_message_unref(agent->msg);
    agent->msg = eldbus_message_ref((Eldbus_Message *)msg);
 
    EINA_LIST_FOREACH(ctxt->instances, l, inst)
@@ -526,6 +530,9 @@ void
 econnman_agent_del(E_Connman_Agent *agent)
 {
    EINA_SAFETY_ON_NULL_RETURN(agent);
+   if (agent->msg) eldbus_message_unref(agent->msg);
+   agent->msg = NULL;
    eldbus_service_object_unregister(agent->iface);
+   agent->iface = NULL;
    free(agent);
 }

-- 


Reply via email to