2020-08-21 05:50:19

by Stotland, Inga

[permalink] [raw]
Subject: [PATCH BlueZ] mesh: Use valid net key index when handling Send call

Retrieve value of bound Net Key index based on the value of
passed AppKey index. Check if the key is present and fail early
in case of error. Also, pass the correct NetKey index to model
layer in mesh_model_send(), instead of hard coded 0.
---
mesh/model.c | 2 --
mesh/node.c | 13 +++++++++----
2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/mesh/model.c b/mesh/model.c
index eb5142503..7e1c4ab92 100644
--- a/mesh/model.c
+++ b/mesh/model.c
@@ -547,8 +547,6 @@ static bool msg_send(struct mesh_node *node, bool cred, uint16_t src,
l_debug("no app key for (%x)", app_idx);
return false;
}
-
- net_idx = appkey_net_idx(node_get_net(node), app_idx);
}

out = l_malloc(out_len);
diff --git a/mesh/node.c b/mesh/node.c
index 1eeffeb8b..ed3d959c5 100644
--- a/mesh/node.c
+++ b/mesh/node.c
@@ -1761,7 +1761,7 @@ static struct l_dbus_message *send_call(struct l_dbus *dbus,
const char *sender, *ele_path;
struct l_dbus_message_iter iter_data;
struct node_element *ele;
- uint16_t dst, app_idx, src;
+ uint16_t dst, app_idx, net_idx, src;
uint8_t *data;
uint32_t len;

@@ -1790,10 +1790,15 @@ static struct l_dbus_message *send_call(struct l_dbus *dbus,

if (app_idx & ~APP_IDX_MASK)
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
- "Invalid key_index");
+ "Invalid key index");
+
+ net_idx = appkey_net_idx(node_get_net(node), app_idx);
+ if (net_idx == NET_IDX_INVALID)
+ return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
+ "Key not found");

- if (!mesh_model_send(node, src, dst, app_idx, 0, DEFAULT_TTL, false,
- data, len))
+ if (!mesh_model_send(node, src, dst, app_idx, net_idx, DEFAULT_TTL,
+ false, data, len))
return dbus_error(msg, MESH_ERROR_FAILED, NULL);

return l_dbus_message_new_method_return(msg);
--
2.26.2


2020-08-22 14:23:23

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Use valid net key index when handling Send call

Applied
On Thu, 2020-08-20 at 22:48 -0700, Inga Stotland wrote:
> Retrieve value of bound Net Key index based on the value of
> passed AppKey index. Check if the key is present and fail early
> in case of error. Also, pass the correct NetKey index to model
> layer in mesh_model_send(), instead of hard coded 0.
> ---
> mesh/model.c | 2 --
> mesh/node.c | 13 +++++++++----
> 2 files changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/mesh/model.c b/mesh/model.c
> index eb5142503..7e1c4ab92 100644
> --- a/mesh/model.c
> +++ b/mesh/model.c
> @@ -547,8 +547,6 @@ static bool msg_send(struct mesh_node *node, bool cred, uint16_t src,
> l_debug("no app key for (%x)", app_idx);
> return false;
> }
> -
> - net_idx = appkey_net_idx(node_get_net(node), app_idx);
> }
>
> out = l_malloc(out_len);
> diff --git a/mesh/node.c b/mesh/node.c
> index 1eeffeb8b..ed3d959c5 100644
> --- a/mesh/node.c
> +++ b/mesh/node.c
> @@ -1761,7 +1761,7 @@ static struct l_dbus_message *send_call(struct l_dbus *dbus,
> const char *sender, *ele_path;
> struct l_dbus_message_iter iter_data;
> struct node_element *ele;
> - uint16_t dst, app_idx, src;
> + uint16_t dst, app_idx, net_idx, src;
> uint8_t *data;
> uint32_t len;
>
> @@ -1790,10 +1790,15 @@ static struct l_dbus_message *send_call(struct l_dbus *dbus,
>
> if (app_idx & ~APP_IDX_MASK)
> return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
> - "Invalid key_index");
> + "Invalid key index");
> +
> + net_idx = appkey_net_idx(node_get_net(node), app_idx);
> + if (net_idx == NET_IDX_INVALID)
> + return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
> + "Key not found");
>
> - if (!mesh_model_send(node, src, dst, app_idx, 0, DEFAULT_TTL, false,
> - data, len))
> + if (!mesh_model_send(node, src, dst, app_idx, net_idx, DEFAULT_TTL,
> + false, data, len))
> return dbus_error(msg, MESH_ERROR_FAILED, NULL);
>
> return l_dbus_message_new_method_return(msg);