diff options
author | yar <yar@FreeBSD.org> | 2001-03-27 12:34:58 +0000 |
---|---|---|
committer | yar <yar@FreeBSD.org> | 2001-03-27 12:34:58 +0000 |
commit | b3a36066dfcabf2654b9bba67630b9ef2b74ff97 (patch) | |
tree | 6068a1b006553ea12163d3ba5169fd9666b8e537 | |
parent | aa4ec850c7f2a6ae7d70bc9693a50be7d771ef85 (diff) | |
download | FreeBSD-src-b3a36066dfcabf2654b9bba67630b9ef2b74ff97.zip FreeBSD-src-b3a36066dfcabf2654b9bba67630b9ef2b74ff97.tar.gz |
Add a missing m_pullup() before a mtod() in in_arpinput().
PR: kern/22177
Reviewed by: wollman
-rw-r--r-- | sys/netinet/if_ether.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 49d1189..de5d906 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -519,6 +519,12 @@ in_arpinput(m) struct in_addr isaddr, itaddr, myaddr; int op, rif_len; + if (m->m_len < sizeof(struct ether_arp) && + (m = m_pullup(m, sizeof(struct ether_arp))) == NULL) { + log(LOG_ERR, "in_arp: runt packet -- m_pullup failed\n"); + return; + } + ea = mtod(m, struct ether_arp *); op = ntohs(ea->arp_op); (void)memcpy(&isaddr, ea->arp_spa, sizeof (isaddr)); |