Blame SOURCES/dnsmasq-2.81-correct-range-check-of-dhcp-host-prefix.patch

c1823a
From 6307208c806f9b968eca178931b3d77c4ed83c54 Mon Sep 17 00:00:00 2001
c1823a
From: Petr Mensik <pemensik@redhat.com>
c1823a
Date: Fri, 6 Mar 2020 15:37:23 +0100
c1823a
Subject: [PATCH] Correct range check of dhcp-host prefix
c1823a
c1823a
It incorrectly works with 32 bit integer only when counting number of
c1823a
addresses in range. It works correctly only between prefixlen 96 and
c1823a
128. Use 64bit shift to work with well with numbers higher than 64.
c1823a
c1823a
Fixes commit 79aba0f10ad0157fb4f48afbbcb03f094caff97a error.
c1823a
---
c1823a
 src/option.c  | 2 +-
c1823a
 src/rfc3315.c | 2 +-
c1823a
 2 files changed, 2 insertions(+), 2 deletions(-)
c1823a
c1823a
diff --git a/src/option.c b/src/option.c
c1823a
index 88cd2ab..79122df 100644
c1823a
--- a/src/option.c
c1823a
+++ b/src/option.c
c1823a
@@ -3247,7 +3247,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
c1823a
 			
c1823a
 			if (!atoi_check(pref, &new_addr->prefixlen) ||
c1823a
 			    new_addr->prefixlen > 128 ||
c1823a
-			    (((1<<(128-new_addr->prefixlen))-1) & addrpart) != 0)
c1823a
+			    ((((u64)1<<(128-new_addr->prefixlen))-1) & addrpart) != 0)
c1823a
 			  {
c1823a
 			    dhcp_config_free(new);
c1823a
 			    ret_err(_("bad IPv6 prefix"));
c1823a
diff --git a/src/rfc3315.c b/src/rfc3315.c
c1823a
index a0067e9..f59aedc 100644
c1823a
--- a/src/rfc3315.c
c1823a
+++ b/src/rfc3315.c
c1823a
@@ -1798,7 +1798,7 @@ static int config_valid(struct dhcp_config *config, struct dhcp_context *context
c1823a
       addresses = 1;
c1823a
 
c1823a
       if (addr_list->flags & ADDRLIST_PREFIX)
c1823a
-	addresses = 1<<(128-addr_list->prefixlen);
c1823a
+	addresses = (u64)1<<(128-addr_list->prefixlen);
c1823a
 		
c1823a
       if ((addr_list->flags & ADDRLIST_WILDCARD))
c1823a
 	{
c1823a
-- 
c1823a
2.21.1
c1823a