summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2007-12-17 04:19:25 +0000
committerkmacy <kmacy@FreeBSD.org>2007-12-17 04:19:25 +0000
commit139d7c3fb10ebc149150f89c9ad8ae77b08265a8 (patch)
tree2270736261fe518c1e199025acaa27dc93382694
parentd717f8cf061b8e1ae723ff0b21dbf7a39e76252a (diff)
downloadFreeBSD-src-139d7c3fb10ebc149150f89c9ad8ae77b08265a8.zip
FreeBSD-src-139d7c3fb10ebc149150f89c9ad8ae77b08265a8.tar.gz
Don't panic in arpresolve if we're given a null mbuf. We could
insist that the caller just pass in an initialized mbuf even if didn't have any data - but that seems rather contrived.
-rw-r--r--sys/netinet/if_ether.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 86544aa..006c966 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -362,13 +362,16 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
struct sockaddr_dl *sdl;
int error;
- if (m->m_flags & M_BCAST) { /* broadcast */
- (void)memcpy(desten, ifp->if_broadcastaddr, ifp->if_addrlen);
- return (0);
- }
- if (m->m_flags & M_MCAST && ifp->if_type != IFT_ARCNET) {/* multicast */
- ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr, desten);
- return (0);
+ if (m != NULL) {
+
+ if (m->m_flags & M_BCAST) { /* broadcast */
+ (void)memcpy(desten, ifp->if_broadcastaddr, ifp->if_addrlen);
+ return (0);
+ }
+ if (m->m_flags & M_MCAST && ifp->if_type != IFT_ARCNET) {/* multicast */
+ ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr, desten);
+ return (0);
+ }
}
if (rt0 != NULL) {
@@ -449,10 +452,11 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
* response yet. Replace the held mbuf with this
* latest one.
*/
- if (la->la_hold)
- m_freem(la->la_hold);
- la->la_hold = m;
-
+ if (m != NULL) {
+ if (la->la_hold)
+ m_freem(la->la_hold);
+ la->la_hold = m;
+ }
KASSERT(rt->rt_expire > 0, ("sending ARP request for static entry"));
/*
OpenPOWER on IntegriCloud