All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] monitor: Add message length check to nlmon_receice
@ 2020-01-19 16:31 Daniel Wagner
  2020-01-21 22:36 ` Denis Kenzior
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Wagner @ 2020-01-19 16:31 UTC (permalink / raw)
  To: iwd

[-- Attachment #1: Type: text/plain, Size: 1768 bytes --]

The NLMSG_NEXT macro calculates the next nlmsg and updates the len
field:

  #define NLMSG_NEXT(nlh,len)	 ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
				  (struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))

That means nlmsg_len needs to be an multiple of NLMSG_ALIGNTO to avoid
an underflow in len. But there are message which do not have a valid
lenght:

  Breakpoint 1, nlmon_receive (io=0x4da210, user_data=0x4d4cc0) at monitor/nlmon.c:6947
  6947                            printf("malformed packet\n");
  (gdb) bt
  #0  nlmon_receive (io=0x4da210, user_data=0x4d4cc0) at monitor/nlmon.c:6947
  #1  0x0000000000439a91 in io_callback (fd=7, events=1, user_data=0x4da210) at ell/io.c:126
  #2  0x0000000000438861 in l_main_iterate (timeout=-1) at ell/main.c:473
  #3  0x0000000000438968 in l_main_run () at ell/main.c:520
  #4  0x0000000000438c80 in l_main_run_with_signal (callback=0x4038e6 <signal_handler>, user_data=0x0) at ell/main.c:642
  #5  0x0000000000403cc9 in main (argc=3, argv=0x7fffffffec28) at monitor/main.c:806
  (gdb) p nlmsg->nlmsg_len
  $5 = 17

By adding an lenght check after each processed message garantees that
we do not underflow. The downside is that as soon an invalid length is
spotted the processing stops.
---
 monitor/nlmon.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/monitor/nlmon.c b/monitor/nlmon.c
index 6b0afef8a497..5498e9fa0f23 100644
--- a/monitor/nlmon.c
+++ b/monitor/nlmon.c
@@ -6941,6 +6941,11 @@ static bool nlmon_receive(struct l_io *io, void *user_data)
 			nlmon_message(nlmon, tv, tp, nlmsg);
 			break;
 		}
+
+		if (nlmsg->nlmsg_len & (NLMSG_ALIGNTO-1)) {
+			printf("malformed packet\n");
+			break;
+		}
 	}
 
 	return true;
-- 
2.24.1

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

end of thread, other threads:[~2020-01-22 18:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-19 16:31 [PATCH] monitor: Add message length check to nlmon_receice Daniel Wagner
2020-01-21 22:36 ` Denis Kenzior
2020-01-22  9:05   ` Daniel Wagner
2020-01-22 16:21     ` Denis Kenzior
2020-01-22 17:26       ` Daniel Wagner
2020-01-22 17:53         ` Denis Kenzior
2020-01-22 18:41           ` Daniel Wagner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.