Check for overflow before it occurs. Also add check for

negative numbers.

Suggested by:	ache
Approved by:	kib (mentor)
This commit is contained in:
Andrey V. Elsukov 2010-06-21 12:50:54 +00:00
parent 60ae52f785
commit 02fc66090b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=209392

View File

@ -139,7 +139,7 @@ g_parse_lba(const char *lbastr, unsigned sectorsize, off_t *sectors)
assert(sectors != NULL);
number = (off_t)strtoimax(lbastr, &s, 0);
if (s == lbastr)
if (s == lbastr || number < 0)
return (EINVAL);
mult = 1;
@ -187,7 +187,7 @@ g_parse_lba(const char *lbastr, unsigned sectorsize, off_t *sectors)
if (*s != '\0')
return (EINVAL);
done:
if (mult * unit < mult || number * mult * unit < number)
if ((OFF_MAX / unit) < mult || (OFF_MAX / mult / unit) < number)
return (ERANGE);
number *= mult * unit;
if (number % sectorsize)