[PATCH 2/3] netlink: Avoid crash with clientless netlink

Ian Jackson ijackson at chiark.greenend.org.uk
Sun Jan 5 15:44:52 GMT 2014


In some pathological configurations, it can happen that a packet is
received from the kernel by a netlink which has no clients (that is,
where netlink_inst_reg has not been called).

Don't crash when this happens; instead, print a log message including
the source and destination addresses.

Signed-off-by: Ian Jackson <ijackson at chiark.greenend.org.uk>
---
 netlink.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/netlink.c b/netlink.c
index 54ad76f..6384c02 100644
--- a/netlink.c
+++ b/netlink.c
@@ -410,12 +410,23 @@ static bool_t netlink_check(struct netlink *st, struct buffer_if *buf,
 }
 
 /* Deliver a packet _to_ client; used after we have decided
- * what to do with it. */
+ * what to do with it (and just to check that the client has
+ * actually registered a delivery function with us). */
 static void netlink_client_deliver(struct netlink *st,
 				   struct netlink_client *client,
 				   uint32_t source, uint32_t dest,
 				   struct buffer_if *buf)
 {
+    if (!client->deliver) {
+	string_t s,d;
+	s=ipaddr_to_string(source);
+	d=ipaddr_to_string(dest);
+	Message(M_ERR,"%s: dropping %s->%s, client not registered\n",
+		st->name,s,d);
+	free(s); free(d);
+	BUF_FREE(buf);
+	return;
+    }
     client->deliver(client->dst, buf);
     client->outcount++;
 }
-- 
1.7.10.4




More information about the sgo-software-discuss mailing list