On 21/11/15(Sat) 12:55, Martin Pieuchot wrote: > David reported a possible used of uninitialized ``ifp'' in tcp_mss(). > This cannot currently happen but I think the diff below should prevent > a bad dereference later. > > Ok?
Anyone? > > Index: netinet/tcp_input.c > =================================================================== > RCS file: /cvs/src/sys/netinet/tcp_input.c,v > retrieving revision 1.309 > diff -u -p -r1.309 tcp_input.c > --- netinet/tcp_input.c 20 Nov 2015 10:45:29 -0000 1.309 > +++ netinet/tcp_input.c 21 Nov 2015 11:51:53 -0000 > @@ -2988,6 +2988,10 @@ tcp_mss(struct tcpcb *tp, int offer) > if (rt == NULL) > goto out; > > + ifp = if_get(rt->rt_ifidx); > + if (ifp == NULL) > + goto out; > + > switch (tp->pf) { > #ifdef INET6 > case AF_INET6: > @@ -3002,7 +3006,6 @@ tcp_mss(struct tcpcb *tp, int offer) > goto out; > } > > - ifp = if_get(rt->rt_ifidx); > /* > * if there's an mtu associated with the route and we support > * path MTU discovery for the underlying protocol family, use it. > @@ -3024,13 +3027,6 @@ tcp_mss(struct tcpcb *tp, int offer) > mss = rt->rt_rmx.rmx_mtu - iphlen - > sizeof(struct tcphdr); > } > - } else if (ifp == NULL) { > - /* > - * ifp may be null and rmx_mtu may be zero in certain > - * v6 cases (e.g., if ND wasn't able to resolve the > - * destination host. > - */ > - goto out; > } else if (ifp->if_flags & IFF_LOOPBACK) { > mss = ifp->if_mtu - iphlen - sizeof(struct tcphdr); > } else if (tp->pf == AF_INET) { >