]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: sched: tapr: prevent cycle_time == 0 in parse_taprio_schedule
authorDu Cheng <ducheng2@gmail.com>
Fri, 16 Apr 2021 23:30:46 +0000 (07:30 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 May 2021 08:08:23 +0000 (10:08 +0200)
[ Upstream commit ed8157f1ebf1ae81a8fa2653e3f20d2076fad1c9 ]

There is a reproducible sequence from the userland that will trigger a WARN_ON()
condition in taprio_get_start_time, which causes kernel to panic if configured
as "panic_on_warn". Catch this condition in parse_taprio_schedule to
prevent this condition.

Reported as bug on syzkaller:
https://syzkaller.appspot.com/bug?extid=d50710fd0873a9c6b40c

Reported-by: syzbot+d50710fd0873a9c6b40c@syzkaller.appspotmail.com
Signed-off-by: Du Cheng <ducheng2@gmail.com>
Acked-by: Cong Wang <cong.wang@bytedance.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/sched/sch_taprio.c

index 09116be9951137d79d5fcf6d0f6adf5cf96ae93f..a4de4853c79de11ad2694488af7b2971b7d22650 100644 (file)
@@ -900,6 +900,12 @@ static int parse_taprio_schedule(struct taprio_sched *q, struct nlattr **tb,
 
                list_for_each_entry(entry, &new->entries, list)
                        cycle = ktime_add_ns(cycle, entry->interval);
+
+               if (!cycle) {
+                       NL_SET_ERR_MSG(extack, "'cycle_time' can never be 0");
+                       return -EINVAL;
+               }
+
                new->cycle_time = cycle;
        }