Index: sys/mbuf.h =================================================================== RCS file: /space2/ncvs/src/sys/sys/mbuf.h,v retrieving revision 1.115 diff -u -p -r1.115 mbuf.h --- sys/mbuf.h 26 Mar 2003 10:35:31 -0000 1.115 +++ sys/mbuf.h 26 Mar 2003 15:11:12 -0000 @@ -332,6 +332,15 @@ struct mbstat { #define M_WRITABLE(m) (!((m)->m_flags & M_RDONLY) && (!((m)->m_flags \ & M_EXT) || !MEXT_IS_REF(m))) + +/* + * Sanity check an mbuf chain containing a packet. + */ +#define M_PKTCHECK(m) do { \ + KASSERT((m)->m_flags & M_PKTHDR, ("no packet header")); \ + KASSERT((m)->m_pkthdr.len == m_length(m, NULL), ("bad header length"));\ +} while (0) + /* * Set the m_data pointer of a newly-allocated mbuf (m_get/MGET) to place * an object of the specified size at the end of the mbuf, longword aligned. Index: net/if_var.h =================================================================== RCS file: /space2/ncvs/src/sys/net/if_var.h,v retrieving revision 1.58 diff -u -p -r1.58 if_var.h --- net/if_var.h 1 Jan 2003 18:48:54 -0000 1.58 +++ net/if_var.h 26 Mar 2003 15:33:16 -0000 @@ -229,6 +229,7 @@ typedef void if_init_f_t(void *); #define _IF_QLEN(ifq) ((ifq)->ifq_len) #define _IF_ENQUEUE(ifq, m) do { \ + M_PKTCHECK(m); \ (m)->m_nextpkt = NULL; \ if ((ifq)->ifq_tail == NULL) \ (ifq)->ifq_head = m; \ @@ -245,6 +246,7 @@ typedef void if_init_f_t(void *); } while (0) #define _IF_PREPEND(ifq, m) do { \ + M_PKTCHECK(m); \ (m)->m_nextpkt = (ifq)->ifq_head; \ if ((ifq)->ifq_tail == NULL) \ (ifq)->ifq_tail = (m); \