From 792757fb2731eaf3d1781ca3be7551226c829241 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Sat, 27 Jul 2024 15:13:21 +0200 Subject: [PATCH] netfilter_nft: Fixes parse_rule_nat() the port for NAT destination is passed in REG2 should fix #768 --- miniupnpd/netfilter_nft/nftnlrdr_misc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/miniupnpd/netfilter_nft/nftnlrdr_misc.c b/miniupnpd/netfilter_nft/nftnlrdr_misc.c index 40a71c5..ddc4137 100644 --- a/miniupnpd/netfilter_nft/nftnlrdr_misc.c +++ b/miniupnpd/netfilter_nft/nftnlrdr_misc.c @@ -283,6 +283,9 @@ parse_rule_nat(struct nftnl_expr *e, rule_t *r) r->family = nftnl_expr_get_u32(e, NFTNL_EXPR_NAT_FAMILY); addr_min_reg = nftnl_expr_get_u32(e, NFTNL_EXPR_NAT_REG_ADDR_MIN); addr_max_reg = nftnl_expr_get_u32(e, NFTNL_EXPR_NAT_REG_ADDR_MAX); + /* see expr_add_nat() : + * NFTNL_EXPR_NAT_REG_PROTO_MIN/NFTNL_EXPR_NAT_REG_PROTO_MAX is used + * for destination port */ proto_min_reg = nftnl_expr_get_u32(e, NFTNL_EXPR_NAT_REG_PROTO_MIN); proto_max_reg = nftnl_expr_get_u32(e, NFTNL_EXPR_NAT_REG_PROTO_MAX); @@ -300,10 +303,10 @@ parse_rule_nat(struct nftnl_expr *e, rule_t *r) } reg_val_ptr = get_reg_val_ptr(r, addr_min_reg); if (reg_val_ptr != NULL) { + /* destination address */ r->nat_addr = (in_addr_t)*reg_val_ptr; - if (proto_min_reg == NFT_REG_1) { - r->nat_port = proto_min_val; - } + /* destination port */ + r->nat_port = proto_min_val; } else { syslog(LOG_ERR, "%s: invalid addr_min_reg %u", "parse_rule_nat", addr_min_reg); }