From: Vsevolod Stakhov Date: Fri, 7 Oct 2016 11:00:08 +0000 (+0100) Subject: [CritFix] Fix application of IPv6 mask X-Git-Tag: 1.4.0~302 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dabff7600bd0ae0cfb7d196eec83096bf0e38f25;p=thirdparty%2Frspamd.git [CritFix] Fix application of IPv6 mask MFH: true --- diff --git a/src/libutil/addr.c b/src/libutil/addr.c index a6aa8a8780..0bc7aa85a1 100644 --- a/src/libutil/addr.c +++ b/src/libutil/addr.c @@ -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; } } }