net_sched: skbprio: Remove overly strict queue assertions
[ Upstream commitce8fe975fd] In the current implementation, skbprio enqueue/dequeue contains an assertion that fails under certain conditions when SKBPRIO is used as a child qdisc under TBF with specific parameters. The failure occurs because TBF sometimes peeks at packets in the child qdisc without actually dequeuing them when tokens are unavailable. This peek operation creates a discrepancy between the parent and child qdisc queue length counters. When TBF later receives a high-priority packet, SKBPRIO's queue length may show a different value than what's reflected in its internal priority queue tracking, triggering the assertion. The fix removes this overly strict assertions in SKBPRIO, they are not necessary at all. Reported-by: syzbot+a3422a19b05ea96bee18@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=a3422a19b05ea96bee18 Fixes:aea5f654e6("net/sched: add skbprio scheduler") Cc: Nishanth Devarajan <ndev2021@gmail.com> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Acked-by: Paolo Abeni <pabeni@redhat.com> Link: https://patch.msgid.link/20250329222536.696204-2-xiyou.wangcong@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1927d0bcd5
commit
864ca690ff
@@ -121,8 +121,6 @@ static int skbprio_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
/* Check to update highest and lowest priorities. */
|
||||
if (skb_queue_empty(lp_qdisc)) {
|
||||
if (q->lowest_prio == q->highest_prio) {
|
||||
/* The incoming packet is the only packet in queue. */
|
||||
BUG_ON(sch->q.qlen != 1);
|
||||
q->lowest_prio = prio;
|
||||
q->highest_prio = prio;
|
||||
} else {
|
||||
@@ -154,7 +152,6 @@ static struct sk_buff *skbprio_dequeue(struct Qdisc *sch)
|
||||
/* Update highest priority field. */
|
||||
if (skb_queue_empty(hpq)) {
|
||||
if (q->lowest_prio == q->highest_prio) {
|
||||
BUG_ON(sch->q.qlen);
|
||||
q->highest_prio = 0;
|
||||
q->lowest_prio = SKBPRIO_MAX_PRIORITY - 1;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user