rtrequest1_fib: we need to always bump the ifaddr refcount when we take a reference from
an rtentry. r334118 introduced a case when this was not done. While we're here make the intent more obvious by moving the refcount bump down to when we know we'll actually need it. Reported by: markj
This commit is contained in:
parent
75a315f6d2
commit
9379029a92
@ -1586,12 +1586,9 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt,
|
||||
error = rt_getifa_fib(info, fibnum);
|
||||
if (error)
|
||||
return (error);
|
||||
} else
|
||||
ifa_ref(info->rti_ifa);
|
||||
ifa = info->rti_ifa;
|
||||
}
|
||||
rt = uma_zalloc(V_rtzone, M_NOWAIT);
|
||||
if (rt == NULL) {
|
||||
ifa_free(ifa);
|
||||
return (ENOBUFS);
|
||||
}
|
||||
rt->rt_flags = RTF_UP | flags;
|
||||
@ -1600,7 +1597,6 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt,
|
||||
* Add the gateway. Possibly re-malloc-ing the storage for it.
|
||||
*/
|
||||
if ((error = rt_setgate(rt, dst, gateway)) != 0) {
|
||||
ifa_free(ifa);
|
||||
uma_zfree(V_rtzone, rt);
|
||||
return (error);
|
||||
}
|
||||
@ -1623,6 +1619,8 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt,
|
||||
* This moved from below so that rnh->rnh_addaddr() can
|
||||
* examine the ifa and ifa->ifa_ifp if it so desires.
|
||||
*/
|
||||
ifa = info->rti_ifa;
|
||||
ifa_ref(ifa);
|
||||
rt->rt_ifa = ifa;
|
||||
rt->rt_ifp = ifa->ifa_ifp;
|
||||
rt->rt_weight = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user