38 lines
1.1 KiB
Diff
38 lines
1.1 KiB
Diff
From 5472143922531e0f7ea2770b302903f5002472df Mon Sep 17 00:00:00 2001
|
|
From: Phil Sutter <phil@nwl.cc>
|
|
Date: Tue, 30 Aug 2022 15:00:52 +0200
|
|
Subject: erec: Dump locations' expressions only if set
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
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@amadeus.com>
|
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
|
---
|
|
src/erec.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/src/erec.c b/src/erec.c
|
|
index a4b93fb0..aebb8632 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;
|
|
--
|
|
cgit v1.2.3
|
|
|