On 02/12/15(Wed) 22:19, Claudio Jeker wrote:
> Last but of rt_ifp cleanup. Since we want to print the interface names in
> those log messages we need to do the if_get/if_put dance there. Since this
> is only in 2 places which should not be super common that should be fine
> and with this arp should be MP save :)
ok mpi@
>
> --
> :wq Claudio
>
> Index: if_ether.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/if_ether.c,v
> retrieving revision 1.196
> diff -u -p -r1.196 if_ether.c
> --- if_ether.c 2 Dec 2015 21:09:06 -0000 1.196
> +++ if_ether.c 2 Dec 2015 21:16:14 -0000
> @@ -565,14 +565,19 @@ in_arpinput(struct mbuf *m)
> if (ifp->if_type != IFT_CARP)
> #endif
> {
> + struct ifnet *rifp = if_get(
> + rt->rt_ifidx);
> + if (rifp == NULL)
> + goto out;
> inet_ntop(AF_INET, &isaddr,
> addr, sizeof(addr));
> log(LOG_WARNING, "arp: attempt"
> " to overwrite entry for"
> " %s on %s by %s on %s\n",
> - addr, rt->rt_ifp->if_xname,
> + addr, rifp->if_xname,
> ether_sprintf(ea->arp_sha),
> ifp->if_xname);
> + if_put(rifp);
> }
> goto out;
> } else {
> @@ -587,13 +592,17 @@ in_arpinput(struct mbuf *m)
> changed = 1;
> }
> } else if (!if_isconnected(ifp, rt->rt_ifidx)) {
> + struct ifnet *rifp = if_get(rt->rt_ifidx);
> + if (rifp == NULL)
> + goto out;
> inet_ntop(AF_INET, &isaddr, addr, sizeof(addr));
> log(LOG_WARNING,
> "arp: attempt to add entry for %s "
> "on %s by %s on %s\n", addr,
> - rt->rt_ifp->if_xname,
> + rifp->if_xname,
> ether_sprintf(ea->arp_sha),
> ifp->if_xname);
> + if_put(rifp);
> goto out;
> }
> sdl->sdl_alen = sizeof(ea->arp_sha);
>