Skip to content

Commit

Permalink
Add boundscheck in bindingkey_eq to avoid OOB access due to data race
Browse files Browse the repository at this point in the history
  • Loading branch information
gbaraldi committed Jun 4, 2024
1 parent 4e211eb commit 7e7bb5e
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -710,13 +710,15 @@ JL_DLLEXPORT int jl_binding_resolved_p(jl_module_t *m, jl_sym_t *var)

static uint_t bindingkey_hash(size_t idx, jl_value_t *data)
{
jl_binding_t *b = (jl_binding_t*)jl_svecref(data, idx);
jl_binding_t *b = (jl_binding_t*)jl_svecref(data, idx); // This must always happen inside the lock
jl_sym_t *var = b->globalref->name;
return var->hash;
}

static int bindingkey_eq(size_t idx, const void *var, jl_value_t *data, uint_t hv)
{
if ((idx >= ((jl_svec_t*)data)->length || idx < 0))
return 0; // We got a OOB access, probably due to a data race
jl_binding_t *b = (jl_binding_t*)jl_svecref(data, idx);
jl_sym_t *name = b->globalref->name;
return var == name;
Expand Down

0 comments on commit 7e7bb5e

Please sign in to comment.