aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/beam_disasm.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2018-02-09 10:37:48 +0100
committerBjörn Gustavsson <[email protected]>2018-02-12 13:31:27 +0100
commita48ec9a2750260845f035c2e968244cb5cd33a3d (patch)
tree9a44bfd630ad11aa5ac03a8b273ccbc796704672 /lib/compiler/src/beam_disasm.erl
parentcd9b6371a13c37f8f82586fcd82f212d306d8fad (diff)
downloadotp-a48ec9a2750260845f035c2e968244cb5cd33a3d.tar.gz
otp-a48ec9a2750260845f035c2e968244cb5cd33a3d.tar.bz2
otp-a48ec9a2750260845f035c2e968244cb5cd33a3d.zip
Fix unsafe use of 'allocate' where 'allocate_zero' should be used
The more aggressive optimizations of 'allocate_zero' introduced in cb6fc15c35c7e could produce unsafe code such as the following: {allocate,0,1}. {bif,element,{f,0},[{integer,1},{x,0}],{x,0}}. The code is not safe because if element/2 fails, the runtime system may scan the stack and find garbage that looks like a catch tag, and would most probably crash. Fix the problem by making beam_utils:is_killed/3 be more conservative when asked whether a Y register will be killed. Also fix an unsafe move upwards of an allocation instruction in beam_block.
Diffstat (limited to 'lib/compiler/src/beam_disasm.erl')
0 files changed, 0 insertions, 0 deletions