diff mbox series

[nft] src: Check range bounds before converting to prefix

Message ID 20210906030641.10958-1-shaw.leon@gmail.com
State Accepted
Delegated to: Pablo Neira
Headers show
Series [nft] src: Check range bounds before converting to prefix | expand

Commit Message

Xiao Liang Sept. 6, 2021, 3:06 a.m. UTC
The lower bound must be the first value of the prefix to be coverted.
For example, range "10.0.0.15-10.0.0.240" can not be converted to
"10.0.0.15/24". Validate it by checking if the lower bound value has
enough trailing zeros.

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
---
 src/netlink.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

Comments

Pablo Neira Ayuso Sept. 6, 2021, 9:13 a.m. UTC | #1
Hi,

On Mon, Sep 06, 2021 at 11:06:41AM +0800, Xiao Liang wrote:
> The lower bound must be the first value of the prefix to be coverted.
> For example, range "10.0.0.15-10.0.0.240" can not be converted to
> "10.0.0.15/24". Validate it by checking if the lower bound value has
> enough trailing zeros.

# nft add rule x y ip saddr 10.0.0.15-10.0.0.240
# nft list ruleset
...
        ip saddr 10.0.0.15-10.0.0.240

Is a different range that triggers the problem?
Xiao Liang Sept. 6, 2021, 12:57 p.m. UTC | #2
On Mon, Sep 6, 2021 at 5:13 PM Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> Hi,
>
> On Mon, Sep 06, 2021 at 11:06:41AM +0800, Xiao Liang wrote:
> > The lower bound must be the first value of the prefix to be coverted.
> > For example, range "10.0.0.15-10.0.0.240" can not be converted to
> > "10.0.0.15/24". Validate it by checking if the lower bound value has
> > enough trailing zeros.
>
> # nft add rule x y ip saddr 10.0.0.15-10.0.0.240
> # nft list ruleset
> ...
>         ip saddr 10.0.0.15-10.0.0.240
>
> Is a different range that triggers the problem?

Hi,

Please try
# nft add rule x y snat to 10.0.0.15-10.0.0.240
Pablo Neira Ayuso Sept. 6, 2021, 8:04 p.m. UTC | #3
On Mon, Sep 06, 2021 at 11:06:41AM +0800, Xiao Liang wrote:
> The lower bound must be the first value of the prefix to be coverted.
> For example, range "10.0.0.15-10.0.0.240" can not be converted to
> "10.0.0.15/24". Validate it by checking if the lower bound value has
> enough trailing zeros.

Applied, thanks.
diff mbox series

Patch

diff --git a/src/netlink.c b/src/netlink.c
index cbf9d436..0fd0b664 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -1079,12 +1079,15 @@  struct expr *range_expr_to_prefix(struct expr *range)
 
 	if (mpz_bitmask_is_prefix(bitmask, len)) {
 		prefix_len = mpz_bitmask_to_prefix(bitmask, len);
-		prefix = prefix_expr_alloc(&range->location, expr_get(left),
-					   prefix_len);
-		mpz_clear(bitmask);
-		expr_free(range);
-
-		return prefix;
+		if (mpz_scan1(left->value, 0) >= len - prefix_len) {
+			prefix = prefix_expr_alloc(&range->location,
+						   expr_get(left),
+						   prefix_len);
+			mpz_clear(bitmask);
+			expr_free(range);
+
+			return prefix;
+		}
 	}
 	mpz_clear(bitmask);