diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c index 717ae51d94a0ae4f45317e8ba86f51ab4ac41aa6..58c9fbe5fd42baf78c3942b6dfc69b0358af5f2b 100644 --- a/net/sched/sch_taprio.c +++ b/net/sched/sch_taprio.c @@ -1158,10 +1158,19 @@ static int parse_taprio_schedule(struct taprio_sched *q, struct nlattr **tb, NL_SET_ERR_MSG(extack, "'cycle_time' can never be 0"); return -EINVAL; } + if ((u32)cycle != cycle) { + pr_err("cycle_time (%Lu) is too big (1)\n", cycle); + NL_SET_ERR_MSG(extack, "'cycle_time' is too big"); + return -EINVAL; + } new->cycle_time = cycle; } - + if ((u32)new->cycle_time != new->cycle_time) { + pr_err("cycle_time (%Lu) is too big (2)\n", new->cycle_time); + NL_SET_ERR_MSG(extack, "'cycle_time' is too big"); + return -EINVAL; + } taprio_calculate_gate_durations(q, new); return 0; @@ -1347,7 +1356,7 @@ static void setup_txtime(struct taprio_sched *q, struct sched_gate_list *sched, ktime_t base) { struct sched_entry *entry; - u32 interval = 0; + u64 interval = 0; list_for_each_entry(entry, &sched->entries, list) { entry->next_txtime = ktime_add_ns(base, interval);