diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 5f1a1bb24aa..81ab6e1a16f 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -851,15 +851,18 @@ udp_output(inp, m, addr, control, td) goto release; } } + /* - * Calculate data length and get a mbuf - * for UDP and IP headers. + * Calculate data length and get a mbuf for UDP, IP, and possible + * link-layer headers. */ - M_PREPEND(m, sizeof(struct udpiphdr), M_DONTWAIT); - if (m == 0) { + M_PREPEND(m, sizeof(struct udpiphdr) + max_linkhdr, M_DONTWAIT); + if (m == NULL) { error = ENOBUFS; goto release; } + m->m_data += max_linkhdr; + m->m_len -= max_linkhdr; /* * Fill in mbuf with extended UDP header