Project

General

Profile

Actions

Bug #22315

closed

heap-use-after-free in String unpack with a block that mutates the receiver

Bug #22315: heap-use-after-free in String unpack with a block that mutates the receiver

Added by danielchong (Daniel Chong) 6 days ago. Updated about 11 hours ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
4.1.0-dev
[ruby-core:126719]

Description

PoC:

s = "C" * 4000
s.unpack("L*") { s.clear }

Asan (truncated):

ERROR: AddressSanitizer: heap-use-after-free on address 0x... 
READ of size 4 ... thread T0
    #3 bary_unpack_internal   bignum.c:1179
    #4 rb_integer_unpack      bignum.c:3753
    #5 pack_unpack_internal   pack.c:1415        <-- USE
0x... is located 4 bytes inside of 4001-byte region [...]
freed by thread T0 here:
    #2 ruby_xfree_sized       gc.c:6295
    #3 str_discard            string.c:2840
    #4 rb_str_clear           string.c:6678
    ...
    #16 rb_yield              vm_eval.c
    #17 pack_unpack_internal  pack.c:1416         <-- FREE (user block via rb_yield)
Actions

Also available in: PDF Atom