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

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