[Olsr-dev] olsrd-0.5.2 bmf segmentation fault
Bernd Petrovitsch
(spam-protected)
Sun Jul 29 22:58:40 CEST 2007
On Sun, 2007-07-29 at 16:16 +0200, Cédric Krier wrote:
> Hi,
>
> I have a segmentation fault when I run olsrd with the bmf plugin.
>
>
> >---------- LOADING LIBRARY olsrd_bmf.so.1.5 ----------
> >OLSRD Basic Multicast Forwarding (BMF) plugin 1.5 (Jul 29 2007 13:57:36)
> > (C) Thales Communications Huizen, Netherlands
> > Erik Tromp ((spam-protected))
> >Checking plugin interface version: 4 - OK
> >
> >WARNING: YOU ARE USING AN OLD DEPRECATED PLUGIN INTERFACE!
> >DETECTED VERSION 4 AND THE CURRENT VERSION IS 5
> >PLEASE UPGRADE YOUR PLUGIN!
> >Segmentation fault
>
>
> Is there anybody who known how to fix it ?
JftSoC: I asked (and got) the olsrd.conf file and it happens here too
(Linux 2.6.9 on CentOS-4.5).
I just looked around and I have good and (for me) sad news:
Good news: The attached patch should fix it - it simply repairs the
basically broken olsr-current/Makefile.inc and enables the old version
of the plugin interface.
Side note: This is already fixed in CVS-HEAD (though differently).
Sad news (at least for me): Ido not understand why the SIGSEGV above
occurs:
- We do a dlopen(3) on the .so file of the plugin (in the olsr_load_dl()
function). And this succeeds (put printf(3)s in there to verify).
- We get the function pointer with dlsym(3) to get the interface
version (in the olsr_add_dl() function). This succeeds too and
delivers "4" and so we know that it is the "old version". And we
return from there "-1" (since we do not support the old version with
the original Makefile.inc).
- Back in olsr_load_dl(), we see the error and dlclose(3) the shared lib
again (since we can't use it).
And precisely that dlclose(3) call produces the SIGSEGV (put a
printf(3) before and after, look at it with ltrace). But the
"dlhandle" (and the pointer to it) there has the correct value (as
reported by the dlopen(3)) and I can't find or think of a reason why
something could break there with a SIGSEGV.
Don't get me wrong, if something is not correct dlclose(3) can (and
should) report errors, but simply dying on a SIGSEGV is strange (at
best).
Any hints anyone?
Bernd
--
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and Services
-------------- next part --------------
A non-text attachment was scrubbed...
Name: olsrd-0.5.2-fix.patch
Type: text/x-patch
Size: 360 bytes
Desc: not available
URL: <http://lists.olsr.org/pipermail/olsr-dev/attachments/20070729/68525f50/attachment.bin>
More information about the Olsr-dev
mailing list