Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 May 2002 11:56:35 -0700
From:      Luigi Rizzo <rizzo@icir.org>
To:        Archie Cobbs <archie@dellroad.org>
Cc:        freebsd-net@FreeBSD.ORG
Subject:   Re: m_split() considered harmful
Message-ID:  <20020531115635.B45530@iguana.icir.org>
In-Reply-To: <200205311829.g4VITKM01684@arch20m.dellroad.org>; from archie@dellroad.org on Fri, May 31, 2002 at 11:29:20AM -0700
References:  <200205311829.g4VITKM01684@arch20m.dellroad.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 31, 2002 at 11:29:20AM -0700, Archie Cobbs wrote:
...

if you add the additional Note, then it might be worthwhile that the
writability of the returned buffer should be checked in the
standard way (whatever macro it is, i forget the name).

	cheers
	luigi

> 
> --- kern/uipc_mbuf.c.orig	Fri May 31 11:17:52 2002
> +++ kern/uipc_mbuf.c	Fri May 31 11:27:42 2002
> @@ -1194,6 +1194,10 @@
>   * Partition an mbuf chain in two pieces, returning the tail --
>   * all but the first len0 bytes.  In case of failure, it returns NULL and
>   * attempts to restore the chain to its original state.
> + *
> + * Note that the returned mbuf must be treated as read-only, because
> + * it will end up sharing an mbuf cluster with the original mbuf if the
> + * "breaking point" happens to lie within a cluster mbuf.
>   */
>  struct mbuf *
>  m_split(m0, len0, wait)
> @@ -1247,7 +1251,6 @@
>  		else
>  			(*(m->m_ext.ext_ref))(m->m_ext.ext_buf,
>  						m->m_ext.ext_size);
> -		m->m_ext.ext_size = 0; /* For Accounting XXXXXX danger */
>  		n->m_data = m->m_data + len;
>  	} else {
>  		bcopy(mtod(m, caddr_t) + len, mtod(n, caddr_t), remain);
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-net" in the body of the message

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020531115635.B45530>