All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH BlueZ] mesh: validate configuration target
@ 2017-11-21  7:08 Inga Stotland
  2017-11-23 10:19 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 2+ messages in thread
From: Inga Stotland @ 2017-11-21  7:08 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Inga Stotland

Require obtaining node composition prior to sending configuration
commands that assume knowledge about the node's element/model layout.
---
 mesh/config-client.c | 31 +++++++++++++++++++++++++------
 1 file changed, 25 insertions(+), 6 deletions(-)

diff --git a/mesh/config-client.c b/mesh/config-client.c
index d80f784e6..782781602 100644
--- a/mesh/config-client.c
+++ b/mesh/config-client.c
@@ -461,16 +461,37 @@ static void cmd_del_app_key(const char *args)
 	cmd_app_key(args, OP_APPKEY_DELETE);
 }
 
+static bool verify_config_target(uint32_t dst)
+{
+	struct mesh_node *node;
+
+	if (IS_UNASSIGNED(dst)) {
+		rl_printf("Destination not set\n");
+		return false;
+	}
+
+	node = node_find_by_addr(dst);
+	if (!node) {
+		rl_printf("Node with unicast address %4.4x unknown\n", dst);
+		return false;
+	}
+
+	if (!node_get_composition(node)) {
+		rl_printf("Node composition for %4.4x unknown\n", dst);
+		return false;
+	}
+
+	return true;
+}
+
 static void cmd_bind(const char *args)
 {
 	uint16_t n;
 	uint8_t msg[32];
 	int parm_cnt;
 
-	if (IS_UNASSIGNED(target)) {
-		rl_printf("Destination not set\n");
+	if (!verify_config_target(target))
 		return;
-	}
 
 	parm_cnt = read_input_parameters(args);
 	if (parm_cnt != 3 && parm_cnt != 4) {
@@ -529,10 +550,8 @@ static void cmd_set_pub(const char *args)
 	uint8_t msg[32];
 	int parm_cnt;
 
-	if (IS_UNASSIGNED(target)) {
-		rl_printf("Destination not set\n");
+	if (!verify_config_target(target))
 		return;
-	}
 
 	n = mesh_opcode_set(OP_CONFIG_MODEL_PUB_SET, msg);
 
-- 
2.13.6


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH BlueZ] mesh: validate configuration target
  2017-11-21  7:08 [PATCH BlueZ] mesh: validate configuration target Inga Stotland
@ 2017-11-23 10:19 ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 2+ messages in thread
From: Luiz Augusto von Dentz @ 2017-11-23 10:19 UTC (permalink / raw)
  To: Inga Stotland; +Cc: linux-bluetooth

Hi Inga,

On Tue, Nov 21, 2017 at 9:08 AM, Inga Stotland <inga.stotland@intel.com> wrote:
> Require obtaining node composition prior to sending configuration
> commands that assume knowledge about the node's element/model layout.
> ---
>  mesh/config-client.c | 31 +++++++++++++++++++++++++------
>  1 file changed, 25 insertions(+), 6 deletions(-)
>
> diff --git a/mesh/config-client.c b/mesh/config-client.c
> index d80f784e6..782781602 100644
> --- a/mesh/config-client.c
> +++ b/mesh/config-client.c
> @@ -461,16 +461,37 @@ static void cmd_del_app_key(const char *args)
>         cmd_app_key(args, OP_APPKEY_DELETE);
>  }
>
> +static bool verify_config_target(uint32_t dst)
> +{
> +       struct mesh_node *node;
> +
> +       if (IS_UNASSIGNED(dst)) {
> +               rl_printf("Destination not set\n");
> +               return false;
> +       }
> +
> +       node = node_find_by_addr(dst);
> +       if (!node) {
> +               rl_printf("Node with unicast address %4.4x unknown\n", dst);
> +               return false;
> +       }
> +
> +       if (!node_get_composition(node)) {
> +               rl_printf("Node composition for %4.4x unknown\n", dst);
> +               return false;
> +       }
> +
> +       return true;
> +}
> +
>  static void cmd_bind(const char *args)
>  {
>         uint16_t n;
>         uint8_t msg[32];
>         int parm_cnt;
>
> -       if (IS_UNASSIGNED(target)) {
> -               rl_printf("Destination not set\n");
> +       if (!verify_config_target(target))
>                 return;
> -       }
>
>         parm_cnt = read_input_parameters(args);
>         if (parm_cnt != 3 && parm_cnt != 4) {
> @@ -529,10 +550,8 @@ static void cmd_set_pub(const char *args)
>         uint8_t msg[32];
>         int parm_cnt;
>
> -       if (IS_UNASSIGNED(target)) {
> -               rl_printf("Destination not set\n");
> +       if (!verify_config_target(target))
>                 return;
> -       }
>
>         n = mesh_opcode_set(OP_CONFIG_MODEL_PUB_SET, msg);
>
> --
> 2.13.6

Applied, thanks.

-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-11-23 10:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-21  7:08 [PATCH BlueZ] mesh: validate configuration target Inga Stotland
2017-11-23 10:19 ` Luiz Augusto von Dentz

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.