m_pad was introduced with an "ipsec package" import in openbsd
in 1997.  m_inject was introduced in 1999 but this code wasn't
changed.

m_pad is equivalent to m_inject with an offset equal to the
actual data length.

Doesn't break anything here, but additional tests won't harm.

OK?

Index: netinet/ip_esp.c
===================================================================
RCS file: /home/cvs/src/sys/netinet/ip_esp.c,v
retrieving revision 1.112
diff -u -p -r1.112 ip_esp.c
--- netinet/ip_esp.c    22 Sep 2010 13:40:05 -0000      1.112
+++ netinet/ip_esp.c    22 Sep 2010 15:47:38 -0000
@@ -932,9 +932,10 @@ esp_output(struct mbuf *m, struct tdb *t
         * 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);
+       mo = m_inject(m, m->m_pkthdr.len, padding + alen, M_DONTWAIT);
+       pad = mtod(mo, u_char *);
        if (pad == NULL) {
-               DPRINTF(("esp_output(): m_pad() failed for SA %s/%08x\n",
+               DPRINTF(("esp_output(): m_inject failed for SA %s/%08x\n",
                    ipsp_address(tdb->tdb_dst), ntohl(tdb->tdb_spi)));
                return ENOBUFS;
        }
@@ -1178,77 +1179,4 @@ checkreplaywindow32(u_int32_t seq, u_int
 
        *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;
 }
Index: netinet/ip_ipsp.h
===================================================================
RCS file: /home/cvs/src/sys/netinet/ip_ipsp.h,v
retrieving revision 1.144
diff -u -p -r1.144 ip_ipsp.h
--- netinet/ip_ipsp.h   9 Jul 2010 16:58:06 -0000       1.144
+++ netinet/ip_ipsp.h   22 Sep 2010 15:49:32 -0000
@@ -624,9 +624,6 @@ extern int tcp_signature_tdb_input(struc
 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);

Reply via email to