ruby/internal
Peter Zhu 92dd9734a9 Fix use-after-free in ep in Proc#dup for ifunc procs
[Bug #20950]

ifunc proc has the ep allocated in the cfunc_proc_t which is the data of
the TypedData object. If an ifunc proc is duplicated, the ep points to
the ep of the source object. If the source object is freed, then the ep
of the duplicated object now points to a freed memory region. If we try
to use the ep we could crash.

For example, the following script crashes:

    p = { a: 1 }.to_proc
    100.times do
      p = p.dup
      GC.start
      p.call
    rescue ArgumentError
    end

This commit changes ifunc proc to also duplicate the ep when it is duplicated.
2024-12-13 10:10:03 -05:00
..
array.h Optimized instruction for Array#freeze 2024-09-05 12:46:02 +02:00
basic_operators.h Optimize instructions when creating an array just to call include? (#12123) 2024-11-26 14:31:08 -05:00
bignum.h Stop exporting symbols for MJIT 2023-03-06 21:59:23 -08:00
bits.h Add integer overflow check macros for add/sub as well as mul 2024-11-09 00:08:03 +09:00
class.h Rename size_pool -> heap 2024-10-03 21:20:09 +01:00
cmdlineopt.h [Feature #19790] Rename BUGREPORT_PATH as CRASH_REPORT 2023-09-25 22:57:28 +09:00
compar.h Introduce BOP_CMP for optimized comparison 2022-12-06 12:37:23 -08:00
compile.h Move the PC regardless of the leaf flag (#8232) 2023-08-16 20:28:33 -07:00
compilers.h
complex.h
cont.h Free everything at shutdown 2023-12-07 15:52:35 -05:00
dir.h
enc.h
encoding.h string.c: Directly create strings with the correct encoding 2024-11-13 13:32:32 +01:00
enum.h
enumerator.h
error.h Implement rb_bug_without_die 2024-12-12 14:07:56 -05:00
eval.h [Bug #20342] Consider wrapped load in main methods 2024-04-05 01:33:08 +09:00
file.h Revert "reuse open(2) from rb_file_load_ok on POSIX-like system" 2023-02-27 09:24:45 -08:00
fixnum.h rb_fix_mul_fix needs internal/bits.h for MUL_OVERFLOW_FIXNUM_P 2024-10-08 23:29:49 +09:00
gc.h Add rb_gc_impl_active_gc_name to gc/gc_impl.h 2024-12-06 10:22:03 -05:00
hash.h Optimized instruction for Hash#freeze 2024-09-05 12:46:02 +02:00
imemo.h Remove 1 allocation in Enumerable#each_with_index (#11868) 2024-10-11 10:22:44 -04:00
inits.h Merge rb_objspace_alloc and Init_heap. 2024-04-04 15:00:57 +01:00
io.h Introduce Fiber::Scheduler#blocking_operation_wait. (#12016) 2024-11-20 19:40:17 +13:00
load.h
loadpath.h
math.h
missing.h Free environ when RUBY_FREE_AT_EXIT 2024-01-11 10:09:53 -05:00
numeric.h Faster Integer.sqrt for large bignum 2024-03-18 13:52:27 +09:00
object.h Move rb_class_allocate_instance from gc.c to object.c 2024-02-14 13:43:02 -05:00
parse.h Make default parser enum and define getter/setter 2024-10-02 20:43:40 +09:00
proc.h Fix use-after-free in ep in Proc#dup for ifunc procs 2024-12-13 10:10:03 -05:00
process.h Put rb_fork back into process.c 2023-05-21 23:00:27 +09:00
ractor.h Fix shared GC with -DRUBY_DEBUG 2024-10-24 16:08:46 +01:00
random.h Free everything at shutdown 2023-12-07 15:52:35 -05:00
range.h Implement Struct on VWA 2023-06-05 15:47:16 -04:00
rational.h Don't redefine RB_OBJ_WRITE 2023-01-18 08:49:32 -05:00
re.h Stop allocating unused backref strings at defined? 2023-06-27 23:14:10 +09:00
ruby_parser.h Change return value of gets function to be rb_parser_string_t * instead of VALUE 2024-05-04 11:59:10 +09:00
sanitizers.h Fix ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS for MSAN 2024-12-04 14:29:24 -05:00
serial.h
signal.h Revert "hijack SIGCHLD handler for internal use" 2024-04-04 21:48:14 +09:00
st.h Move internal ST functions to internal/st.h 2023-12-25 10:41:12 -05:00
static_assert.h
string.h YJIT: Specialize String#[] (String#slice) with fixnum arguments (#12069) 2024-11-13 12:25:09 -05:00
struct.h Remove unused references to the transient heap 2023-07-13 14:48:14 -04:00
symbol.h Free everything at shutdown 2023-12-07 15:52:35 -05:00
thread.h introduce rb_ec_check_ints() 2024-11-08 18:02:46 +09:00
time.h
transcode.h Free everything at shutdown 2023-12-07 15:52:35 -05:00
util.h
variable.h Fix compaction for generic ivars 2023-11-24 13:29:04 -05:00
vm.h Remove 1 allocation in Enumerable#each_with_index (#11868) 2024-10-11 10:22:44 -04:00
warnings.h