Thread (10 messages) 10 messages, 3 authors, 2014-03-27

RE: [PATCH net 3/3] xen-netback: BUG_ON in xenvif_rx_action() not catching overflow

From: Paul Durrant <hidden>
Date: 2014-03-27 12:30:20

-----Original Message-----
From: Ian Campbell
Sent: 27 March 2014 12:28
To: Paul Durrant
Cc: xen-devel@lists.xen.org; netdev@vger.kernel.org; Wei Liu; Sander
Eikelenboom
Subject: Re: [PATCH net 3/3] xen-netback: BUG_ON in xenvif_rx_action()
not catching overflow

On Thu, 2014-03-27 at 12:23 +0000, Paul Durrant wrote:
quoted
The BUG_ON to catch ring overflow in xenvif_rx_action() makes the
assumption
quoted
that meta_slots_used == ring slots used. This is not the case for GSO
packets.
Can you explain why not here please.
Sure. I'll add an explanation.

  Paul
 
quoted
 This patch changes the test to actually check ring slots.

Signed-off-by: Paul Durrant <redacted>
Cc: Ian Campbell <redacted>
Cc: Wei Liu <redacted>
Cc: Sander Eikelenboom <redacted>
---
 drivers/net/xen-netback/netback.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-
netback/netback.c
quoted
index ac35489..ae7351f 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -481,6 +481,8 @@ static void xenvif_rx_action(struct xenvif *vif)

 	while ((skb = skb_dequeue(&vif->rx_queue)) != NULL) {
 		RING_IDX max_slots_needed;
+		RING_IDX old_req_cons;
+		RING_IDX ring_slots_used;
 		int i;

 		/* We need a cheap worse case estimate for the number of
@@ -520,8 +522,12 @@ static void xenvif_rx_action(struct xenvif *vif)
 			vif->rx_last_skb_slots = 0;

 		sco = (struct skb_cb_overlay *)skb->cb;
+
+		old_req_cons = vif->rx.req_cons;
 		sco->meta_slots_used = xenvif_gop_skb(skb, &npo);
-		BUG_ON(sco->meta_slots_used > max_slots_needed);
+		ring_slots_used = vif->rx.req_cons - old_req_cons;
+
+		BUG_ON(ring_slots_used > max_slots_needed);

 		__skb_queue_tail(&rxq, skb);
 	}
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help