
Анализ гонки use-after-free в FSRendezvousServer::PublishRx и ConsumeTx, где Close() может освободить объект FSStreamReg между освобождением мьютекса и захватом блокировки.
FSRendezvousServer::PublishRx и FSRendezvousServer::ConsumeTx разыменовывают объект FSStreamReg с идентичным, некорректным шаблоном: захватывают мьютекс сервера, подтверждают, что объект всё ещё находится в списке, отпускают мьютекс, а затем захватывают собственную блокировку объекта — и между этими действиями ничто не удерживает объект от освобождения.
Поскольку ссылка не захватывается, существует узкое окно между освобождением мьютекса сервера и захватом собственной блокировки объекта, в течение которого FSRendezvousServer::Close() может освободить объект, что приводит к use-after-free.
Благодарность: @zoverin