Skip to contentSkip to conversation

pkt_sched: sch_generic: Fix oops in sch_teql

PATCH In review Jarek Poplawski 2 participants 2 messages Oct 18, 2008 – Oct 20, 2008

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pkt_sched: sch_generic: Fix oops in sch_teql

pkt_sched: sch_generic: Fix oops in sch_teql

After these commands:

# modprobe sch_teql
# tc qdisc add dev eth0 root teql0
# tc qdisc del dev eth0 root
we get an oops in teql_destroy() when spin_lock is taken from a null
qdisc_sleeping pointer. It's because at the moment teql0 dev haven't
been activated yet, and a qdisc_root_sleeping() is pointing to noop
qdisc's netdev_queue with qdisc_sleeping uninitialized. This patch
fixes this both for noop and noqueue netdev_queues to avoid similar
problems in the future.
[regression in 2.6.27]

---

 net/sched/sch_generic.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
net/sched/sch_generic.c +2 -0
index 7b5572d..93cd30c 100644
@@ -326,6 +326,7 @@ struct Qdisc_ops noop_qdisc_ops __read_mostly = {
 
 static struct netdev_queue noop_netdev_queue = {
 	.qdisc		=	&noop_qdisc,
+	.qdisc_sleeping	=	&noop_qdisc,
 };
 
 struct Qdisc noop_qdisc = {
@@ -352,6 +353,7 @@ static struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {
 static struct Qdisc noqueue_qdisc;
 static struct netdev_queue noqueue_netdev_queue = {
 	.qdisc		=	&noqueue_qdisc,
+	.qdisc_sleeping	=	&noqueue_qdisc,
 };
 
 static struct Qdisc noqueue_qdisc = {
maintainer
#1 lore raw

From: Jarek Poplawski <[email protected]>
Date: Sun, 19 Oct 2008 01:09:38 +0200

Quoted 13 lines

pkt_sched: sch_generic: Fix oops in sch_teql

After these commands:

# modprobe sch_teql
# tc qdisc add dev eth0 root teql0
# tc qdisc del dev eth0 root
we get an oops in teql_destroy() when spin_lock is taken from a null
qdisc_sleeping pointer. It's because at the moment teql0 dev haven't
been activated yet, and a qdisc_root_sleeping() is pointing to noop
qdisc's netdev_queue with qdisc_sleeping uninitialized. This patch
fixes this both for noop and noqueue netdev_queues to avoid similar
problems in the future.
Quoted 2 lines
[regression in 2.6.27]

Applied and will queue to -stable, thanks Jarek.