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>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?427111BF.2050607>