Cleaned up uninitialized 'rt' warning properly
Make a copy of the header of a packet that gets queued due to lack of forwarding cache entry, so that nobody else can step on it. Thanks to Mike Karels <karels@bsdi.com> for pointing this one out.
This commit is contained in:
parent
135587ee97
commit
e994b234d9
@ -9,7 +9,7 @@
|
||||
* Modified by Bill Fenner, PARC, April 1995
|
||||
*
|
||||
* MROUTING Revision: 3.5
|
||||
* $Id: ip_mroute.c,v 1.28 1996/03/02 18:24:10 peter Exp $
|
||||
* $Id: ip_mroute.c,v 1.29 1996/03/11 15:13:17 davidg Exp $
|
||||
*/
|
||||
|
||||
#include "opt_mrouting.h"
|
||||
@ -1107,7 +1107,7 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
struct mbuf *m;
|
||||
struct ip_moptions *imo;
|
||||
{
|
||||
register struct mfc *rt = 0; /* XXX uninit warning */
|
||||
register struct mfc *rt;
|
||||
register u_char *ipoptions;
|
||||
static struct sockaddr_in k_igmpsrc = { sizeof k_igmpsrc, AF_INET };
|
||||
static int srctun = 0;
|
||||
@ -1148,7 +1148,7 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
(vifp->v_flags & VIFF_TUNNEL) ? "tunnel on " : "",
|
||||
vifp->v_ifp->if_name, vifp->v_ifp->if_unit);
|
||||
}
|
||||
return (ip_mdq(m, ifp, rt, vifi));
|
||||
return (ip_mdq(m, ifp, NULL, vifi));
|
||||
}
|
||||
if (rsvpdebug && ip->ip_p == IPPROTO_RSVP) {
|
||||
printf("Warning: IPPROTO_RSVP from %lx to %lx without vif option\n",
|
||||
@ -1189,6 +1189,7 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
register struct mbuf *rte_m;
|
||||
register u_long hash;
|
||||
register int npkts;
|
||||
int hlen = ip->ip_hl << 2;
|
||||
#ifdef UPCALL_TIMING
|
||||
struct timeval tp;
|
||||
|
||||
@ -1203,7 +1204,8 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
|
||||
/*
|
||||
* Allocate mbufs early so that we don't do extra work if we are
|
||||
* just going to fail anyway.
|
||||
* just going to fail anyway. Make sure to pullup the header so
|
||||
* that other people can't step on it.
|
||||
*/
|
||||
MGET(mb_ntry, M_DONTWAIT, MT_DATA);
|
||||
if (mb_ntry == NULL) {
|
||||
@ -1211,6 +1213,8 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
return ENOBUFS;
|
||||
}
|
||||
mb0 = m_copy(m, 0, M_COPYALL);
|
||||
if (mb0 && (M_HASCL(mb0) || mb0->m_len < hlen))
|
||||
mb0 = m_pullup(mb0, hlen);
|
||||
if (mb0 == NULL) {
|
||||
m_free(mb_ntry);
|
||||
splx(s);
|
||||
@ -1228,7 +1232,6 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
}
|
||||
|
||||
if (mb_rt == NULL) {
|
||||
int hlen = ip->ip_hl << 2;
|
||||
int i;
|
||||
struct igmpmsg *im;
|
||||
|
||||
@ -1242,8 +1245,6 @@ X_ip_mforward(ip, ifp, m, imo)
|
||||
}
|
||||
/* Make a copy of the header to send to the user level process */
|
||||
mm = m_copy(m, 0, hlen);
|
||||
if (mm && (M_HASCL(mm) || mm->m_len < hlen))
|
||||
mm = m_pullup(mm, hlen);
|
||||
if (mm == NULL) {
|
||||
m_free(mb_ntry);
|
||||
m_freem(mb0);
|
||||
|
Loading…
Reference in New Issue
Block a user