
Análisis de una condición de carrera de uso después de liberación (use-after-free) en FSRendezvousServer::PublishRx y ConsumeTx, donde Close() puede liberar un objeto FSStreamReg entre la liberación del mutex y la adquisición del bloqueo.
FSRendezvousServer::PublishRx y FSRendezvousServer::ConsumeTx desreferencian un objeto FSStreamReg con un patrón idéntico y defectuoso: toman el mutex del servidor, confirman que el objeto sigue en la lista, liberan el mutex y luego toman el propio lock del objeto, sin nada entre medias que lo mantenga vivo.
Dado que no se toma ninguna referencia, existe una ventana estrecha entre la liberación del mutex del servidor y la toma del propio lock del objeto durante la cual FSRendezvousServer::Close() puede liberar el objeto, lo que provoca un use-after-free.
Crédito: @zoverin