From: Jakub Witowski <jakub.witowski@xxxxxxxxxxx> 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