aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_bif_info.c
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2011-03-09 10:42:58 +0100
committerBjörn Gustavsson <bjorn@erlang.org>2011-03-09 14:01:03 +0100
commit1aa1166460dc22791ab909bb0a8565b2e12a1820 (patch)
treee87a13f69aa6b7a335b77e66e357d7662a60b305 /erts/emulator/beam/erl_bif_info.c
parentc668eba73f72e8407158592bc65f37d5cc8aaaa3 (diff)
downloadotp-1aa1166460dc22791ab909bb0a8565b2e12a1820.tar.gz
otp-1aa1166460dc22791ab909bb0a8565b2e12a1820.tar.bz2
otp-1aa1166460dc22791ab909bb0a8565b2e12a1820.zip
Fix 18 exabyte memory allocation failure
The new_binary() function takes a size argument that is an int. In the 64-bit emulator (sizeof(int) == 4, sizeof(Uint) == 8), any sizes >= 0x8000000 become 0xffffffff80000000 and above and triggers a memory allocation failure. Change the type of the size argument to Uint, and change any callers that cast the argument to an int. Correction-by: Jon Meredith
Diffstat (limited to 'erts/emulator/beam/erl_bif_info.c')
-rw-r--r--erts/emulator/beam/erl_bif_info.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 4a717d7271..a7b5920425 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -1545,7 +1545,7 @@ process_info_aux(Process *BIF_P,
case am_backtrace: {
erts_dsprintf_buf_t *dsbufp = erts_create_tmp_dsbuf(0);
erts_stack_dump(ERTS_PRINT_DSBUF, (void *) dsbufp, rp);
- res = new_binary(BIF_P, (byte *) dsbufp->str, (int) dsbufp->str_len);
+ res = new_binary(BIF_P, (byte *) dsbufp->str, dsbufp->str_len);
erts_destroy_tmp_dsbuf(dsbufp);
hp = HAlloc(BIF_P, 3);
break;
@@ -2074,7 +2074,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
ASSERT(dsbufp && dsbufp->str);
- res = new_binary(BIF_P, (byte *) dsbufp->str, (int) dsbufp->str_len);
+ res = new_binary(BIF_P, (byte *) dsbufp->str, dsbufp->str_len);
erts_destroy_info_dsbuf(dsbufp);
BIF_RET(res);
} else if (ERTS_IS_ATOM_STR("dist_ctrl", BIF_ARG_1)) {