- if (((struct ip *)ui)->ip_hl > (sizeof (struct ip) >> 2))
- ip_stripoptions((struct ip *)ui, (struct mbuf *)0);
+ if (iphlen > sizeof (struct ip))
+ ip_stripoptions(m, (struct mbuf *)0);
+ if (m->m_len < sizeof (struct udpiphdr)) {
+ if ((m = m_pullup(m, sizeof (struct udpiphdr))) == 0) {
+ udpstat.udps_hdrops++;
+ return;
+ }
+ ui = mtod(m, struct udpiphdr *);
+ }