Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Jun 2009 15:10:57 -0700
From:      Kip Macy <kmacy@freebsd.org>
To:        Andre Oppermann <andre@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Sam Leffler <sam@freebsd.org>
Subject:   Re: svn commit: r194643 - head/sys/kern
Message-ID:  <3c1674c90906221510s9b62e25w3a5d41c21bd512e1@mail.gmail.com>
In-Reply-To: <200906221935.n5MJZdLJ050266@svn.freebsd.org>
References:  <200906221935.n5MJZdLJ050266@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jun 22, 2009 at 12:35 PM, Andre Oppermann<andre@freebsd.org> wrote:
> Author: andre
> Date: Mon Jun 22 19:35:39 2009
> New Revision: 194643
> URL: http://svn.freebsd.org/changeset/base/194643
>
> Log:
> =A0Update m_demote:
> =A0- remove HT_HEADER test (MT_HEADER =3D=3D MT_DATA for some time now)
> =A0- be more pedantic about m_nextpkt in other than first mbuf
> =A0- update m_flags to be retained
>
> Modified:
> =A0head/sys/kern/uipc_mbuf.c
>
> Modified: head/sys/kern/uipc_mbuf.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/sys/kern/uipc_mbuf.c =A0 Mon Jun 22 19:09:48 2009 =A0 =A0 =A0 =
=A0(r194642)
> +++ head/sys/kern/uipc_mbuf.c =A0 Mon Jun 22 19:35:39 2009 =A0 =A0 =A0 =
=A0(r194643)
> @@ -320,11 +320,13 @@ m_demote(struct mbuf *m0, int all)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0m->m_flags &=3D ~M_PKTHDR;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bzero(&m->m_pkthdr, sizeof=
(struct pkthdr));
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (m->m_type =3D=3D MT_HEADER)
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 m->m_type =3D MT_DATA;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (m !=3D m0 && m->m_nextpkt !=3D NULL)
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (m !=3D m0 && m->m_nextpkt !=3D NULL) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 KASSERT(m->m_nextpkt =3D=3D=
 NULL,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ("%s: m_nextpkt not=
 NULL", __func__));
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 m_freem(m->m_nextpkt);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0m->m_nextpkt =3D NULL;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 m->m_flags =3D m->m_flags & (M_EXT|M_EOR|M_=
RDONLY|M_FREELIST);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 m->m_flags =3D m->m_flags & (M_EXT|M_RDONLY=
|M_FREELIST|M_NOFREE);
> =A0 =A0 =A0 =A0}
>


Freeing an mbuf that shouldn't be there is not a safe change. You
don't know that m_nextpkt isn't pointing at some random value in
memory and that doing so isn't going to lead to some inexplicable
crash some time later. This is not a good strategy from a support
standpoint.

I've cc'd sam in case he feels differently.


Cheers,
Kip



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