On Wed, Nov 08, 2023 at 07:24:24PM +0100, Thomas Haller wrote: > libnftables kills the process on out of memory (xmalloc()), so > when we use libraries that propagate ENOMEM to libnftables, we > also abort the process. > > For example: > > nlr = nftnl_rule_alloc(); > if (!nlr) > memory_allocation_error(); > > Add memory_allocation_check() macro which can simplify this common > check to: > > nlr = memory_allocation_check(nftnl_rule_alloc()); > > Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> > --- > include/utils.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/include/utils.h b/include/utils.h > index 36a28f893667..fcd7c598fe9f 100644 > --- a/include/utils.h > +++ b/include/utils.h > @@ -142,6 +142,16 @@ extern void __memory_allocation_error(const char *filename, uint32_t line) __nor > #define memory_allocation_error() \ > __memory_allocation_error(__FILE__, __LINE__); > > +#define memory_allocation_check(cmd) \ > + ({ \ > + typeof((cmd)) _v = (cmd); \ > + const void *const _v2 = _v; \ > + \ > + if (!_v2) \ please don't hide a if branch inside a macro. > + memory_allocation_error(); \ > + _v; \ > + }) > + > extern void xfree(const void *ptr); > extern void *xmalloc(size_t size); > extern void *xmalloc_array(size_t nmemb, size_t size); > -- > 2.41.0 >