[prev in list] [next in list] [prev in thread] [next in thread] 

List:       silc-devel
Subject:    [PATCH/resubmit] silc-server-0.9.18: fix null pointer deref in
From:       mmiller () hick ! org
Date:       2004-06-18 16:50:52
Message-ID: 20040618165052.GB22462 () home ! hick ! org
[Download RAW message or body]

Hi,

I noticed a stupid mistake in my previous patch, so here's the corrected
version.  Apologies for the spam.

Matt

--- snip ---

diff -dru silc-server-0.9.18/silcd/route.c silc-server-0.9.18-fix/silcd/route.c
--- silc-server-0.9.18/silcd/route.c	Mon Mar  3 10:56:04 2003
+++ silc-server-0.9.18-fix/silcd/route.c	Fri Jun 18 03:02:02 2004
@@ -97,11 +97,11 @@
 #endif
 
     router = silc_server_route_check(dest, port);
-    if (!router)
-      return (SilcSocketConnection)server->id_entry->router->connection;
-
-    return (SilcSocketConnection)router->connection;
+    if (router)
+   	 return (SilcSocketConnection)router->connection;
   }
 
-  return (SilcSocketConnection)server->id_entry->router->connection;
+  return (server->id_entry->router) 
+	? (SilcSocketConnection)server->id_entry->router->connection
+	: NULL;
 }
diff -dru silc-server-0.9.18/silcd/server.c silc-server-0.9.18-fix/silcd/server.c
--- silc-server-0.9.18/silcd/server.c	Wed Mar  3 11:15:08 2004
+++ silc-server-0.9.18-fix/silcd/server.c	Fri Jun 18 04:24:42 2004
@@ -2547,12 +2547,17 @@
       /* Route the packet to fastest route for the destination ID */
       void *id = silc_id_str2id(packet->dst_id, packet->dst_id_len,
 				packet->dst_id_type);
+      SilcSocketConnection conn;
+
       if (!id)
 	goto out;
-      silc_server_packet_route(server,
-			       silc_server_route_get(server, id,
-						     packet->dst_id_type),
-			       packet);
+
+      conn = silc_server_route_get(server, id,
+				   packet->dst_id_type);
+      if (!conn)
+	goto out;
+
+      silc_server_packet_route(server, conn, packet);
       silc_free(id);
       goto out;
     }
@@ -5363,7 +5368,7 @@
       dst_sock = silc_server_route_get(server, id, SILC_ID_CLIENT);
 
       silc_free(id);
-      if (idata)
+      if (idata && dst_sock)
 	*idata = (SilcIDListData)dst_sock->user_data;
       return dst_sock;
     }
_______________________________________________________________________
Info:    https://lists.silcnet.org/mailman/listinfo/silc-announce
Archive: https://lists.silcnet.org/pipermail/silc-announce
FAQ:     http://silcnet.org/support/faq/
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic