Skip to content

JIT: Fix use-after-free register bug in do_get_tail#2178

Open
pguyot wants to merge 1 commit intoatomvm:mainfrom
pguyot:w11/fix-use-after-free-register-do_get_tail
Open

JIT: Fix use-after-free register bug in do_get_tail#2178
pguyot wants to merge 1 commit intoatomvm:mainfrom
pguyot:w11/fix-use-after-free-register-do_get_tail

Conversation

@pguyot
Copy link
Collaborator

@pguyot pguyot commented Mar 10, 2026

TailBytesReg0 is freed at line 3151 via {free, TailBytesReg0} in the call_primitive for PRIM_TERM_SUB_BINARY_HEAP_SIZE. After that call, the physical register is no longer preserved across subsequent calls and may be reallocated.

Line 3163 was using TailBytesReg0 (the freed register) instead of TailBytesReg1 (freshly loaded at line 3162 via get_array_element).

Both registers were potentially always the same or have the same value across backends and this bug hasn't been observed.

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later

TailBytesReg0 is freed at line 3151 via {free, TailBytesReg0} in the
call_primitive for PRIM_TERM_SUB_BINARY_HEAP_SIZE. After that call,
the physical register is no longer preserved across subsequent calls
and may be reallocated.

Line 3163 was using TailBytesReg0 (the freed register) instead of
TailBytesReg1 (freshly loaded at line 3162 via get_array_element).

Both registers were potentially always the same or have the same
value across backends and this bug hasn't been observed.

Signed-off-by: Paul Guyot <pguyot@kallisys.net>
@pguyot pguyot force-pushed the w11/fix-use-after-free-register-do_get_tail branch from c4d78bf to a0aae20 Compare March 10, 2026 22:45
@pguyot pguyot changed the title Fix use-after-free register bug in do_get_tail JIT: Fix use-after-free register bug in do_get_tail Mar 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant