All of lore.kernel.org
 help / color / mirror / Atom feed
* [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@vger.kernel.org, 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@vger.kernel.org, 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.