netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: CBQ(but probably u32 filter bug), kernel "freeze", at least from 3.2.0
@ 2012-09-11 22:50 Denys Fedoryshchenko
  2012-09-11 23:11 ` [PATCH] net-sched: sch_cbq: avoid infinite loop Eric Dumazet
  0 siblings, 1 reply; 3+ messages in thread
From: Denys Fedoryshchenko @ 2012-09-11 22:50 UTC (permalink / raw)
  To: netdev, Eric Dumazet

>No problem, I reproduced the bug on my dev machine, but its always
>better to have bug reporter adding its own 'Tested-by:' tag ;)
>
>Thanks
Tested-by: Denys Fedoryschenko <denys@visp.net.lb>

Thank you a lot, it fixes the problem!

---
Denys Fedoryshchenko, Network Engineer, Virtual ISP S.A.L.

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

* [PATCH] net-sched: sch_cbq: avoid infinite loop
  2012-09-11 22:50 CBQ(but probably u32 filter bug), kernel "freeze", at least from 3.2.0 Denys Fedoryshchenko
@ 2012-09-11 23:11 ` Eric Dumazet
  2012-09-12  2:21   ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Dumazet @ 2012-09-11 23:11 UTC (permalink / raw)
  To: Denys Fedoryshchenko, David Miller; +Cc: netdev

From: Eric Dumazet <edumazet@google.com>

Its possible to setup a bad cbq configuration leading to
an infinite loop in cbq_classify()

DEV_OUT=eth0
ICMP="match ip protocol 1 0xff"
U32="protocol ip u32"
DST="match ip dst"
tc qdisc add dev $DEV_OUT root handle 1: cbq avpkt 1000 \
	bandwidth 100mbit
tc class add dev $DEV_OUT parent 1: classid 1:1 cbq \
	rate 512kbit allot 1500 prio 5 bounded isolated
tc filter add dev $DEV_OUT parent 1: prio 3 $U32 \
	$ICMP $DST 192.168.3.234 flowid 1:

Reported-by: Denys Fedoryschenko <denys@visp.net.lb>
Tested-by: Denys Fedoryschenko <denys@visp.net.lb>
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
 net/sched/sch_cbq.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c
index 6aabd77..564b9fc 100644
--- a/net/sched/sch_cbq.c
+++ b/net/sched/sch_cbq.c
@@ -250,10 +250,11 @@ cbq_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
 			else if ((cl = defmap[res.classid & TC_PRIO_MAX]) == NULL)
 				cl = defmap[TC_PRIO_BESTEFFORT];
 
-			if (cl == NULL || cl->level >= head->level)
+			if (cl == NULL)
 				goto fallback;
 		}
-
+		if (cl->level >= head->level)
+			goto fallback;
 #ifdef CONFIG_NET_CLS_ACT
 		switch (result) {
 		case TC_ACT_QUEUED:

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

* Re: [PATCH] net-sched: sch_cbq: avoid infinite loop
  2012-09-11 23:11 ` [PATCH] net-sched: sch_cbq: avoid infinite loop Eric Dumazet
@ 2012-09-12  2:21   ` David Miller
  0 siblings, 0 replies; 3+ messages in thread
From: David Miller @ 2012-09-12  2:21 UTC (permalink / raw)
  To: eric.dumazet; +Cc: denys, netdev

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 12 Sep 2012 01:11:12 +0200

> From: Eric Dumazet <edumazet@google.com>
> 
> Its possible to setup a bad cbq configuration leading to
> an infinite loop in cbq_classify()
> 
> DEV_OUT=eth0
> ICMP="match ip protocol 1 0xff"
> U32="protocol ip u32"
> DST="match ip dst"
> tc qdisc add dev $DEV_OUT root handle 1: cbq avpkt 1000 \
> 	bandwidth 100mbit
> tc class add dev $DEV_OUT parent 1: classid 1:1 cbq \
> 	rate 512kbit allot 1500 prio 5 bounded isolated
> tc filter add dev $DEV_OUT parent 1: prio 3 $U32 \
> 	$ICMP $DST 192.168.3.234 flowid 1:
> 
> Reported-by: Denys Fedoryschenko <denys@visp.net.lb>
> Tested-by: Denys Fedoryschenko <denys@visp.net.lb>
> Signed-off-by: Eric Dumazet <edumazet@google.com>

Applied and queued up for -stable, thanks Eric.

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

end of thread, other threads:[~2012-09-12  2:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-11 22:50 CBQ(but probably u32 filter bug), kernel "freeze", at least from 3.2.0 Denys Fedoryshchenko
2012-09-11 23:11 ` [PATCH] net-sched: sch_cbq: avoid infinite loop Eric Dumazet
2012-09-12  2:21   ` 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).