From a40a96e54b0d047d14d99bb715ee2dd94458acb6 Mon Sep 17 00:00:00 2001 From: "Leon M. George" Date: Fri, 6 May 2022 00:02:52 +0200 Subject: [PATCH] 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 --- package/base-files/files/bin/ipcalc.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/package/base-files/files/bin/ipcalc.sh b/package/base-files/files/bin/ipcalc.sh index 66d37952de8..b21b6e28dc6 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) -- 2.30.2