Re: [BUG] NULL pointer dereference in skb_dequeue

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <jeffrey.t.kirsher@...>
Cc: <netdev@...>, <emil.s.tantilov@...>
Date: Friday, August 1, 2008 - 9:20 pm

From: David Miller <davem@davemloft.net>
Date: Fri, 01 Aug 2008 18:03:37 -0700 (PDT)


I see what's going on.

Once we decide on a root qdisc to process, we shouldn't use
qdisc_root_lock() since that will resample qdisc->dev_queue->qdisc
which might be different.

This points out a core problem, and I might need to add a
root_qdisc backpointer to struct Qdisc to make this all work
out sanely for all cases.

Anyways, please try this patch:

pkt_sched: Use qdisc_lock() on already sampled root qdisc.

Don't use qdisc_root_lock() in these cases as the root
qdisc could have been changed, and we'd thus lock the
wrong object.

Signed-off-by: David S. Miller <davem@davemloft.net>

diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 9c9cd4d..113b6b0 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -29,7 +29,7 @@
 /* Main transmission queue. */
 
 /* Modifications to data participating in scheduling must be protected with
- * qdisc_root_lock(qdisc) spinlock.
+ * qdisc_lock(qdisc) spinlock.
  *
  * The idea is the following:
  * - enqueue, dequeue are serialized via qdisc root lock
@@ -126,7 +126,7 @@ static inline int qdisc_restart(struct Qdisc *q)
 	if (unlikely((skb = dequeue_skb(q)) == NULL))
 		return 0;
 
-	root_lock = qdisc_root_lock(q);
+	root_lock = qdisc_lock(q);
 
 	/* And release qdisc */
 	spin_unlock(root_lock);
@@ -659,7 +659,7 @@ static bool some_qdisc_is_running(struct net_device *dev, int lock)
 
 		dev_queue = netdev_get_tx_queue(dev, i);
 		q = dev_queue->qdisc;
-		root_lock = qdisc_root_lock(q);
+		root_lock = qdisc_lock(q);
 
 		if (lock)
 			spin_lock_bh(root_lock);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[BUG] NULL pointer dereference in skb_dequeue, Jeff Kirsher, (Fri Aug 1, 7:40 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Fri Aug 1, 9:03 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Fri Aug 1, 9:20 pm)
RE: [BUG] NULL pointer dereference in skb_dequeue, Tantilov, Emil S, (Sat Aug 2, 5:36 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sat Aug 2, 9:37 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sat Aug 2, 12:27 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Sat Aug 2, 3:18 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sat Aug 2, 4:19 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sun Aug 3, 5:29 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Sun Aug 3, 5:56 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sun Aug 3, 6:08 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sun Aug 3, 5:50 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Sat Aug 2, 3:22 pm)
RE: [BUG] NULL pointer dereference in skb_dequeue, Tantilov, Emil S, (Sat Aug 2, 3:45 pm)
RE: [BUG] NULL pointer dereference in skb_dequeue, Tantilov, Emil S, (Sat Aug 2, 5:46 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Sat Aug 2, 10:26 pm)
RE: [BUG] NULL pointer dereference in skb_dequeue, Tantilov, Emil S, (Fri Aug 8, 3:38 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, David Miller, (Sat Aug 9, 3:29 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sat Aug 9, 6:32 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Sun Aug 10, 3:04 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Mon Aug 11, 6:01 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Paul E. McKenney, (Mon Aug 11, 7:26 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Tue Aug 12, 2:36 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Paul E. McKenney, (Tue Aug 12, 9:42 am)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Tue Aug 12, 2:09 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Paul E. McKenney, (Tue Aug 12, 4:18 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Jarek Poplawski, (Tue Aug 12, 5:15 pm)
Re: [BUG] NULL pointer dereference in skb_dequeue, Paul E. McKenney, (Tue Aug 12, 6:33 pm)