host: Prevent overflow in host_create_netmask() if mask is 0 or 32/128

This commit is contained in:
Tobias Brunner
2013-07-24 16:17:03 +02:00
parent a00ac1d9ee
commit 6e2ec33f9d
+7 -5
View File
@@ -597,13 +597,15 @@ host_t *host_create_netmask(int family, int netbits)
this->address.sa_family = family;
update_sa_len(this);
bytes = (netbits + 7) / 8;
bits = (bytes * 8) - netbits;
bytes = netbits / 8;
bits = 8 - (netbits & 0x07);
memset(target, 0xff, bytes);
memset(target + bytes, 0x00, len - bytes);
target[bytes - 1] = bits ? (u_int8_t)(0xff << bits) : 0xff;
if (bytes < len)
{
memset(target + bytes, 0x00, len - bytes);
target[bytes] = (u_int8_t)(0xff << bits);
}
return &this->public;
}