From 1627a4286479f43763bc17bbf5d7eb830aec4f67 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Thu, 14 Feb 2019 11:33:39 -0800 Subject: [PATCH] [mpl] fix bug in comparing sequence numbers (#3588) Fix serial number arithmetic due to value wrap. --- src/core/net/ip6_mpl.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/net/ip6_mpl.cpp b/src/core/net/ip6_mpl.cpp index b4ee3b39c..ec47f449c 100644 --- a/src/core/net/ip6_mpl.cpp +++ b/src/core/net/ip6_mpl.cpp @@ -158,12 +158,14 @@ otError Mpl::UpdateSeedSet(uint16_t aSeedId, uint8_t aSequence) { // have existing entries for aSeedId - if (aSequence == mSeedSet[i].GetSequence()) + int8_t diff = static_cast(aSequence - mSeedSet[i].GetSequence()); + + if (diff == 0) { // already received, drop message ExitNow(error = OT_ERROR_DROP); } - else if (insert == NULL && aSequence < mSeedSet[i].GetSequence()) + else if (insert == NULL && diff < 0) { // insert in order of sequence insert = &mSeedSet[i];