Date: Mon, 19 Feb 2001 20:26:56 +0100 From: mouss <usebsd@free.fr> To: idobarnea@NewMail.Net, hackers@freebsd.org Cc: andrew@cnsec.co.za Subject: Re: Bug in creating ICMP error messages in FreeBSD4.2 Message-ID: <4.3.0.20010219202101.05cf15a0@pop.free.fr> In-Reply-To: <3a912cee.150.0@NewMail.Net>
next in thread | previous in thread | raw e-mail | index | archive | help
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. cheers, mouss 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?4.3.0.20010219202101.05cf15a0>