summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Belopuhov <mikeb@cvs.openbsd.org>2010-09-23 16:34:10 +0000
committerMike Belopuhov <mikeb@cvs.openbsd.org>2010-09-23 16:34:10 +0000
commit6866f56672456f72b87687f9c41628c5f78cd947 (patch)
tree80f755389005687e4737a49f9f9b118bed48e1bb
parentce1f4a5f6f3a33c84387cf640fab528621e8ded8 (diff)
remove m_pad in favor of m_inject as it's equivalent to m_inject
with an offset equal to the actual data length. ok henning blambert
-rw-r--r--sys/netinet/ip_esp.c82
-rw-r--r--sys/netinet/ip_ipsp.h5
2 files changed, 6 insertions, 81 deletions
diff --git a/sys/netinet/ip_esp.c b/sys/netinet/ip_esp.c
index 240f9747aae..d16c0e0afec 100644
--- a/sys/netinet/ip_esp.c
+++ b/sys/netinet/ip_esp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_esp.c,v 1.112 2010/09/22 13:40:05 mikeb Exp $ */
+/* $OpenBSD: ip_esp.c,v 1.113 2010/09/23 16:33:48 mikeb Exp $ */
/*
* The authors of this code are John Ioannidis (ji@tla.org),
* Angelos D. Keromytis (kermit@csd.uch.gr) and
@@ -932,12 +932,13 @@ esp_output(struct mbuf *m, struct tdb *tdb, struct mbuf **mp, int skip,
* Add padding -- better to do it ourselves than use the crypto engine,
* although if/when we support compression, we'd have to do that.
*/
- pad = (u_char *) m_pad(m, padding + alen);
- if (pad == NULL) {
- DPRINTF(("esp_output(): m_pad() failed for SA %s/%08x\n",
+ mo = m_inject(m, m->m_pkthdr.len, padding + alen, M_DONTWAIT);
+ if (mo == NULL) {
+ DPRINTF(("esp_output(): m_inject failed for SA %s/%08x\n",
ipsp_address(tdb->tdb_dst), ntohl(tdb->tdb_spi)));
return ENOBUFS;
}
+ pad = mtod(mo, u_char *);
/* Self-describing or random padding ? */
if (!(tdb->tdb_flags & TDBF_RANDOMPADDING))
@@ -1179,76 +1180,3 @@ checkreplaywindow32(u_int32_t seq, u_int32_t initial, u_int32_t *lastseq,
*bitmap |= (((u_int32_t) 1) << diff);
return 0;
}
-
-/*
- * m_pad(m, n) pads <m> with <n> bytes at the end. The packet header
- * length is updated, and a pointer to the first byte of the padding
- * (which is guaranteed to be all in one mbuf) is returned.
- */
-
-caddr_t
-m_pad(struct mbuf *m, int n)
-{
- struct mbuf *m0, *m1;
- int len, pad;
- caddr_t retval;
-
- if (n <= 0) { /* No stupid arguments. */
- DPRINTF(("m_pad(): pad length invalid (%d)\n", n));
- m_freem(m);
- return NULL;
- }
-
- len = m->m_pkthdr.len;
- pad = n;
- m0 = m;
-
- while (m0->m_len < len) {
- len -= m0->m_len;
- m0 = m0->m_next;
- }
-
- if (m0->m_len != len) {
- DPRINTF(("m_pad(): length mismatch (should be %d instead of "
- "%d)\n", m->m_pkthdr.len,
- m->m_pkthdr.len + m0->m_len - len));
-
- m_freem(m);
- return NULL;
- }
-
- /* Check for zero-length trailing mbufs, and find the last one. */
- for (m1 = m0; m1->m_next; m1 = m1->m_next) {
- if (m1->m_next->m_len != 0) {
- DPRINTF(("m_pad(): length mismatch (should be %d "
- "instead of %d)\n", m->m_pkthdr.len,
- m->m_pkthdr.len + m1->m_next->m_len));
-
- m_freem(m);
- return NULL;
- }
-
- m0 = m1->m_next;
- }
-
- if ((m0->m_flags & M_EXT) ||
- m0->m_data + m0->m_len + pad >= &(m0->m_dat[MLEN])) {
- /* Add an mbuf to the chain. */
- MGET(m1, M_DONTWAIT, MT_DATA);
- if (m1 == 0) {
- m_freem(m0);
- DPRINTF(("m_pad(): cannot append\n"));
- return NULL;
- }
-
- m0->m_next = m1;
- m0 = m1;
- m0->m_len = 0;
- }
-
- retval = m0->m_data + m0->m_len;
- m0->m_len += pad;
- m->m_pkthdr.len += pad;
-
- return retval;
-}
diff --git a/sys/netinet/ip_ipsp.h b/sys/netinet/ip_ipsp.h
index d0cbe90d1ee..e2521bbfc48 100644
--- a/sys/netinet/ip_ipsp.h
+++ b/sys/netinet/ip_ipsp.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_ipsp.h,v 1.144 2010/07/09 16:58:06 reyk Exp $ */
+/* $OpenBSD: ip_ipsp.h,v 1.145 2010/09/23 16:34:09 mikeb Exp $ */
/*
* The authors of this code are John Ioannidis (ji@tla.org),
* Angelos D. Keromytis (kermit@csd.uch.gr),
@@ -624,9 +624,6 @@ extern int tcp_signature_tdb_input(struct mbuf *, struct tdb *, int,
extern int tcp_signature_tdb_output(struct mbuf *, struct tdb *,
struct mbuf **, int, int);
-/* Padding */
-extern caddr_t m_pad(struct mbuf *, int);
-
/* Replay window */
extern int checkreplaywindow32(u_int32_t, u_int32_t, u_int32_t *, u_int32_t,
u_int32_t *, int);