Skip to content

Commit

Permalink
Squelch some warnings.
Browse files Browse the repository at this point in the history
Should fix GitHub issue the-tcpdump-group#879.
  • Loading branch information
guyharris committed Dec 6, 2019
1 parent 3a79622 commit 07b82c2
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions pcap-netfilter-linux.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,18 @@ netfilter_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_c
} else
return count;
}
if (ep - bp < NLMSG_SPACE(0)) {
/*
* NLMSG_SPACE(0) might be signed or might be unsigned,
* depending on whether the kernel defines NLMSG_ALIGNTO
* as 4, which older kernels do, or as 4U, which newer
* kernels do.
*
* ep - bp is of type ptrdiff_t, which is signed.
*
* To squelch warnings, we cast both to size_t, which
* is unsigned; ep >= bp, so the cast is safe.
*/
if ((size_t)(ep - bp) < (size_t)NLMSG_SPACE(0)) {
/*
* There's less than one netlink message left
* in the buffer. Give up.
Expand Down Expand Up @@ -262,8 +273,15 @@ netfilter_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_c
* If the message length would run past the end of the
* buffer, truncate it to the remaining space in the
* buffer.
*
* To squelch warnings, we cast ep - bp to uint32_t, which
* is unsigned and is the type of msg_len; ep >= bp, and
* len should fit in 32 bits (either it's set from an int
* or it's set from a recv() call with a buffer size that's
* an int, and we're assuming either ILP32 or LP64), so
* the cast is safe.
*/
if (msg_len > ep - bp)
if (msg_len > (uint32_t)(ep - bp))
msg_len = (uint32_t)(ep - bp);

bp += msg_len;
Expand Down

0 comments on commit 07b82c2

Please sign in to comment.