
Analisi di una race use-after-free in FSRendezvousServer::PublishRx e ConsumeTx, in cui Close() può liberare un oggetto FSStreamReg tra il rilascio del mutex e l'acquisizione del lock.
FSRendezvousServer::PublishRx e FSRendezvousServer::ConsumeTx dereferenziano un oggetto FSStreamReg con un pattern identico e difettoso: acquisiscono il mutex del server, confermano che l'oggetto è ancora presente nella lista, rilasciano il mutex, quindi acquisiscono il lock dell'oggetto stesso — senza nulla nel mezzo che lo mantenga in vita.
Poiché non viene preso alcun riferimento, esiste una stretta finestra tra il rilascio del mutex del server e l'acquisizione del lock dell'oggetto durante la quale FSRendezvousServer::Close() può liberare l'oggetto, portando a un use-after-free.
Credito: @zoverin