summaryrefslogtreecommitdiffstats
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2001-03-27 12:34:58 +0000
committeryar <yar@FreeBSD.org>2001-03-27 12:34:58 +0000
commitb3a36066dfcabf2654b9bba67630b9ef2b74ff97 (patch)
tree6068a1b006553ea12163d3ba5169fd9666b8e537 /sys/netinet/if_ether.c
parentaa4ec850c7f2a6ae7d70bc9693a50be7d771ef85 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c6
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));
OpenPOWER on IntegriCloud