* 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).