net: sched: prevent invalid Scell_log shift count
authorRandy Dunlap <rdunlap@infradead.org>
Fri, 25 Dec 2020 06:23:44 +0000 (22:23 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Dec 2020 22:52:54 +0000 (14:52 -0800)
commitbd1248f1ddbc48b0c30565fce897a3b6423313b8
treec08520951cacf6b5c2912d59a138662a68fcd962
parenta533b70a657c03137dd49cbcfee70aac086ab2b1
net: sched: prevent invalid Scell_log shift count

Check Scell_log shift size in red_check_params() and modify all callers
of red_check_params() to pass Scell_log.

This prevents a shift out-of-bounds as detected by UBSAN:
  UBSAN: shift-out-of-bounds in ./include/net/red.h:252:22
  shift exponent 72 is too large for 32-bit type 'int'

Fixes: 8afa10cbe281 ("net_sched: red: Avoid illegal values")
Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Reported-by: syzbot+97c5bd9cc81eca63d36e@syzkaller.appspotmail.com
Cc: Nogah Frankel <nogahf@mellanox.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Cc: Cong Wang <xiyou.wangcong@gmail.com>
Cc: Jiri Pirko <jiri@resnulli.us>
Cc: netdev@vger.kernel.org
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/red.h
net/sched/sch_choke.c
net/sched/sch_gred.c
net/sched/sch_red.c
net/sched/sch_sfq.c