itojun wrote:

>
> >> > > I then noticed that "... kernel: nd6_storelladdr failed" gets
logged
> >> > > often and after a while all mbufs are used. It turned out
that in
> >> > > sys/net/if_ethersubr.c in ether_output() when
nd6_storelladdr()
> >> > fails,
> >> > > it does a return(0) and does not free the mbuf. I
checked -current
> >> > > and it is still like that.
>
> will correct it.  thanks for reporting.
>
> itojun

    This behavior is absolutely horrible. What ought to be fixed, if
ether_input() is supposed to be freeing the passed in mbuf, is that
ether_input() should instead accept a pointer to a pointer so that
after it frees the mbuf it can NULL out the initial pointer. Because
of promoting similar existing coding practises in this area of the
code, what we're seeing is ether_input() effectively returning an mbuf
to the free list while the caller still holds a live pointer to that
mbuf.

Regards,
Bosko.



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to