]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: Up convert to uint64_t before doing math
authorDonald Sharp <sharpd@nvidia.com>
Fri, 18 Feb 2022 15:55:16 +0000 (10:55 -0500)
committermergify-bot <noreply@mergify.com>
Wed, 23 Feb 2022 17:34:57 +0000 (17:34 +0000)
Intentionally up convert uint8_t and uint32_t values
to a uint64_t before doing math to make Coverity happy.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit c960cb28f72bce27dbf0aad75e1a41b85cf1a614)

eigrpd/eigrp_metric.c

index ea62f9d1becc8105f95fe978b7e1ad57c408426c..7ccafd4fa8cd897f6d2227eb4203e841f5bfa179 100644 (file)
@@ -86,19 +86,24 @@ eigrp_metric_t eigrp_calculate_metrics(struct eigrp *eigrp,
         */
 
        if (eigrp->k_values[0])
-               composite += (eigrp->k_values[0] * metric.bandwidth);
+               composite += ((eigrp_metric_t)eigrp->k_values[0] *
+                             (eigrp_metric_t)metric.bandwidth);
        if (eigrp->k_values[1])
-               composite += ((eigrp->k_values[1] * metric.bandwidth)
-                             / (256 - metric.load));
+               composite += (((eigrp_metric_t)eigrp->k_values[1] *
+                              (eigrp_metric_t)metric.bandwidth) /
+                             (256 - metric.load));
        if (eigrp->k_values[2])
-               composite += (eigrp->k_values[2] * metric.delay);
+               composite += ((eigrp_metric_t)eigrp->k_values[2] *
+                             (eigrp_metric_t)metric.delay);
        if (eigrp->k_values[3] && !eigrp->k_values[4])
-               composite *= eigrp->k_values[3];
+               composite *= (eigrp_metric_t)eigrp->k_values[3];
        if (!eigrp->k_values[3] && eigrp->k_values[4])
-               composite *= (eigrp->k_values[4] / metric.reliability);
+               composite *= ((eigrp_metric_t)eigrp->k_values[4] /
+                             (eigrp_metric_t)metric.reliability);
        if (eigrp->k_values[3] && eigrp->k_values[4])
-               composite *= ((eigrp->k_values[4] / metric.reliability)
-                             + eigrp->k_values[3]);
+               composite *= (((eigrp_metric_t)eigrp->k_values[4] /
+                              (eigrp_metric_t)metric.reliability) +
+                             (eigrp_metric_t)eigrp->k_values[3]);
 
        composite =
                (composite <= EIGRP_METRIC_MAX) ? composite : EIGRP_METRIC_MAX;