summaryrefslogtreecommitdiffstats
path: root/src/expression.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2021-12-03 17:07:55 +0100
committerFlorian Westphal <fw@strlen.de>2021-12-07 12:23:22 +0100
commit48aca2de80a7dd73f8f3a461c7f7ed47b6082766 (patch)
tree3ab36458bdef07e5d8c78ad364b77c21ffaad123 /src/expression.c
parent028856b3dd8c935bc53ff08434dce4728627a318 (diff)
iptopt: fix crash with invalid field/type combo
% nft describe ip option rr value segmentation fault after this fix, this exits with 'Error: unknown ip option type/field'. Problem is that 'rr' doesn't have a value template, so the template struct is all-zeroes, so we crash when trying to use tmpl->dtype (its NULL). Furthermore, expr_describe tries to print expr->identifier but expr is exthdr, not symbol: ->identifier contains garbage. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/expression.c')
-rw-r--r--src/expression.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/expression.c b/src/expression.c
index 4c0874fe..f1cca884 100644
--- a/src/expression.c
+++ b/src/expression.c
@@ -135,12 +135,12 @@ void expr_describe(const struct expr *expr, struct output_ctx *octx)
nft_print(octx, "datatype %s (%s)",
dtype->name, dtype->desc);
len = dtype->size;
- } else if (dtype != &invalid_type) {
+ } else {
nft_print(octx, "%s expression, datatype %s (%s)",
expr_name(expr), dtype->name, dtype->desc);
- } else {
- nft_print(octx, "datatype %s is invalid\n", expr->identifier);
- return;
+
+ if (dtype == &invalid_type)
+ return;
}
if (dtype->basetype != NULL) {