Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Apr 2005 09:39:27 -0700
From:      Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
To:        Gleb Smirnoff <glebius@FreeBSD.org>
Cc:        net@FreeBSD.org
Subject:   Re: if_tap unaligned access problem
Message-ID:  <427111BF.2050607@savvis.net>
In-Reply-To: <20050428135120.GB21428@cell.sick.ru>
References:  <20050428135120.GB21428@cell.sick.ru>

index | next in thread | previous in thread | raw e-mail

Hello,

> A quick question about if_tap, the tapwrite function
> ( which copies an ethernet frame into an mbuf using uiotombuf )
> is broken on alpha and sparc64.
> The 14 byte ethernet header causes the rest of the frame to
> be misaligned on 4 byte boundaries. This causes crashes in
> various other parts of the kernel. The solution would be to
> shift the mbuf by two bytes, but I am not quite sure where
> this should happen.

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

/sys/kern/uipc_syscalls.c
/sys/net/if_tap.c
/sys/net/if_tun.c
/sys/netgraph/ng_device.c

> If_tun which is almost the same code has no such problem because
> it lacks the 14 byte ethernet header. Openbsd has a combined
> tun/tap driver, with some alignment hacks to fix this.

yes, that is true.

> Should I create a pr for this problem, or is there a simple
> quick fix possible ?

you probably should file pr. (1) and (2) above are quick fixes. (3) is 
more complicated and, maybe, not desirable.

max


help

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