> On 9 Jul 2023, at 15:15, Alexander Bluhm <alexander.bl...@gmx.net> wrote:
> 
> Hi,
> 
> While testing my ART reference couting fix, I discovered a rtentry
> leak that is triggered by regress/sbin/route and detected with
> btrace(8) refcnt.
> 
> The reference returned by rtalloc() must be freed with rtfree() in
> all cases.
> 
> ok?
> 

ok mvs

> bluhm
> 
> Index: netinet6/in6_ifattach.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6_ifattach.c,v
> retrieving revision 1.121
> diff -u -p -r1.121 in6_ifattach.c
> --- netinet6/in6_ifattach.c   15 Nov 2022 18:42:46 -0000      1.121
> +++ netinet6/in6_ifattach.c   9 Jul 2023 11:20:39 -0000
> @@ -440,10 +440,9 @@ in6_ifdetach(struct ifnet *ifp)
>       sin6.sin6_addr = in6addr_intfacelocal_allnodes;
>       sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
>       rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
> -     if (rt && rt->rt_ifidx == ifp->if_index) {
> +     if (rt && rt->rt_ifidx == ifp->if_index)
>               rtdeletemsg(rt, ifp, ifp->if_rdomain);
> -             rtfree(rt);
> -     }
> +     rtfree(rt);
> 
>       /* remove route to link-local allnodes multicast (ff02::1) */
>       bzero(&sin6, sizeof(sin6));
> @@ -452,10 +451,9 @@ in6_ifdetach(struct ifnet *ifp)
>       sin6.sin6_addr = in6addr_linklocal_allnodes;
>       sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
>       rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
> -     if (rt && rt->rt_ifidx == ifp->if_index) {
> +     if (rt && rt->rt_ifidx == ifp->if_index)
>               rtdeletemsg(rt, ifp, ifp->if_rdomain);
> -             rtfree(rt);
> -     }
> +     rtfree(rt);
> 
>       if (ifp->if_xflags & (IFXF_AUTOCONF6 | IFXF_AUTOCONF6TEMP))
>               ifp->if_xflags &= ~(IFXF_AUTOCONF6 | IFXF_AUTOCONF6TEMP);
> 

Reply via email to