On Wed, May 14, 2008 at 06:36:36PM +0200, Raphael Mazelier wrote:
> In a previous post, I noticed that Quagga was broken in 4.3.
> After spending some hour to debug, I find were the stack overflow was.
> It's not clear if it was an openbsd bug (strange route in the kernel 
> interface),
> but it's clear for me that quagga don't make enought test before making  
> memcpy (still not a good idea).
>

Could you try the following diff instead? This should fix the real cause
of the crashes.

-- 
:wq Claudio

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/quagga/Makefile,v
retrieving revision 1.10
diff -u -p -r1.10 Makefile
--- Makefile    15 Sep 2007 22:36:58 -0000      1.10
+++ Makefile    10 Oct 2007 08:20:29 -0000
@@ -3,6 +3,7 @@
 COMMENT=       multi-threaded routing daemon
 
 DISTNAME=      quagga-0.99.9
+PKGNAME=       ${DISTNAME}p0
 SHARED_LIBS=    ospf   0.0     \
                 zebra  0.0
 CATEGORIES=    net
Index: patches/patch-zebra_kernel_socket_c
===================================================================
RCS file: /cvs/ports/net/quagga/patches/patch-zebra_kernel_socket_c,v
retrieving revision 1.3
diff -u -p -r1.3 patch-zebra_kernel_socket_c
--- patches/patch-zebra_kernel_socket_c 12 Sep 2007 20:31:18 -0000      1.3
+++ patches/patch-zebra_kernel_socket_c 9 Oct 2007 21:55:04 -0000
@@ -1,6 +1,6 @@
 $OpenBSD: patch-zebra_kernel_socket_c,v 1.3 2007/09/12 20:31:18 rui Exp $
---- zebra/kernel_socket.c.orig Wed Aug 22 17:22:57 2007
-+++ zebra/kernel_socket.c      Tue Sep 11 16:52:21 2007
+--- zebra/kernel_socket.c.orig Wed Aug 22 18:22:57 2007
++++ zebra/kernel_socket.c      Tue Oct  9 23:54:58 2007
 @@ -136,7 +136,7 @@ struct message rtm_type_str[] =
    {RTM_REDIRECT, "RTM_REDIRECT"},
    {RTM_MISS,     "RTM_MISS"},
@@ -10,3 +10,14 @@ $OpenBSD: patch-zebra_kernel_socket_c,v 
    {RTM_OLDADD,   "RTM_OLDADD"},
  #endif /* RTM_OLDADD */
  #ifdef RTM_OLDDEL
+@@ -705,9 +705,7 @@ rtm_read_mesg (struct rt_msghdr *rtm,
+ 
+   /* rt_msghdr version check. */
+   if (rtm->rtm_version != RTM_VERSION) 
+-      zlog (NULL, LOG_WARNING,
+-            "Routing message version different %d should be %d."
+-            "This may cause problem\n", rtm->rtm_version, RTM_VERSION);
++      return 0;
+   
+   /* Be sure structure is cleared */
+   memset (dest, 0, sizeof (union sockunion));

Reply via email to