From: Leon M. George Date: Thu, 5 May 2022 22:02:52 +0000 (+0200) Subject: base-files: ipcalc.sh: fail when network is too small X-Git-Tag: v23.05.0-rc1~1062 X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=commitdiff_plain;h=a40a96e54b0d047d14d99bb715ee2dd94458acb6 base-files: ipcalc.sh: fail when network is too small It's possible to move range boundaries in a way that the start address lies behind the end address. Detect this condition and exit with an error message. Signed-off-by: Leon M. George --- diff --git a/package/base-files/files/bin/ipcalc.sh b/package/base-files/files/bin/ipcalc.sh index 66d37952de..b21b6e28dc 100755 --- a/package/base-files/files/bin/ipcalc.sh +++ b/package/base-files/files/bin/ipcalc.sh @@ -44,13 +44,14 @@ BEGIN { } network=and(ipaddr,netmask) + prefix=32-bitcount(compl32(netmask)) broadcast=or(network,compl32(netmask)) print "IP="int2ip(ipaddr) print "NETMASK="int2ip(netmask) print "BROADCAST="int2ip(broadcast) print "NETWORK="int2ip(network) - print "PREFIX="32-bitcount(compl32(netmask)) + print "PREFIX="prefix # range calculations: # ipcalc @@ -68,6 +69,11 @@ BEGIN { if (end>limit) end=limit if (end==ipaddr) end=ipaddr-1 + if (start>end) { + print "network ("int2ip(network)"/"prefix") too small" > "/dev/stderr" + exit(1) + } + if (ipaddr > start && ipaddr < end) { print "ipaddr inside range" > "/dev/stderr" exit(1)