Avoid a divide-by-zero when bad checksum counters overflow.
A mixture of IP or UDP packets with valid and invalid checksum could cause {ip,udp}_packets_bad_checksum to wrap around to 0, resulting in a division by zero. This is packet.c rev. 1.27 from OpenBSD. admbugs: 552 Obtained from: OpenBSD MFC after: 3 days
This commit is contained in:
parent
b66ed8ee28
commit
a3ae40c7a4
@ -183,7 +183,7 @@ decode_udp_ip_header(unsigned char *buf, int bufix, struct sockaddr_in *from,
|
||||
ip_packets_seen++;
|
||||
if (wrapsum(checksum(buf + bufix, ip_len, 0)) != 0) {
|
||||
ip_packets_bad_checksum++;
|
||||
if (ip_packets_seen > 4 &&
|
||||
if (ip_packets_seen > 4 && ip_packets_bad_checksum != 0 &&
|
||||
(ip_packets_seen / ip_packets_bad_checksum) < 2) {
|
||||
note("%d bad IP checksums seen in %d packets",
|
||||
ip_packets_bad_checksum, ip_packets_seen);
|
||||
@ -235,7 +235,7 @@ decode_udp_ip_header(unsigned char *buf, int bufix, struct sockaddr_in *from,
|
||||
udp_packets_seen++;
|
||||
if (usum && usum != sum) {
|
||||
udp_packets_bad_checksum++;
|
||||
if (udp_packets_seen > 4 &&
|
||||
if (udp_packets_seen > 4 && udp_packets_bad_checksum != 0 &&
|
||||
(udp_packets_seen / udp_packets_bad_checksum) < 2) {
|
||||
note("%d bad udp checksums in %d packets",
|
||||
udp_packets_bad_checksum, udp_packets_seen);
|
||||
|
Loading…
Reference in New Issue
Block a user