clone 351269 -1
reassign -1 libdumbnet 1.8-1.3
severity -1 important
retitle -1 libdumbnet: route_add() and route_delete() broken in 1.8
tags -1 patch fixed-upstream
blocks -1 351269
thanks
On Fri, Feb 03, 2006 at 01:36:03PM -0500, Michael Richters wrote:
> Package: fragroute
> Version: 1.2-7
> Severity: grave
>
> I'm using the default fragroute config file. My local subnet is
> 172.16.0.0/24. Here is a transcript of a shell session:
> # fragroute 172.16.0.1
> fragroute: couldn't delete loopback route
> fragroute: couldn't initialize tunnel interface: Invalid argument
Hi,
this is because libdumbnet1 version 1.8 has a bug in addr_btos(),
called by route_add() and route_delete() at fragroute initialization
time. This bug was present in 1.7 also, but the code was not called
from the route_* functions.
I'm cloning this as a severity 'important' bug against the libdumbnet
package and attaching a patch stolen from upstream 1.9 (the current
version is 1.11). A better fix would obviously be to upgrade to a new
upstream version.
With a patched version of libdumbnet1, a recompiled fragroute seems to
work as expected. I'm not sure why exactly a recompile is needed, but
at least libevent1 has had several releases after fragroute was last
uploaded.
Cheers,
--
Niko Tyni [EMAIL PROTECTED]
--- libdumbnet-1.8/src/addr.c 2006-04-25 23:47:39.309965509 +0300
+++ libdumbnet-1.8-fixed/src/addr.c 2006-04-25 23:40:33.994910466 +0300
@@ -341,7 +341,7 @@
union sockunion *so = (union sockunion *)sa;
#ifdef HAVE_SOCKADDR_IN6
- if (bits > IP_ADDR_BITS && bits < IP6_ADDR_BITS) {
+ if (bits > IP_ADDR_BITS && bits <= IP6_ADDR_BITS) {
memset(&so->sin6, 0, sizeof(so->sin6));
#ifdef HAVE_SOCKADDR_SA_LEN
so->sin6.sin6_len = IP6_ADDR_LEN + (bits / 8) + (bits % 8);
@@ -350,7 +350,7 @@
return (addr_btom(bits, &so->sin6.sin6_addr, IP6_ADDR_LEN));
} else
#endif
- if (bits < IP_ADDR_BITS) {
+ if (bits <= IP_ADDR_BITS) {
memset(&so->sin, 0, sizeof(so->sin));
#ifdef HAVE_SOCKADDR_SA_LEN
so->sin.sin_len = IP_ADDR_LEN + (bits / 8) + (bits % 8);