iwd.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] monitor: use int length for NLMSG_NEXT
@ 2022-10-13 16:14 James Prestwood
  2022-10-13 16:14 ` [PATCH 2/2] frame-xchg: use int length for NLMSG_* macros James Prestwood
  0 siblings, 1 reply; 2+ messages in thread
From: James Prestwood @ 2022-10-13 16:14 UTC (permalink / raw)
  To: iwd; +Cc: James Prestwood

In all uses of NLMSG_{NEXT,OK,ALIGN} the length was unsigned
which is not what these macros expect. According to the docs
the length should be int type, so this was changed for all
uses in monitor.

The was causing random, somewhat rare, crashes in nlmon_receive.
---
 monitor/main.c  | 2 +-
 monitor/nlmon.c | 6 +++---
 monitor/nlmon.h | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/monitor/main.c b/monitor/main.c
index 9117fba3..78ee0d38 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -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;
+		int aligned_len;
 		uint16_t arphrd_type;
 		uint16_t proto_type;
 
diff --git a/monitor/nlmon.c b/monitor/nlmon.c
index 2222db09..573d16df 100644
--- a/monitor/nlmon.c
+++ b/monitor/nlmon.c
@@ -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);
+	int 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, int 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;
+	int nlmsg_len;
 	int fd;
 
 	fd = l_io_get_fd(io);
diff --git a/monitor/nlmon.h b/monitor/nlmon.h
index f2f2892a..b8cb81db 100644
--- a/monitor/nlmon.h
+++ b/monitor/nlmon.h
@@ -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, int size);
 void nlmon_print_pae(struct nlmon *nlmon, const struct timeval *tv,
 					uint8_t type, int index,
 					const void *data, uint32_t size);
-- 
2.34.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH 2/2] frame-xchg: use int length for NLMSG_* macros
  2022-10-13 16:14 [PATCH 1/2] monitor: use int length for NLMSG_NEXT James Prestwood
@ 2022-10-13 16:14 ` James Prestwood
  0 siblings, 0 replies; 2+ messages in thread
From: James Prestwood @ 2022-10-13 16:14 UTC (permalink / raw)
  To: iwd; +Cc: James Prestwood

The macro expects an integer type so use that to avoid any
unintended behavior as seen in iwmon.
---
 src/frame-xchg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/frame-xchg.c b/src/frame-xchg.c
index 158befd0..142bd80b 100644
--- a/src/frame-xchg.c
+++ b/src/frame-xchg.c
@@ -316,7 +316,7 @@ static bool frame_watch_group_io_read(struct l_io *io, void *user_data)
 	unsigned char control[32];
 	ssize_t bytes_read;
 	struct nlmsghdr *nlmsg;
-	size_t nlmsg_len;
+	int nlmsg_len;
 	uint32_t nlmsg_group = 0;
 
 	memset(&iov, 0, sizeof(iov));
-- 
2.34.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-10-13 16:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-13 16:14 [PATCH 1/2] monitor: use int length for NLMSG_NEXT James Prestwood
2022-10-13 16:14 ` [PATCH 2/2] frame-xchg: use int length for NLMSG_* macros James Prestwood

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).