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