Changli Gao
2010-Dec-25 13:41 UTC
[Bridge] [PATCH] net: bridge: check the length of skb after nf_bridge_maybe_copy_header()
Since nf_bridge_maybe_copy_header() may change the length of skb,
we should check the length of skb after it to handle the ppoe skbs.
Signed-off-by: Changli Gao <xiaosuo at gmail.com>
---
net/bridge/br_forward.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index 2bd11ec..ee64287 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -41,17 +41,13 @@ static inline unsigned packet_length(const struct sk_buff
*skb)
int br_dev_queue_push_xmit(struct sk_buff *skb)
{
- /* drop mtu oversized packets except gso */
- if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
+ /* ip_fragment doesn't copy the MAC header */
+ if (nf_bridge_maybe_copy_header(skb) ||
+ (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb)))
{
kfree_skb(skb);
- else {
- /* ip_fragment doesn't copy the MAC header */
- if (nf_bridge_maybe_copy_header(skb))
- kfree_skb(skb);
- else {
- skb_push(skb, ETH_HLEN);
- dev_queue_xmit(skb);
- }
+ } else {
+ skb_push(skb, ETH_HLEN);
+ dev_queue_xmit(skb);
}
return 0;
David Miller
2010-Dec-31 19:10 UTC
[Bridge] [PATCH] net: bridge: check the length of skb after nf_bridge_maybe_copy_header()
From: Changli Gao <xiaosuo at gmail.com> Date: Sat, 25 Dec 2010 21:41:30 +0800> Since nf_bridge_maybe_copy_header() may change the length of skb, > we should check the length of skb after it to handle the ppoe skbs. > > Signed-off-by: Changli Gao <xiaosuo at gmail.com>This is really strange. packet_length() subtracts VLAN_HLEN from the value it returns, so the correct fix seems to be to make this function handle the PPPOE case too. Otherwise I suspect you have many other functions to fix as well. I'm not applying this patch.
Changli Gao
2011-Jan-03 10:44 UTC
[Bridge] [PATCH] net: bridge: check the length of skb after nf_bridge_maybe_copy_header()
On Sat, Jan 1, 2011 at 3:10 AM, David Miller <davem at davemloft.net> wrote:> From: Changli Gao <xiaosuo at gmail.com> > Date: Sat, 25 Dec 2010 21:41:30 +0800 > >> Since nf_bridge_maybe_copy_header() may change the length of skb, >> we should check the length of skb after it to handle the ppoe skbs. >> >> Signed-off-by: Changli Gao <xiaosuo at gmail.com> > > This is really strange. > > packet_length() subtracts VLAN_HLEN from the value it returns, so the > correct fix seems to be to make this function handle the PPPOE case > too. >It is correct. The actual MTU of 802.1q frame is 4 bytes larger. For example, the MTU of ethernet is normally 1500, however the actual MTU of the 802.1Q is 1504. Please see this patch: http://git.kernel.org/?p=linux/kernel/git/davem/net-next-2.6.git;a=commitdiff;h=c893b8066c7bf6156e4d760e5acaf4c148e37190;hp=3c0fef0b7d36e5f8d3ea3731a8228102274e3c23> Otherwise I suspect you have many other functions to fix as well. > > I'm not applying this patch. >-- Regards, Changli Gao(xiaosuo at gmail.com)