From 47d41ad62c5d6008e72d2e9c137cf8f49ca86353 Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Mon, 17 Feb 2020 09:13:26 -0500 Subject: misc: fix coverity warnings Add an ALWAYS_ASSERT (...) macro, to (a) shut up coverity, and (b) check the indicated condition in production images. As in: p = hash_get(...); ALWAYS_ASSERT(p) /* was ASSERT(p) */ elt = pool_elt_at_index(pool, p[0]); This may not be the best way to handle a specific case, but failure to check return values at all followed by e.g. a pointer dereference isn't ok. Type: fix Ticket: VPP-1837 Signed-off-by: Dave Barach Change-Id: Ia97c641cefcfb7ea7d77ea5a55ed4afea0345acb --- src/vppinfra/error_bootstrap.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/vppinfra') diff --git a/src/vppinfra/error_bootstrap.h b/src/vppinfra/error_bootstrap.h index 1cd91058574..8dbbc7f359d 100644 --- a/src/vppinfra/error_bootstrap.h +++ b/src/vppinfra/error_bootstrap.h @@ -79,6 +79,35 @@ do { \ } \ } while (0) +/* + * This version always generates code, and has a Coverity-specific + * version to stop Coverity complaining about + * ALWAYS_ASSERT(p != 0); p->member... + */ + +#ifndef __COVERITY__ +#define ALWAYS_ASSERT(truth) \ +do { \ + if (PREDICT_FALSE(!(truth))) \ + { \ + _clib_error (CLIB_ERROR_ABORT, 0, 0, \ + "%s:%d (%s) assertion `%s' fails", \ + __FILE__, \ + (uword) __LINE__, \ + clib_error_function, \ + # truth); \ + } \ +} while (0) +#else /* __COVERITY__ */ +#define ALWAYS_ASSERT(truth) \ +do { \ + if (PREDICT_FALSE(!(truth))) \ + { \ + abort(); \ + } \ +} while (0) +#endif /* __COVERITY */ + #if defined(__clang__) #define STATIC_ASSERT(truth,...) #else -- cgit 1.2.3-korg