From 4670214c268f0d4f1804935c61dad21bf6d91f97 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 18 Jul 2018 14:25:51 +0300 Subject: [PATCH] net: gptp: Fix unsigned value comparison The nanosecond check was using <0 for unsigned value. Coverity-CID: 187080 Fixes #8987 Signed-off-by: Jukka Rissanen --- subsys/net/l2/ethernet/gptp/gptp_mi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/subsys/net/l2/ethernet/gptp/gptp_mi.c b/subsys/net/l2/ethernet/gptp/gptp_mi.c index 525011851bffef..30395de5d47768 100644 --- a/subsys/net/l2/ethernet/gptp/gptp_mi.c +++ b/subsys/net/l2/ethernet/gptp/gptp_mi.c @@ -707,11 +707,21 @@ static void gptp_update_local_port_clock(void) if (second_diff || (second_diff == 0 && (nanosecond_diff < -5000 || nanosecond_diff > 5000))) { + bool underflow = false; + key = irq_lock(); ptp_clock_get(clk, &tm); + tm.second += second_diff; + + if (nanosecond_diff < 0 && + tm.nanosecond < -nanosecond_diff) { + underflow = true; + } + tm.nanosecond += nanosecond_diff; - if (tm.nanosecond < 0) { + + if (underflow) { tm.second--; tm.nanosecond += NSEC_PER_SEC; } else if (tm.nanosecond >= NSEC_PER_SEC) {