]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[CritFix] Fix application of IPv6 mask
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 7 Oct 2016 11:00:08 +0000 (12:00 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 7 Oct 2016 11:00:08 +0000 (12:00 +0100)
MFH: true

src/libutil/addr.c

index a6aa8a8780693a26d25ce4c97652176011e2be54..0bc7aa85a14cabedf28d00d01887e2ee506f186e 100644 (file)
@@ -1321,12 +1321,21 @@ rspamd_inet_address_apply_mask (rspamd_inet_addr_t *addr, guint mask)
                }
                else if (addr->af == AF_INET6 && mask <= 128) {
                        p = (uint32_t *)&addr->u.in.addr.s6.sin6_addr;
+                       mask = 128 - mask;
                        p += 3;
-                       while (mask > 0) {
-                               umsk = htonl (G_MAXUINT32 << (32 - (mask > 32 ? 32 : mask)));
-                               *p &= umsk;
+
+                       for (;;) {
+                               if (mask > 32) {
+                                       mask -= 32;
+                                       *p = 0;
+                               }
+                               else {
+                                       umsk = htonl (G_MAXUINT32 << mask);
+                                       *p &= umsk;
+                                       break;
+                               }
+
                                p --;
-                               mask -= 32;
                        }
                }
        }