diff options
author | Austin Seipp <austin@well-typed.com> | 2014-04-23 03:41:44 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-04-27 04:18:20 -0500 |
commit | 111b8454cc1b64da5b9816b89d79f44a8ae24355 (patch) | |
tree | 7305f94cc03d429ebff0a2b9a2f231bbc66ee1e8 | |
parent | 95da409719bab6f92229dc1a632c471e248d2fdd (diff) | |
download | haskell-111b8454cc1b64da5b9816b89d79f44a8ae24355.tar.gz |
rts: Fix possible int overflow in resize_nursery
n_capabilities is declared as unsigned int (32bit), and so multiplication
is 32-bit before being stored in a 64bit integer (StgWord).
Instead, cast n_capabilities to StgWord before multiplying.
Discovered by Coverity. CID 43164.
Signed-off-by: Austin Seipp <austin@well-typed.com>
-rw-r--r-- | rts/sm/GC.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/rts/sm/GC.c b/rts/sm/GC.c index 1ecbaf5ab1..d22a31eccb 100644 --- a/rts/sm/GC.c +++ b/rts/sm/GC.c @@ -1613,7 +1613,8 @@ resize_generations (void) static void resize_nursery (void) { - const StgWord min_nursery = RtsFlags.GcFlags.minAllocAreaSize * n_capabilities; + const StgWord min_nursery = + RtsFlags.GcFlags.minAllocAreaSize * (StgWord)n_capabilities; if (RtsFlags.GcFlags.generations == 1) { // Two-space collector: |