mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-11-04 00:37:22 +01:00 
			
		
		
		
	monitor: use int64_t type for NLMSG_NEXT length
Commit c7640f8346 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user