Skip to content

Commit

Permalink
fix a bug leading to incorrect split-include netmasks
Browse files Browse the repository at this point in the history
This bug was my fault. Introduced in 881eb28 on 15 Oct 2016 ("Correctly handle IPv4 route specified as either 10.1.2.0/255.255.255.0 or 10.1.2.0/24")

Left shift of >=32 bits is undefined on x86 (https://stackoverflow.com/a/7471843/20789), and it was causing split-includes of 0.0.0.0/0 to output inconsistent values to
the vpnc-script variables for split-includes:

	CISCO_SPLIT_INC_12_MASKLEN=0
	CISCO_SPLIT_INC_12_ADDR=0.0.0.0
	CISCO_SPLIT_INC_12_MASK=255.255.255.255   # generated by netmaskbits() in script.c -- WRONG!

Caught due to an assertion failing in vpn-slice: dlenski/vpn-slice#9

Signed-off-by: Daniel Lenski <dlenski@gmail.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
  • Loading branch information
dlenski authored and dwmw2 committed Feb 27, 2018
1 parent 69226f4 commit 30e25df
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion script.c
Expand Up @@ -81,7 +81,10 @@ static int netmasklen(struct in_addr addr)

static uint32_t netmaskbits(int masklen)
{
return htonl((0xffffffff << (32-masklen)));
if (masklen)
return htonl(0xffffffff << (32-masklen));
else /* Shifting by 32 is invalid, so special-case it */
return 0;
}

static int process_split_xxclude(struct openconnect_info *vpninfo,
Expand Down

0 comments on commit 30e25df

Please sign in to comment.