rtalloc()/rtfree() problems on CURRENT

Gleb Smirnoff glebius at cell.sick.ru
Tue Feb 24 03:51:40 PST 2004


  Andre,

  I can provide you with any additional information,
since I have crashdump saved. I can dig into the problem myself
if you give me some pointers where to look at.

On Tue, Feb 24, 2004 at 11:14:59AM +0100, Andre Oppermann wrote:
A> Gleb Smirnoff wrote:
A> > 
A> >   Dear sirs,
A> > 
A> >   please take a look at the following problem. I've been
A> > successfully using the following code on STABLE and 5.1-RELEASE:
A> > 
A> >         struct route ro;
A> >         struct sockaddr_in *sin;
A> > 
A> >         bzero((caddr_t)&ro, sizeof(ro));
A> >         sin = (struct sockaddr_in *)&ro.ro_dst;
A> >         sin->sin_len = sizeof(*sin);
A> >         sin->sin_family = AF_INET;
A> >         sin->sin_addr = fle->r.r_dst;
A> >         rtalloc(&ro);
A> 
A> Most of the time, if you don't need a cloned route allocated, you can
A> just use rtalloc_ign(&ro, RTF_CLONING) to just get a reference to the
A> existing rtentry.  Not allocating a new cloned route saves work and
A> time for the rtalloc code.
A> 
A> >         if (ro.ro_rt != NULL) {
A> >                 struct rtentry *rt = ro.ro_rt;
A> > 
A> >                 /* here some read-only things are done with rt */
A> 
A> Maybe you do some nasty things to rt here?
A> 
A> >                 rtfree(ro.ro_rt);
A> >         }
A> > 
A> > But on CURRENT rtfree() causes panic. Here is backtrace:
A> ...
A> > Does this mean that something is broken in CURRENT or I am doing something wrong?
A> 
A> rtalloc() and rtfree() are used quite often in the network code and
A> otherwise work fine.  The odds are high that you are doing something
A> wrong.
A> 
A> -- 
A> Andre

-- 
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE


More information about the freebsd-net mailing list