Patch "net/sched: sch_taprio: do not schedule in taprio_reset()" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/sched: sch_taprio: do not schedule in taprio_reset()

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-sched-sch_taprio-do-not-schedule-in-taprio_reset.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f03a0695383bace6d7af8d44768db75104d1def8
Author: Eric Dumazet <edumazet@xxxxxxxxxx>
Date:   Mon Jan 23 08:45:52 2023 +0000

    net/sched: sch_taprio: do not schedule in taprio_reset()
    
    [ Upstream commit ea4fdbaa2f7798cb25adbe4fd52ffc6356f097bb ]
    
    As reported by syzbot and hinted by Vinicius, I should not have added
    a qdisc_synchronize() call in taprio_reset()
    
    taprio_reset() can be called with qdisc spinlock held (and BH disabled)
    as shown in included syzbot report [1].
    
    Only taprio_destroy() needed this synchronization, as explained
    in the blamed commit changelog.
    
    [1]
    
    BUG: scheduling while atomic: syz-executor150/5091/0x00000202
    2 locks held by syz-executor150/5091:
    Modules linked in:
    Preemption disabled at:
    [<0000000000000000>] 0x0
    Kernel panic - not syncing: scheduling while atomic: panic_on_warn set ...
    CPU: 1 PID: 5091 Comm: syz-executor150 Not tainted 6.2.0-rc3-syzkaller-00219-g010a74f52203 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/12/2023
    Call Trace:
    <TASK>
    __dump_stack lib/dump_stack.c:88 [inline]
    dump_stack_lvl+0xd1/0x138 lib/dump_stack.c:106
    panic+0x2cc/0x626 kernel/panic.c:318
    check_panic_on_warn.cold+0x19/0x35 kernel/panic.c:238
    __schedule_bug.cold+0xd5/0xfe kernel/sched/core.c:5836
    schedule_debug kernel/sched/core.c:5865 [inline]
    __schedule+0x34e4/0x5450 kernel/sched/core.c:6500
    schedule+0xde/0x1b0 kernel/sched/core.c:6682
    schedule_timeout+0x14e/0x2a0 kernel/time/timer.c:2167
    schedule_timeout_uninterruptible kernel/time/timer.c:2201 [inline]
    msleep+0xb6/0x100 kernel/time/timer.c:2322
    qdisc_synchronize include/net/sch_generic.h:1295 [inline]
    taprio_reset+0x93/0x270 net/sched/sch_taprio.c:1703
    qdisc_reset+0x10c/0x770 net/sched/sch_generic.c:1022
    dev_reset_queue+0x92/0x130 net/sched/sch_generic.c:1285
    netdev_for_each_tx_queue include/linux/netdevice.h:2464 [inline]
    dev_deactivate_many+0x36d/0x9f0 net/sched/sch_generic.c:1351
    dev_deactivate+0xed/0x1b0 net/sched/sch_generic.c:1374
    qdisc_graft+0xe4a/0x1380 net/sched/sch_api.c:1080
    tc_modify_qdisc+0xb6b/0x19a0 net/sched/sch_api.c:1689
    rtnetlink_rcv_msg+0x43e/0xca0 net/core/rtnetlink.c:6141
    netlink_rcv_skb+0x165/0x440 net/netlink/af_netlink.c:2564
    netlink_unicast_kernel net/netlink/af_netlink.c:1330 [inline]
    netlink_unicast+0x547/0x7f0 net/netlink/af_netlink.c:1356
    netlink_sendmsg+0x91b/0xe10 net/netlink/af_netlink.c:1932
    sock_sendmsg_nosec net/socket.c:714 [inline]
    sock_sendmsg+0xd3/0x120 net/socket.c:734
    ____sys_sendmsg+0x712/0x8c0 net/socket.c:2476
    ___sys_sendmsg+0x110/0x1b0 net/socket.c:2530
    __sys_sendmsg+0xf7/0x1c0 net/socket.c:2559
    do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    
    Fixes: 3a415d59c1db ("net/sched: sch_taprio: fix possible use-after-free")
    Link: https://lore.kernel.org/netdev/167387581653.2747.13878941339893288655.git-patchwork-notify@xxxxxxxxxx/T/
    Reported-by: syzbot <syzkaller@xxxxxxxxxxxxxxxx>
    Signed-off-by: Eric Dumazet <edumazet@xxxxxxxxxx>
    Cc: Vinicius Costa Gomes <vinicius.gomes@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20230123084552.574396-1-edumazet@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
index 9a11a499ea2d..c322a61eaeea 100644
--- a/net/sched/sch_taprio.c
+++ b/net/sched/sch_taprio.c
@@ -1700,7 +1700,6 @@ static void taprio_reset(struct Qdisc *sch)
 	int i;
 
 	hrtimer_cancel(&q->advance_timer);
-	qdisc_synchronize(sch);
 
 	if (q->qdiscs) {
 		for (i = 0; i < dev->num_tx_queues; i++)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux