netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] bonding: Fix corrupted queue_mapping
@ 2012-06-08  5:05 Tom Herbert
  2012-06-08  5:46 ` David Miller
  2012-06-08  5:57 ` Eric Dumazet
  0 siblings, 2 replies; 17+ messages in thread
From: Tom Herbert @ 2012-06-08  5:05 UTC (permalink / raw)
  To: davem, netdev

In the transmit path of the bonding driver, skb->cb is used to
stash the skb->queue_mapping so that the bonding device can set its
own queue mapping.  This value becomes corrupted since the skb->cb is
also used in __dev_xmit_skb.

When transmitting through bonding driver, bond_select_queue is
called from dev_queue_xmit.  In bond_select_queue the original
skb->queue_mapping is copied into skb->cb (via bond_queue_mapping)
and skb->queue_mapping is overwritten with the bond driver queue.
Subsequently in dev_queue_xmit, __dev_xmit_skb is called which writes
the packet length into skb->cb, thereby overwriting the stashed
queue mappping.  In bond_dev_queue_xmit (called from hard_start_xmit),
the queue mapping for the skb is set to the stashed value which is now
the skb length and hence is an invalid queue for the slave device.

Fix is to set bond_queue_mapping to skb->cb +
sizeof((struct qdisc_skb_cb)

Signed-off-by: Tom Herbert <therbert@google.com>
---
 drivers/net/bonding/bond_main.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 2ee8cf9..044c1c0 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -76,6 +76,7 @@
 #include <net/route.h>
 #include <net/net_namespace.h>
 #include <net/netns/generic.h>
+#include <net/sch_generic.h>
 #include "bonding.h"
 #include "bond_3ad.h"
 #include "bond_alb.h"
@@ -381,7 +382,8 @@ struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr)
 	return next;
 }
 
-#define bond_queue_mapping(skb) (*(u16 *)((skb)->cb))
+#define bond_queue_mapping(skb) (*(u16 *)((skb)->cb + \
+    sizeof(struct qdisc_skb_cb)))
 
 /**
  * bond_dev_queue_xmit - Prepare skb for xmit.
-- 
1.7.7.3

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-06-08 16:16 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-08  5:05 [PATCH] bonding: Fix corrupted queue_mapping Tom Herbert
2012-06-08  5:46 ` David Miller
2012-06-08  5:57 ` Eric Dumazet
2012-06-08  6:02   ` David Miller
2012-06-08  6:11     ` Eric Dumazet
2012-06-08  6:15       ` David Miller
2012-06-08  6:47         ` Eric Dumazet
2012-06-08  7:23           ` Eric Dumazet
2012-06-08  7:42             ` John Fastabend
2012-06-08  7:48               ` Eric Dumazet
2012-06-08  7:52                 ` Eric Dumazet
2012-06-08  7:46             ` Eric Dumazet
2012-06-08 15:04             ` Tom Herbert
2012-06-08 15:11               ` Eric Dumazet
2012-06-08 16:16                 ` John Fastabend
2012-06-08  6:17     ` Eric Dumazet
2012-06-08  6:22       ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).