Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Apr 2005 11:28:19 -0700
From:      John-Mark Gurney <gurney_j@resnet.uoregon.edu>
To:        Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
Cc:        Sam Leffler <sam@errno.com>
Subject:   Re: if_tap unaligned access problem
Message-ID:  <20050429182819.GP2670@funkthat.com>
In-Reply-To: <4272743A.2030003@savvis.net>
References:  <20050428135120.GB21428@cell.sick.ru> <427111BF.2050607@savvis.net> <42712BAA.4070201@elischer.org> <42715269.3010306@errno.com> <Pine.SOC.4.61.0504291132520.28551@tea.blinkenlights.nl> <4272743A.2030003@savvis.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Maksim Yevmenkin wrote this message on Fri, Apr 29, 2005 at 10:51 -0700:
> [...]
> 
> >>>>i think we have few options here:
> >>>>
> >>>>1) revert back original tapwrite function that was changed in v. 
> >>>>1.48 and set offset to 2 bytes in top mbuf
> >>>>
> >>>>2) change current version of tapwrite so it would m_prepend and 
> >>>>m_pullup mbuf after m_uiotombuf
> >>>>
> >>>>3) change m_uiotombuf to accept one more parameter - mbuf offset at 
> >>>>which data should be copied. there are not that many users of 
> >>>>m_uiotombuf
> 
> please find and review the attached patch (untested) that implements 
> option (3) above.
> 
> >I could try to port the changes netbsd made using m_copyup and
> >send you the resulting patchfile. IPv4 has already been serviced by
> >John-Mark Gurney in perforce. 
> 
> having these changes in the tree is a good thing, but it will require 
> more testing. maybe for now we could get away with simpler changes?

> @@ -1342,12 +1342,15 @@
>  		total = min(uio->uio_resid, len);
>  	else
>  		total = uio->uio_resid;
> +	if (align >= MHLEN)
> +		goto nospace;
>  	if (total > MHLEN)

Shouldn't this check be total + align > MHLEN?

>  		m_final = m_getcl(how, MT_DATA, M_PKTHDR);
>  	else
>  		m_final = m_gethdr(how, MT_DATA);
>  	if (m_final == NULL)
>  		goto nospace;
> +	m_adj(m_final, align);
>  	m_new = m_final;
>  	while (progress < total) {
>  		length = total - progress;

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



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