From: Alexander Chesnokov If taprio offload is configured such that none of the ports' base_time is less than S64_MAX (the initial value of earliest_base_time), then its_cycle_time remains zero and is passed to future_base_time() as cycle_time, causing division by zero in div_s64(). Add a check for its_cycle_time being zero before calling future_base_time() and return -EINVAL. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 86db36a347b4 ("net: dsa: sja1105: Implement state machine for TAS with PTP clock source") Cc: stable@vger.kernel.org Signed-off-by: Alexander Chesnokov --- drivers/net/dsa/sja1105/sja1105_tas.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/dsa/sja1105/sja1105_tas.c b/drivers/net/dsa/sja1105/sja1105_tas.c index e6153848a950..ce4b544a2b9c 100644 --- a/drivers/net/dsa/sja1105/sja1105_tas.c +++ b/drivers/net/dsa/sja1105/sja1105_tas.c @@ -62,6 +62,9 @@ static int sja1105_tas_set_runtime_params(struct sja1105_private *priv) if (!tas_data->enabled) return 0; + if (!its_cycle_time) + return -EINVAL; + /* Roll the earliest base time over until it is in a comparable * time base with the latest, then compare their deltas. * We want to enforce that all ports' base times are within -- 2.43.0