luci-mod-status: fix sporadic logical interfaces resolve failures
authorJo-Philipp Wich <jo@mein.io>
Mon, 4 Mar 2024 22:54:24 +0000 (23:54 +0100)
committerJo-Philipp Wich <jo@mein.io>
Mon, 4 Mar 2024 22:57:30 +0000 (23:57 +0100)
Correct the incorrect netmask calculation logic leading to incorrect
network range comparisons in some cases.

Fixes: #6956
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit fa6c345e19360439fa5077137d1e927b0cc501d0)

modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js

index 8d7e36f701fea1d5f1a36cb3ee56c0c60e2603f6..dfe19fc70aee8d76f656220e6320be33e390da0c 100644 (file)
@@ -13,13 +13,15 @@ var callNetworkInterfaceDump = rpc.declare({
 
 function applyMask(addr, mask, v6) {
        var words = v6 ? validation.parseIPv6(addr) : validation.parseIPv4(addr);
+       var bword = v6 ? 0xffff : 0xff;
+       var bwlen = v6 ? 16 : 8;
 
        if (!words || mask < 0 || mask > (v6 ? 128 : 32))
                return null;
 
        for (var i = 0; i < words.length; i++) {
-               var b = Math.min(mask, v6 ? 16 : 8);
-               words[i] &= ((1 << b) - 1);
+               var b = Math.min(mask, bwlen);
+               words[i] &= (bword << (bwlen - b)) & bword;
                mask -= b;
        }