lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1346920806.13121.180.camel@edumazet-glaptop>
Date:	Thu, 06 Sep 2012 10:40:06 +0200
From:	Eric Dumazet <eric.dumazet@...il.com>
To:	Denys Fedoryshchenko <denys@...p.net.lb>
Cc:	netdev@...r.kernel.org
Subject: Re: CBQ(but probably u32 filter bug), kernel "freeze", at least
 from 3.2.0

On Tue, 2012-08-28 at 03:59 -0700, Eric Dumazet wrote:
> On Tue, 2012-08-28 at 07:50 +0300, Denys Fedoryshchenko wrote:
> > Hi
> > 
> > Got information from friend, confirmed that it crashed at least two my 
> > boxes also :)
> > 3.0.5-rc1 is working fine, 3.4.1 , 3.2.0 from ubuntu  - crashing
> > No watchdog fired, and didn't got yet significant debugging 
> > information.
> > 
> > Very easy to reproduce:
> > 1)run the script
> > 2)ping 192.168.3.234
> > 
> > script:
> > 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:
> > tc qdisc add dev $DEV_OUT parent 1:1 sfq perturb 10
> 
> Not sure what your friend expected from this buggy configuration.
> 
> It probably never worked at all.
> 
> CBQ needs at least one child class and one leaf class.
> 
> This scripts creates a loop inside CBQ, so cpu is probably looping in
> cbq_enqueue() (or more exactly cbq_classify()), as instructed by the
> sysadmin ;)
> 
> u32 (or sfq) seems ok.
> 
> Could you try the following patch ?
> 
> Thanks !
> 
> 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:
> 

Hi Denys

Any feedback on the suggested patch ?

Thanks !


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ