
Análise de uma condição de corrida use-after-free em FSRendezvousServer::PublishRx e ConsumeTx, em que Close() pode liberar um objeto FSStreamReg entre a liberação do mutex e a aquisição do lock.
FSRendezvousServer::PublishRx e FSRendezvousServer::ConsumeTx desreferenciam um objeto FSStreamReg com um padrão idêntico e defeituoso: adquirem o mutex do servidor, confirmam que o objeto ainda está na lista, liberam o mutex e então adquirem o lock do próprio objeto — sem nada entre essas etapas que o mantenha vivo.
Como nenhuma referência é tomada, existe uma janela estreita entre a liberação do mutex do servidor e a aquisição do lock do próprio objeto durante a qual FSRendezvousServer::Close() pode liberar o objeto, levando a um use-after-free.
Crédito: @zoverin