From 9dd8a8e84c687db2613710a1df3521d49d193365 Mon Sep 17 00:00:00 2001 From: Nicholas De Nova Date: Mon, 3 Apr 2017 18:07:23 -0500 Subject: [PATCH] Check overflows in the descriptor table. --- kernel/dtable.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kernel/dtable.cpp b/kernel/dtable.cpp index 407369df..2107067e 100644 --- a/kernel/dtable.cpp +++ b/kernel/dtable.cpp @@ -89,10 +89,9 @@ bool DescriptorTable::Enlargen(int atleast) { if ( numentries == INT_MAX ) return errno = EMFILE, false; // Cannot enlargen any more. - // TODO: Modern overflow checks. - int newnumentries = INT_MAX - numentries < numentries ? - INT_MAX : - numentries ? 2 * numentries : 8; + int newnumentries = 8; + if ( numentries && __builtin_mul_overflow(2, numentries, &newnumentries) ) + newnumentries = INT_MAX; if ( newnumentries < atleast ) newnumentries = atleast; dtableent_t* newentries = new dtableent_t[newnumentries];