summaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
authorJohn Lo <loj@cisco.com>2018-07-04 16:27:59 -0400
committerDave Barach <openvpp@barachs.net>2018-07-04 23:53:48 +0000
commitef8db3679746792403589fb54fa0bbb9e13245dd (patch)
tree662c19509daa5a27d10f5cb53e372baab18f6b1d /src/vppinfra
parent64526229981143019ab81133c0b4fad9ab618ac9 (diff)
Fix clib_bitmap_next_clear() function when no clear bits left
If the bitmap has no bit clear after the input bit position i, the function will return i even if its bit is set. Fix is to return the next bit just beyond the free bitmap. This can cause IP neighbor scan crash in ip_neighbor_scan() with a debug image. With production image, ip_neighbor_scan() may still function, AFAICT, with extra neighbor delete attempts for entries already deleted, until these entries are reused for new neighbors. Change-Id: If6422ef6f63908ea39651de4ccbd8cb0b294bd69 Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src/vppinfra')
-rw-r--r--src/vppinfra/bitmap.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/vppinfra/bitmap.h b/src/vppinfra/bitmap.h
index d6dfe86da0b..0e94d028ee3 100644
--- a/src/vppinfra/bitmap.h
+++ b/src/vppinfra/bitmap.h
@@ -728,6 +728,9 @@ clib_bitmap_next_clear (uword * ai, uword i)
if (t)
return log2_first_set (t) + i0 * BITS (ai[0]);
}
+
+ /* no clear bit left in bitmap, return bit just beyond bitmap */
+ return (i0 + 1) * BITS (ai[0]);
}
return i;
}