Date: Tue, 20 Feb 2001 09:28:18 +0200 From: Ruslan Ermilov <ru@FreeBSD.ORG> To: mouss <usebsd@free.fr> Cc: idobarnea@NewMail.Net, hackers@FreeBSD.ORG, andrew@cnsec.co.za Subject: Re: Bug in creating ICMP error messages in FreeBSD4.2 Message-ID: <20010220092818.A25414@sunbay.com> In-Reply-To: <4.3.0.20010219202101.05cf15a0@pop.free.fr>; from usebsd@free.fr on Mon, Feb 19, 2001 at 08:26:56PM %2B0100 References: <3a912cee.150.0@NewMail.Net> <4.3.0.20010219202101.05cf15a0@pop.free.fr>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Feb 19, 2001 at 08:26:56PM +0100, mouss wrote: > At 14:25 19/02/01 +0200, idobarnea@NewMail.Net wrote: > >Hi, > > I encountered the following problem in the 4.2 version. > >In ip_forward, the following lines intend to save the mbuf in case we want to > >send ICMP error later: > > mcopy = m_copy(m, 0, imin((int)ip->ip_len, 64)); > > if (mcopy && (mcopy->m_flags & M_EXT)) > > m_copydata(mcopy, 0, sizeof(struct ip), mtod(mcopy, caddr_t)); > > > >Later on, before sending the ICMP packet we do: > > if (mcopy->m_flags & M_EXT) > > m_copyback(mcopy, 0, sizeof(struct ip), mtod(mcopy, caddr_t)); > > > >The problem as I understand it is that the m_copydata and m_copyback, actually > >do nothing (It just > >copies from mcopy to itself). > > I'm speaking from memory, so don't take this for more than it is:) > > As far as I understand: > m_copym copies the mbuf, but if there is external storage, only pointers > are copied. so you get two mbuf chains with a common external storage. > m_copydata will copy the external storage. > that's why there are both m_copym and m_copydata. so while > m_copydata(mcopy, .... (mcopy...)) > is surprising, it's not nothing. it copies the data pointed to in mcopy. > I wrote this code, and the above said is right. -- Ruslan Ermilov Oracle Developer/DBA, ru@sunbay.com Sunbay Software AG, ru@FreeBSD.org FreeBSD committer, +380.652.512.251 Simferopol, Ukraine http://www.FreeBSD.org The Power To Serve http://www.oracle.com Enabling The Information Age To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010220092818.A25414>