Check overflows in the descriptor table.

This commit is contained in:
Nicholas De Nova 2017-04-03 18:07:23 -05:00
parent 2876c44ce7
commit 9dd8a8e84c
1 changed files with 3 additions and 4 deletions

View File

@ -89,10 +89,9 @@ bool DescriptorTable::Enlargen(int atleast)
{ {
if ( numentries == INT_MAX ) if ( numentries == INT_MAX )
return errno = EMFILE, false; // Cannot enlargen any more. return errno = EMFILE, false; // Cannot enlargen any more.
// TODO: Modern overflow checks. int newnumentries = 8;
int newnumentries = INT_MAX - numentries < numentries ? if ( numentries && __builtin_mul_overflow(2, numentries, &newnumentries) )
INT_MAX : newnumentries = INT_MAX;
numentries ? 2 * numentries : 8;
if ( newnumentries < atleast ) if ( newnumentries < atleast )
newnumentries = atleast; newnumentries = atleast;
dtableent_t* newentries = new dtableent_t[newnumentries]; dtableent_t* newentries = new dtableent_t[newnumentries];