In modules/rtpengine/rtpengine_hash.c:
> + } > + > + // get first entry from entry list; jump over unused list head > + hash_index = str_hash(key); > + entry = rtpengine_hash_table->entry_list[hash_index]; > + last_entry = entry; > + > + // lock > + lock_get(rtpengine_hash_lock); > + while (entry) { > + // if key found, return entry > + if (str_equal(&entry->callid, (str *)key)) { > + // unlock > + lock_release(rtpengine_hash_lock); > + > + return entry;
Returning the raw hash table entries straight from the hash table is dangerous as the entries are protected by the lock and so this opens the door to a race condition. A lookup might return one entry while the same entry is being freed in another process. Either return a copy of the entries or simply return its contents (the node should be enough).
—
Reply to this email directly or view it on GitHub.