mtd: speedtest: fix integer overflow

32-bit integers used in 'calc_speed()' may overflow and lead to
incorrect results. Use 64-bit integers instead.

Signed-off-by: David Lambert <dave@lambsys.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
David Lambert 2011-03-07 12:00:46 +02:00 committed by David Woodhouse
parent 5d9d993620
commit e70727e442

View File

@ -314,16 +314,16 @@ static inline void stop_timing(void)
static long calc_speed(void)
{
long ms, k, speed;
uint64_t k;
long ms;
ms = (finish.tv_sec - start.tv_sec) * 1000 +
(finish.tv_usec - start.tv_usec) / 1000;
k = goodebcnt * mtd->erasesize / 1024;
if (ms)
speed = (k * 1000) / ms;
else
speed = 0;
return speed;
if (ms == 0)
return 0;
k = goodebcnt * (mtd->erasesize / 1024) * 1000;
do_div(k, ms);
return k;
}
static int scan_for_bad_eraseblocks(void)