Subject: Re: Gated assertion "len" failed at str.c line 810
To: Curt Sampson <cjs@portal.ca>
From: Acee Lindem <acee@raleigh.ibm.com>
List: tech-net
Date: 01/23/1997 19:17:02
Curt Sampson <cjs@portal.ca>  writes:

> Looking at the sockaddr structure, it does indeed have a length of
> zero.  Tracing back, this goes back quite some ways; in this
> particular instance redirect() was passed pointer to a sockaddr
> struct with a len and family of zero as the `src' argument. I've
> also seen this happen with the `dst' argument.
> 
> Now I'm not really sure what's going on in krt_recv_route that's
> causing this, and not being terribly familiar with gated internals,
> it looks to me like I've got several hours of work ahead if I want
> to track this down and understand it. Before I do that, has anyone
> seen this problem before, or does anyone have any pointers as to
> why this might be happening?

You might be getting bad information from your routing socket. 
However, it looks to me like krt_xaddrs() should handle this. 
The best thing to do at this point would be to use set a
breakpoint in the krt_recv_route() and see exactly what the
kernel is passing you. 

Or if you want to try a fix based on hypothesis you can try add this 
line to krt_rt_sock.c on the assumption that the kernel is setting 
an address bit for an address that it isn't passing - however, the
address pointer may still set in static storage (addrinfo):
 
*** krt_rt_sock.c       Fri Jan 17 10:03:46 1997
--- krt_rt_sock.new     Thu Jan 23 19:15:34 1997
***************
*** 221,226 ****
--- 221,228 ----
            case RTAX_BRD:
                if (ap->sa_len) {
                    addrinfo.rti_info[i] = sock2gated(ap, (size_t) ap->sa_len);
+               } else {
+                   addrinfo.rti_info[i] = (sockaddr_un *) ap;
                }
                break;
  




Acee