2019-05-23 17:54:14

by Gix, Brian

[permalink] [raw]
Subject: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

From: Jakub Witowski <[email protected]>

Contrary to the comment, implementation used a 8-byte MIC even if this
generated an additional segment.
---
mesh/model.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/mesh/model.c b/mesh/model.c
index 034d54496..90bb62db8 100644
--- a/mesh/model.c
+++ b/mesh/model.c
@@ -40,6 +40,9 @@
#include "mesh/util.h"
#include "mesh/model.h"

+/* Divide and round to ceiling (up) to calculate segment count */
+#define CEILDIV(val, div) (((val) + (div) - 1) / (div))
+
struct mesh_model {
const struct mesh_model_ops *cbs;
void *user_data;
@@ -451,7 +454,7 @@ static bool msg_send(struct mesh_node *node, bool credential, uint16_t src,

/* Use large MIC if it doesn't affect segmentation */
if (msg_len > 11 && msg_len <= 376) {
- if ((out_len / 12) == ((out_len + 4) / 12)) {
+ if (CEILDIV(out_len, 12) == CEILDIV(out_len + 4, 12)) {
szmic = true;
out_len = msg_len + sizeof(uint64_t);
}
--
2.14.5


2019-05-23 17:59:39

by Gix, Brian

[permalink] [raw]
Subject: RE: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

Hi Jakub and Michal,

If you have no objections, this will be the version of the Long MIC patch I will be applying.

> -----Original Message-----
> From: Gix, Brian
> Sent: Thursday, May 23, 2019 10:53 AM
> To: [email protected]
> Cc: Stotland, Inga <[email protected]>; Gix, Brian
> <[email protected]>; [email protected]; michal.lowas-
> [email protected]
> Subject: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages
>
> From: Jakub Witowski <[email protected]>
>
> Contrary to the comment, implementation used a 8-byte MIC even if this
> generated an additional segment.
> ---
> mesh/model.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/mesh/model.c b/mesh/model.c index 034d54496..90bb62db8
> 100644
> --- a/mesh/model.c
> +++ b/mesh/model.c
> @@ -40,6 +40,9 @@
> #include "mesh/util.h"
> #include "mesh/model.h"
>
> +/* Divide and round to ceiling (up) to calculate segment count */
> +#define CEILDIV(val, div) (((val) + (div) - 1) / (div))
> +
> struct mesh_model {
> const struct mesh_model_ops *cbs;
> void *user_data;
> @@ -451,7 +454,7 @@ static bool msg_send(struct mesh_node *node, bool
> credential, uint16_t src,
>
> /* Use large MIC if it doesn't affect segmentation */
> if (msg_len > 11 && msg_len <= 376) {
> - if ((out_len / 12) == ((out_len + 4) / 12)) {
> + if (CEILDIV(out_len, 12) == CEILDIV(out_len + 4, 12)) {
> szmic = true;
> out_len = msg_len + sizeof(uint64_t);
> }
> --
> 2.14.5

2019-05-24 15:07:27

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

Patch Applied

On Thu, 2019-05-23 at 10:53 -0700, Brian Gix wrote:
> From: Jakub Witowski <[email protected]>
>
> Contrary to the comment, implementation used a 8-byte MIC even if this
> generated an additional segment.
> ---
> mesh/model.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/mesh/model.c b/mesh/model.c
> index 034d54496..90bb62db8 100644
> --- a/mesh/model.c
> +++ b/mesh/model.c
> @@ -40,6 +40,9 @@
> #include "mesh/util.h"
> #include "mesh/model.h"
>
> +/* Divide and round to ceiling (up) to calculate segment count */
> +#define CEILDIV(val, div) (((val) + (div) - 1) / (div))
> +
> struct mesh_model {
> const struct mesh_model_ops *cbs;
> void *user_data;
> @@ -451,7 +454,7 @@ static bool msg_send(struct mesh_node *node, bool credential, uint16_t src,
>
> /* Use large MIC if it doesn't affect segmentation */
> if (msg_len > 11 && msg_len <= 376) {
> - if ((out_len / 12) == ((out_len + 4) / 12)) {
> + if (CEILDIV(out_len, 12) == CEILDIV(out_len + 4, 12)) {
> szmic = true;
> out_len = msg_len + sizeof(uint64_t);
> }

2019-05-27 06:56:41

by Michał Lowas-Rzechonek

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

Hi Brian,

On 05/24, Gix, Brian wrote:
> Patch Applied

Sorry for radio silence, I was away for last two weeks.

Thank you!

--
Michał Lowas-Rzechonek <[email protected]>
Silvair http://silvair.com
Jasnogórska 44, 31-358 Krakow, POLAND

2019-05-27 18:15:12

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

Hi Jakub and Michal,

If you guys are OK with this, this is the version of the patch on long MICs and segment count I will be
applying.

On Thu, 2019-05-23 at 10:53 -0700, Brian Gix wrote:
> From: Jakub Witowski <[email protected]>
>
> Contrary to the comment, implementation used a 8-byte MIC even if this
> generated an additional segment.
> ---
> mesh/model.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/mesh/model.c b/mesh/model.c
> index 034d54496..90bb62db8 100644
> --- a/mesh/model.c
> +++ b/mesh/model.c
> @@ -40,6 +40,9 @@
> #include "mesh/util.h"
> #include "mesh/model.h"
>
> +/* Divide and round to ceiling (up) to calculate segment count */
> +#define CEILDIV(val, div) (((val) + (div) - 1) / (div))
> +
> struct mesh_model {
> const struct mesh_model_ops *cbs;
> void *user_data;
> @@ -451,7 +454,7 @@ static bool msg_send(struct mesh_node *node, bool credential, uint16_t src,
>
> /* Use large MIC if it doesn't affect segmentation */
> if (msg_len > 11 && msg_len <= 376) {
> - if ((out_len / 12) == ((out_len + 4) / 12)) {
> + if (CEILDIV(out_len, 12) == CEILDIV(out_len + 4, 12)) {
> szmic = true;
> out_len = msg_len + sizeof(uint64_t);
> }

2019-05-28 07:29:38

by Michał Lowas-Rzechonek

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: Fix long MIC usage in segmented messages

Yes, it's fine.

--
Michał Lowas-Rzechonek
Lambda Team Leader

Silvair
Jasnogórska 44
31-358 Krakow
POLAND

http://www.silvair.com

pon., 27 maj 2019 o 20:14 Gix, Brian <[email protected]> napisał(a):
>
> Hi Jakub and Michal,
>
> If you guys are OK with this, this is the version of the patch on long MICs and segment count I will be
> applying.
>
> On Thu, 2019-05-23 at 10:53 -0700, Brian Gix wrote:
> > From: Jakub Witowski <[email protected]>
> >
> > Contrary to the comment, implementation used a 8-byte MIC even if this
> > generated an additional segment.
> > ---
> > mesh/model.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/mesh/model.c b/mesh/model.c
> > index 034d54496..90bb62db8 100644
> > --- a/mesh/model.c
> > +++ b/mesh/model.c
> > @@ -40,6 +40,9 @@
> > #include "mesh/util.h"
> > #include "mesh/model.h"
> >
> > +/* Divide and round to ceiling (up) to calculate segment count */
> > +#define CEILDIV(val, div) (((val) + (div) - 1) / (div))
> > +
> > struct mesh_model {
> > const struct mesh_model_ops *cbs;
> > void *user_data;
> > @@ -451,7 +454,7 @@ static bool msg_send(struct mesh_node *node, bool credential, uint16_t src,
> >
> > /* Use large MIC if it doesn't affect segmentation */
> > if (msg_len > 11 && msg_len <= 376) {
> > - if ((out_len / 12) == ((out_len + 4) / 12)) {
> > + if (CEILDIV(out_len, 12) == CEILDIV(out_len + 4, 12)) {
> > szmic = true;
> > out_len = msg_len + sizeof(uint64_t);
> > }