From f63780e37b6f220308be6eacea9bae05ca9d27c5 Mon Sep 17 00:00:00 2001 From: Jakub Witowski Date: Fri, 24 May 2019 07:48:10 -0700 Subject: [PATCH] mesh: Fix long MIC usage in segmented messages Contrary to the comment, implementation used a 8-byte MIC even if this generated an additional segment. Change-Id: I7e718efbe401a3312871f2a4567050dc1805a508 Signed-off-by: Anupam Roy --- mesh/model.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mesh/model.c b/mesh/model.c index 034d544..90bb62d 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.7.4