* [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call @ 2019-01-12 2:40 Inga Stotland 2019-01-12 2:40 ` [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call Inga Stotland 2019-01-14 22:10 ` [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Gix, Brian 0 siblings, 2 replies; 4+ messages in thread From: Inga Stotland @ 2019-01-12 2:40 UTC (permalink / raw) To: linux-bluetooth; +Cc: brian.gix, Inga Stotland Supply correct parameters to l_dbus_message_iter_get_fixed_array to get the location from where to read UUID value. --- mesh/mesh.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mesh/mesh.c b/mesh/mesh.c index 169e6f42c..8971f7cc4 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -564,6 +564,7 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, { const char *app_path, *sender; struct l_dbus_message_iter iter_uuid; + uint8_t *uuid; uint32_t n; l_debug("Join network request"); @@ -578,7 +579,7 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, join_pending = l_new(struct join_data, 1); - l_dbus_message_iter_get_fixed_array(&iter_uuid, join_pending->uuid, &n); + l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n); if (n != 16) { l_free(join_pending); @@ -587,6 +588,8 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, "Bad device UUID"); } + memcpy(join_pending->uuid, uuid, 16); + sender = l_dbus_message_get_sender(msg); join_pending->sender = l_strdup(sender); -- 2.17.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call 2019-01-12 2:40 [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Inga Stotland @ 2019-01-12 2:40 ` Inga Stotland 2019-01-14 22:10 ` Gix, Brian 2019-01-14 22:10 ` [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Gix, Brian 1 sibling, 1 reply; 4+ messages in thread From: Inga Stotland @ 2019-01-12 2:40 UTC (permalink / raw) To: linux-bluetooth; +Cc: brian.gix, Inga Stotland Consolidate multiple instances where the pending Join data is freed into calling one function free_pending_join_call(). Also, add checks for NULL data in cleanup functions for storage, agent and provisioning acceptor. --- mesh/agent.c | 2 +- mesh/mesh.c | 59 +++++++++++++++++++------------------------- mesh/prov-acceptor.c | 5 ++-- mesh/storage.c | 3 +++ 4 files changed, 32 insertions(+), 37 deletions(-) diff --git a/mesh/agent.c b/mesh/agent.c index c6ff11802..88ad84d79 100644 --- a/mesh/agent.c +++ b/mesh/agent.c @@ -210,7 +210,7 @@ static void agent_free(void *agent_data) void mesh_agent_remove(struct mesh_agent *agent) { - if (!l_queue_find(agents, simple_match, agent)) + if (!agent || !l_queue_find(agents, simple_match, agent)) return; agent_free(agent); diff --git a/mesh/mesh.c b/mesh/mesh.c index 8971f7cc4..a1c26e77c 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -345,6 +345,28 @@ static void attach_exit(void *data) l_free(pending); } +static void free_pending_join_call(bool failed) +{ + if (!join_pending) + return; + + if (join_pending->disc_watch) + l_dbus_remove_watch(dbus_get_bus(), + join_pending->disc_watch); + + acceptor_cancel(&mesh); + + mesh_agent_remove(join_pending->agent); + + if (failed) { + storage_remove_node_config(join_pending->node); + node_free(join_pending->node); + } + + l_free(join_pending); + join_pending = NULL; +} + void mesh_cleanup(void) { struct l_dbus_message *reply; @@ -353,19 +375,12 @@ void mesh_cleanup(void) mgmt_unref(mgmt_mesh); if (join_pending) { + /* The Join() call failed since it has not been completed */ reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED, "Failed. Exiting"); l_dbus_send(dbus_get_bus(), reply); - if (join_pending->disc_watch) - l_dbus_remove_watch(dbus_get_bus(), - join_pending->disc_watch); - - if (join_pending->node) - node_free(join_pending->node); - - l_free(join_pending); - join_pending = NULL; + free_pending_join_call(true); } l_queue_destroy(attach_queue, attach_exit); @@ -404,26 +419,6 @@ const char *mesh_status_str(uint8_t err) } } -static void free_pending_join_call(bool failed) -{ - if (!join_pending) - return; - - if (join_pending->disc_watch) - l_dbus_remove_watch(dbus_get_bus(), - join_pending->disc_watch); - - mesh_agent_remove(join_pending->agent); - - if (failed) { - storage_remove_node_config(join_pending->node); - mesh_agent_remove(join_pending->agent); - } - - l_free(join_pending); - join_pending = NULL; -} - /* This is being called if the app exits unexpectedly */ static void prov_disc_cb(struct l_dbus *bus, void *user_data) { @@ -433,8 +428,6 @@ static void prov_disc_cb(struct l_dbus *bus, void *user_data) if (join_pending->msg) l_dbus_message_unref(join_pending->msg); - acceptor_cancel(&mesh); - join_pending->disc_watch = 0; free_pending_join_call(true); @@ -553,9 +546,7 @@ static void node_init_cb(struct mesh_node *node, struct mesh_agent *agent) fail: l_dbus_send(dbus_get_bus(), reply); - mesh_agent_remove(join_pending->agent); - l_free(join_pending); - join_pending = NULL; + free_pending_join_call(true); } static struct l_dbus_message *join_network_call(struct l_dbus *dbus, diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c index baa3c4d30..d983991d4 100644 --- a/mesh/prov-acceptor.c +++ b/mesh/prov-acceptor.c @@ -118,9 +118,10 @@ static struct mesh_prov_acceptor *prov = NULL; static void acceptor_free(void) { + if (!prov) + return; - if (prov) - l_timeout_remove(prov->timeout); + l_timeout_remove(prov->timeout); mesh_send_cancel(bec_filter, sizeof(bec_filter)); mesh_send_cancel(&pkt_filter, sizeof(pkt_filter)); diff --git a/mesh/storage.c b/mesh/storage.c index 57ae88b34..3a6614eb2 100644 --- a/mesh/storage.c +++ b/mesh/storage.c @@ -573,6 +573,9 @@ void storage_remove_node_config(struct mesh_node *node) struct json_object *jnode; const char *dir_name; + if (!node) + return; + jnode = node_jconfig_get(node); if (jnode) json_object_put(jnode); -- 2.17.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call 2019-01-12 2:40 ` [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call Inga Stotland @ 2019-01-14 22:10 ` Gix, Brian 0 siblings, 0 replies; 4+ messages in thread From: Gix, Brian @ 2019-01-14 22:10 UTC (permalink / raw) To: linux-bluetooth, Stotland, Inga Patch Applied On Fri, 2019-01-11 at 18:40 -0800, Inga Stotland wrote: > Consolidate multiple instances where the pending Join data is freed > into calling one function free_pending_join_call(). > > Also, add checks for NULL data in cleanup functions for storage, agent > and provisioning acceptor. > --- > mesh/agent.c | 2 +- > mesh/mesh.c | 59 +++++++++++++++++++------------------------- > mesh/prov-acceptor.c | 5 ++-- > mesh/storage.c | 3 +++ > 4 files changed, 32 insertions(+), 37 deletions(-) > > diff --git a/mesh/agent.c b/mesh/agent.c > index c6ff11802..88ad84d79 100644 > --- a/mesh/agent.c > +++ b/mesh/agent.c > @@ -210,7 +210,7 @@ static void agent_free(void *agent_data) > > void mesh_agent_remove(struct mesh_agent *agent) > { > - if (!l_queue_find(agents, simple_match, agent)) > + if (!agent || !l_queue_find(agents, simple_match, agent)) > return; > > agent_free(agent); > diff --git a/mesh/mesh.c b/mesh/mesh.c > index 8971f7cc4..a1c26e77c 100644 > --- a/mesh/mesh.c > +++ b/mesh/mesh.c > @@ -345,6 +345,28 @@ static void attach_exit(void *data) > l_free(pending); > } > > +static void free_pending_join_call(bool failed) > +{ > + if (!join_pending) > + return; > + > + if (join_pending->disc_watch) > + l_dbus_remove_watch(dbus_get_bus(), > + join_pending->disc_watch); > + > + acceptor_cancel(&mesh); > + > + mesh_agent_remove(join_pending->agent); > + > + if (failed) { > + storage_remove_node_config(join_pending->node); > + node_free(join_pending->node); > + } > + > + l_free(join_pending); > + join_pending = NULL; > +} > + > void mesh_cleanup(void) > { > struct l_dbus_message *reply; > @@ -353,19 +375,12 @@ void mesh_cleanup(void) > mgmt_unref(mgmt_mesh); > > if (join_pending) { > + /* The Join() call failed since it has not been completed */ > reply = dbus_error(join_pending->msg, MESH_ERROR_FAILED, > "Failed. Exiting"); > l_dbus_send(dbus_get_bus(), reply); > > - if (join_pending->disc_watch) > - l_dbus_remove_watch(dbus_get_bus(), > - join_pending->disc_watch); > - > - if (join_pending->node) > - node_free(join_pending->node); > - > - l_free(join_pending); > - join_pending = NULL; > + free_pending_join_call(true); > } > > l_queue_destroy(attach_queue, attach_exit); > @@ -404,26 +419,6 @@ const char *mesh_status_str(uint8_t err) > } > } > > -static void free_pending_join_call(bool failed) > -{ > - if (!join_pending) > - return; > - > - if (join_pending->disc_watch) > - l_dbus_remove_watch(dbus_get_bus(), > - join_pending->disc_watch); > - > - mesh_agent_remove(join_pending->agent); > - > - if (failed) { > - storage_remove_node_config(join_pending->node); > - mesh_agent_remove(join_pending->agent); > - } > - > - l_free(join_pending); > - join_pending = NULL; > -} > - > /* This is being called if the app exits unexpectedly */ > static void prov_disc_cb(struct l_dbus *bus, void *user_data) > { > @@ -433,8 +428,6 @@ static void prov_disc_cb(struct l_dbus *bus, void *user_data) > if (join_pending->msg) > l_dbus_message_unref(join_pending->msg); > > - acceptor_cancel(&mesh); > - > join_pending->disc_watch = 0; > > free_pending_join_call(true); > @@ -553,9 +546,7 @@ static void node_init_cb(struct mesh_node *node, struct mesh_agent *agent) > > fail: > l_dbus_send(dbus_get_bus(), reply); > - mesh_agent_remove(join_pending->agent); > - l_free(join_pending); > - join_pending = NULL; > + free_pending_join_call(true); > } > > static struct l_dbus_message *join_network_call(struct l_dbus *dbus, > diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c > index baa3c4d30..d983991d4 100644 > --- a/mesh/prov-acceptor.c > +++ b/mesh/prov-acceptor.c > @@ -118,9 +118,10 @@ static struct mesh_prov_acceptor *prov = NULL; > > static void acceptor_free(void) > { > + if (!prov) > + return; > > - if (prov) > - l_timeout_remove(prov->timeout); > + l_timeout_remove(prov->timeout); > > mesh_send_cancel(bec_filter, sizeof(bec_filter)); > mesh_send_cancel(&pkt_filter, sizeof(pkt_filter)); > diff --git a/mesh/storage.c b/mesh/storage.c > index 57ae88b34..3a6614eb2 100644 > --- a/mesh/storage.c > +++ b/mesh/storage.c > @@ -573,6 +573,9 @@ void storage_remove_node_config(struct mesh_node *node) > struct json_object *jnode; > const char *dir_name; > > + if (!node) > + return; > + > jnode = node_jconfig_get(node); > if (jnode) > json_object_put(jnode); ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call 2019-01-12 2:40 [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Inga Stotland 2019-01-12 2:40 ` [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call Inga Stotland @ 2019-01-14 22:10 ` Gix, Brian 1 sibling, 0 replies; 4+ messages in thread From: Gix, Brian @ 2019-01-14 22:10 UTC (permalink / raw) To: linux-bluetooth, Stotland, Inga Patch Applied On Fri, 2019-01-11 at 18:40 -0800, Inga Stotland wrote: > Supply correct parameters to l_dbus_message_iter_get_fixed_array > to get the location from where to read UUID value. > --- > mesh/mesh.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/mesh/mesh.c b/mesh/mesh.c > index 169e6f42c..8971f7cc4 100644 > --- a/mesh/mesh.c > +++ b/mesh/mesh.c > @@ -564,6 +564,7 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, > { > const char *app_path, *sender; > struct l_dbus_message_iter iter_uuid; > + uint8_t *uuid; > uint32_t n; > > l_debug("Join network request"); > @@ -578,7 +579,7 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, > > join_pending = l_new(struct join_data, 1); > > - l_dbus_message_iter_get_fixed_array(&iter_uuid, join_pending->uuid, &n); > + l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n); > > if (n != 16) { > l_free(join_pending); > @@ -587,6 +588,8 @@ static struct l_dbus_message *join_network_call(struct l_dbus *dbus, > "Bad device UUID"); > } > > + memcpy(join_pending->uuid, uuid, 16); > + > sender = l_dbus_message_get_sender(msg); > > join_pending->sender = l_strdup(sender); ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-01-14 22:10 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-01-12 2:40 [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Inga Stotland 2019-01-12 2:40 ` [PATCH BlueZ 2/2] mesh: Clean up when finishing the Join call Inga Stotland 2019-01-14 22:10 ` Gix, Brian 2019-01-14 22:10 ` [PATCH BlueZ 1/2] mesh: Fix reading device UUID from Join() call Gix, Brian
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).