mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 04:32:37 +01:00
monitor: use int64_t type for NLMSG_NEXT length
Commitc7640f8346
was meant to fix a sign compare warning in clang because NLMSG_NEXT internally compares the length with nlmsghdr->nlmsg_len which is a u32. The problem is the NLMSG_NEXT can underflow an unsigned value, hence why it expects an int type to be passed in. To work around this we can instead pass a larger sized int64_t which the compiler allows since it can upgrade the unsigned nlmsghdr->nlmsg_len. There is no underflow risk with an int64_t either because the buffer used is much smaller than what can fit in an int64_t. Fixes:c7640f8346
("monitor: fix integer comparison error (clang)")
This commit is contained in:
parent
dc6575130e
commit
72d35fc491
@ -451,7 +451,7 @@ static int analyze_pcap(const char *pathname)
|
||||
|
||||
while (pcap_read(pcap, &tv, buf, snaplen, &len, &real_len)) {
|
||||
struct nlmsghdr *nlmsg;
|
||||
uint32_t aligned_len;
|
||||
int64_t aligned_len;
|
||||
uint16_t arphrd_type;
|
||||
uint16_t proto_type;
|
||||
|
||||
|
@ -8080,7 +8080,7 @@ static void print_rtnl_msg(const struct timeval *tv,
|
||||
void nlmon_print_rtnl(struct nlmon *nlmon, const struct timeval *tv,
|
||||
const void *data, uint32_t size)
|
||||
{
|
||||
uint32_t aligned_size = NLMSG_ALIGN(size);
|
||||
int64_t aligned_size = NLMSG_ALIGN(size);
|
||||
const struct nlmsghdr *nlmsg;
|
||||
|
||||
update_time_offset(tv);
|
||||
@ -8112,7 +8112,7 @@ void nlmon_print_rtnl(struct nlmon *nlmon, const struct timeval *tv,
|
||||
}
|
||||
|
||||
void nlmon_print_genl(struct nlmon *nlmon, const struct timeval *tv,
|
||||
const void *data, uint32_t size)
|
||||
const void *data, int64_t size)
|
||||
{
|
||||
const struct nlmsghdr *nlmsg;
|
||||
|
||||
@ -8144,7 +8144,7 @@ static bool nlmon_receive(struct l_io *io, void *user_data)
|
||||
unsigned char buf[8192];
|
||||
unsigned char control[32];
|
||||
ssize_t bytes_read;
|
||||
uint32_t nlmsg_len;
|
||||
int64_t nlmsg_len;
|
||||
int fd;
|
||||
|
||||
fd = l_io_get_fd(io);
|
||||
|
@ -41,7 +41,7 @@ void nlmon_destroy(struct nlmon *nlmon);
|
||||
void nlmon_print_rtnl(struct nlmon *nlmon, const struct timeval *tv,
|
||||
const void *data, uint32_t size);
|
||||
void nlmon_print_genl(struct nlmon *nlmon, const struct timeval *tv,
|
||||
const void *data, uint32_t size);
|
||||
const void *data, int64_t size);
|
||||
void nlmon_print_pae(struct nlmon *nlmon, const struct timeval *tv,
|
||||
uint8_t type, int index,
|
||||
const void *data, uint32_t size);
|
||||
|
Loading…
Reference in New Issue
Block a user