android_kernel_xiaomi_sm8450/net/sched
Eric Dumazet cf9a2ce038 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@kernel.org/T/
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Link: https://lore.kernel.org/r/20230123084552.574396-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-02-01 08:23:25 +01:00
..
act_api.c net/sched: act_api: Notify user space if any actions were flushed before error 2022-07-07 17:52:18 +02:00
act_bpf.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_connmark.c netfilter: conntrack: Fix data-races around ct mark 2022-12-02 17:40:00 +01:00
act_csum.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_ct.c netfilter: conntrack: Fix data-races around ct mark 2022-12-02 17:40:00 +01:00
act_ctinfo.c netfilter: conntrack: Fix data-races around ct mark 2022-12-02 17:40:00 +01:00
act_gact.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_gate.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
act_ife.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_ipt.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_meta_mark.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_meta_skbprio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_meta_skbtcindex.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
act_mirred.c net: sched: act_mirred: drop dst for the direction from egress to ingress 2021-11-26 10:39:16 +01:00
act_mpls.c net/sched: act_mpls: Fix warning during failed attribute validation 2023-01-18 11:44:59 +01:00
act_nat.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_pedit.c net/sched: act_pedit: sanitize shift argument before usage 2022-05-25 09:17:58 +02:00
act_police.c net/sched: act_police: more accurate MTU policing 2022-06-22 14:13:20 +02:00
act_sample.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_simple.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_skbedit.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2020-09-24 19:46:21 -07:00
act_skbmod.c net/sched: act_skbmod: Skip non-Ethernet packets 2021-07-28 14:35:40 +02:00
act_tunnel_key.c net/sched: act_tunnel_key: fix OOB write in case of IPv6 ERSPAN tunnels 2020-10-20 21:10:41 -07:00
act_vlan.c net/sched: act_vlan: Fix modify to allow 0 2021-07-14 16:56:19 +02:00
cls_api.c net: sched: fix possible refcount leak in tc_new_tfilter() 2022-09-28 11:10:37 +02:00
cls_basic.c net_sched: fix ops->bind_class() implementations 2020-01-27 10:51:43 +01:00
cls_bpf.c net_sched: fix ops->bind_class() implementations 2020-01-27 10:51:43 +01:00
cls_cgroup.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_flow.c Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
cls_flower.c net/sched: flower: fix parsing of ethertype following VLAN header 2022-04-20 09:23:11 +02:00
cls_fw.c net_sched: fix ops->bind_class() implementations 2020-01-27 10:51:43 +01:00
cls_matchall.c net: qos offload add flow status with dropped count 2020-06-19 12:53:30 -07:00
cls_route.c net_sched: cls_route: disallow handle of 0 2022-08-21 15:16:26 +02:00
cls_rsvp6.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_rsvp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cls_rsvp.h cls_rsvp: fix rsvp_policy 2020-02-01 12:25:06 -08:00
cls_tcindex.c net: sched: fix memory leak in tcindex_set_parms 2023-01-14 10:16:45 +01:00
cls_u32.c net/sched: cls_u32: fix possible leak in u32_init_knode() 2022-04-27 13:53:50 +02:00
em_canid.c net: sched: kerneldoc fixes 2020-07-13 17:20:40 -07:00
em_cmp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
em_ipset.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_ipt.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_meta.c sched: consistently handle layer3 header accesses in the presence of VLANs 2020-07-03 14:34:53 -07:00
em_nbyte.c net: sched: Replace zero-length array with flexible-array member 2020-02-29 21:27:02 -08:00
em_text.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
em_u32.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ematch.c net_sched: reject TCF_EM_SIMPLE case for complex ematch module 2023-01-14 10:16:12 +01:00
Kconfig net: sched: allow act_ct to be built without NF_NAT 2022-12-02 17:40:01 +01:00
Makefile net: qos: introduce a gate control flow action 2020-05-01 16:08:19 -07:00
sch_api.c net: sched: disallow noqueue for qdisc classes 2023-01-14 10:16:52 +01:00
sch_atm.c net: sched: atm: dont intepret cls results when asked to drop 2023-01-14 10:16:47 +01:00
sch_blackhole.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_cake.c net: sched: cake: fix null pointer access issue when cake_init() fails 2022-10-30 09:41:17 +01:00
sch_cbq.c net: sched: cbq: dont intepret cls results when asked to drop 2023-01-14 10:16:47 +01:00
sch_cbs.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_choke.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_codel.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_drr.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_dsmark.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_etf.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_ets.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_fifo.c net_sched: fix NULL deref in fifo_set_limit() 2021-10-13 10:04:26 +02:00
sch_fq_codel.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_fq_pie.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_fq.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_generic.c net/sched: fix netdevice reference leaks in attach_default_qdiscs() 2022-09-08 11:11:36 +02:00
sch_gred.c net: sched: validate stab values 2021-03-30 14:31:57 +02:00
sch_hfsc.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_hhf.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_htb.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_ingress.c net: sched: Pass ingress block to tcf_classify_ingress 2020-02-19 17:49:48 -08:00
sch_mq.c net: sched: update default qdisc visibility after Tx queue cnt changes 2021-11-18 14:03:53 +01:00
sch_mqprio.c net: sched: update default qdisc visibility after Tx queue cnt changes 2021-11-18 14:03:53 +01:00
sch_multiq.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_netem.c net/sched: sch_netem: Fix arithmetic in netem_dump() for 32-bit platforms 2022-06-29 08:59:47 +02:00
sch_pie.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_plug.c Revert "net: sched: Pass root lock to Qdisc_ops.enqueue" 2020-07-16 16:48:34 -07:00
sch_prio.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_qfq.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_red.c net: sched: Fix use after free in red_enqueue() 2022-11-10 18:14:18 +01:00
sch_sfb.c net: sched: sfb: fix null pointer access issue when sfb_init() fails 2022-10-30 09:41:17 +01:00
sch_sfq.c net: sched: validate stab values 2021-03-30 14:31:57 +02:00
sch_skbprio.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_taprio.c net/sched: sch_taprio: do not schedule in taprio_reset() 2023-02-01 08:23:25 +01:00
sch_tbf.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00
sch_teql.c net: sched: delete duplicate cleanup of backlog and qlen 2022-10-30 09:41:17 +01:00