TencentOS-kernel/net/sched
Eric Dumazet 5c524113a4 net_sched: reject silly cell_log in qdisc_get_rtab()
commit e4bedf48aaa5552bc1f49703abd17606e7e6e82a upstream.

iproute2 probably never goes beyond 8 for the cell exponent,
but stick to the max shift exponent for signed 32bit.

UBSAN reported:
UBSAN: shift-out-of-bounds in net/sched/sch_api.c:389:22
shift exponent 130 is too large for 32-bit type 'int'
CPU: 1 PID: 8450 Comm: syz-executor586 Not tainted 5.11.0-rc3-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:79 [inline]
 dump_stack+0x183/0x22e lib/dump_stack.c:120
 ubsan_epilogue lib/ubsan.c:148 [inline]
 __ubsan_handle_shift_out_of_bounds+0x432/0x4d0 lib/ubsan.c:395
 __detect_linklayer+0x2a9/0x330 net/sched/sch_api.c:389
 qdisc_get_rtab+0x2b5/0x410 net/sched/sch_api.c:435
 cbq_init+0x28f/0x12c0 net/sched/sch_cbq.c:1180
 qdisc_create+0x801/0x1470 net/sched/sch_api.c:1246
 tc_modify_qdisc+0x9e3/0x1fc0 net/sched/sch_api.c:1662
 rtnetlink_rcv_msg+0xb1d/0xe60 net/core/rtnetlink.c:5564
 netlink_rcv_skb+0x1f0/0x460 net/netlink/af_netlink.c:2494
 netlink_unicast_kernel net/netlink/af_netlink.c:1304 [inline]
 netlink_unicast+0x7de/0x9b0 net/netlink/af_netlink.c:1330
 netlink_sendmsg+0xaa6/0xe90 net/netlink/af_netlink.c:1919
 sock_sendmsg_nosec net/socket.c:652 [inline]
 sock_sendmsg net/socket.c:672 [inline]
 ____sys_sendmsg+0x5a2/0x900 net/socket.c:2345
 ___sys_sendmsg net/socket.c:2399 [inline]
 __sys_sendmsg+0x319/0x400 net/socket.c:2432
 do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
 entry_SYSCALL_64_after_hwframe+0x44/0xa9

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Acked-by: Cong Wang <cong.wang@bytedance.com>
Link: https://lore.kernel.org/r/20210114160637.1660597-1-eric.dumazet@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-04-12 12:51:40 +08:00
..
Kconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Makefile Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
act_api.c net_sched: remove a redundant goto chain check 2021-03-16 16:38:14 +08:00
act_bpf.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_connmark.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_csum.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_ct.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_ctinfo.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_gact.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_ife.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_ipt.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_meta_mark.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
act_meta_skbprio.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
act_meta_skbtcindex.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
act_mirred.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_mpls.c net/sched: act_mpls: ensure LSE is pullable before reading it 2021-03-16 16:41:57 +08:00
act_nat.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_pedit.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_police.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_sample.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_simple.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_skbedit.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_skbmod.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
act_tunnel_key.c net/sched: act_tunnel_key: fix OOB write in case of IPv6 ERSPAN tunnels 2021-03-16 16:38:17 +08:00
act_vlan.c net_sched: defer tcf_idr_insert() in tcf_action_init_1() 2021-03-16 16:38:07 +08:00
cls_api.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
cls_basic.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_bpf.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_cgroup.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_flow.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
cls_flower.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
cls_fw.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_matchall.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_route.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_rsvp.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_rsvp.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_rsvp6.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cls_tcindex.c net_sched: avoid shift-out-of-bounds in tcindex_set_parms() 2021-04-12 12:51:39 +08:00
cls_u32.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
em_canid.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
em_cmp.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
em_ipset.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
em_ipt.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
em_meta.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
em_nbyte.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
em_text.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
em_u32.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
ematch.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_api.c net_sched: reject silly cell_log in qdisc_get_rtab() 2021-04-12 12:51:40 +08:00
sch_atm.c net_sched: fix a memory leak in atm_tc_init() 2021-03-16 16:31:44 +08:00
sch_blackhole.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_cake.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
sch_cbq.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_cbs.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_choke.c net: sched: prevent invalid Scell_log shift count 2021-04-12 12:51:09 +08:00
sch_codel.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_drr.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_dsmark.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00
sch_etf.c sched: etf: do not assume all sockets are full blown 2021-03-16 16:26:52 +08:00
sch_fifo.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_fq.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_fq_codel.c fq_codel: fix TCA_FQ_CODEL_DROP_BATCH_SIZE sanity checks 2021-03-16 16:27:33 +08:00
sch_generic.c net: sch_generic: fix the missing new qdisc assignment bug 2021-03-16 16:41:00 +08:00
sch_gred.c net: sched: prevent invalid Scell_log shift count 2021-04-12 12:51:09 +08:00
sch_hfsc.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_hhf.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_htb.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_ingress.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_mq.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_mqprio.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_multiq.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_netem.c netem: fix zero division in tabledist 2021-03-16 16:39:31 +08:00
sch_pie.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_plug.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_prio.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_qfq.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_red.c net: sched: prevent invalid Scell_log shift count 2021-04-12 12:51:09 +08:00
sch_sfb.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_sfq.c net: sched: prevent invalid Scell_log shift count 2021-04-12 12:51:09 +08:00
sch_skbprio.c net_sched: sch_skbprio: add message validation to skbprio_change() 2021-03-16 16:27:34 +08:00
sch_taprio.c net/sched: sch_taprio: ensure to reset/destroy all child qdiscs 2021-04-12 12:51:10 +08:00
sch_tbf.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
sch_teql.c sched: consistently handle layer3 header accesses in the presence of VLANs 2021-03-16 16:31:44 +08:00