diff mbox

[nft,2/4] netlink_delinearize: fix bogus offset w exthdr expressions

Message ID 1457478588-12592-2-git-send-email-fw@strlen.de
State Accepted
Delegated to: Pablo Neira
Headers show

Commit Message

Florian Westphal March 8, 2016, 11:09 p.m. UTC
Need to fetch the offset from the exthdr template.

Signed-off-by: Florian Westphal <fw@strlen.de>
---
 src/netlink_linearize.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
index 07f70e0..49b4676 100644
--- a/src/netlink_linearize.c
+++ b/src/netlink_linearize.c
@@ -320,19 +320,24 @@  static void netlink_gen_range(struct netlink_linearize_ctx *ctx,
 
 static void payload_shift_value(const struct expr *left, struct expr *right)
 {
+	unsigned int offset;
+
 	if (right->ops->type != EXPR_VALUE)
 		return;
 
 	switch (left->ops->type) {
 	case EXPR_PAYLOAD:
+		offset = left->payload.offset;
+		break;
 	case EXPR_EXTHDR:
+		offset = left->exthdr.tmpl->offset;
 		break;
 	default:
 		return;
 	}
 
 	mpz_lshift_ui(right->value,
-			payload_shift_calc(left, left->payload.offset));
+			payload_shift_calc(left, offset));
 }
 
 static struct expr *netlink_gen_prefix(struct netlink_linearize_ctx *ctx,