Calling netlink_dump_expr() with a NULL pointer leads to segfault within libnftnl. Internal ("fake") locations such as 'netlink_location' don't have an expression assigned so expect this and skip the call. Simple reproducer (list ruleset with netlink debugging as non-root): | $ nft -d netlink list ruleset Reported-by: François Rigault <frigo@xxxxxxxxxxx> Signed-off-by: Phil Sutter <phil@xxxxxx> --- src/erec.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/erec.c b/src/erec.c index a4b93fb0d0d61..aebb8632583a1 100644 --- a/src/erec.c +++ b/src/erec.c @@ -170,6 +170,8 @@ void erec_print(struct output_ctx *octx, const struct error_record *erec, fprintf(f, "%s\n", erec->msg); for (l = 0; l < (int)erec->num_locations; l++) { loc = &erec->locations[l]; + if (!loc->nle) + continue; netlink_dump_expr(loc->nle, f, debug_mask); } return; -- 2.34.1