
Analyse d'une course use-after-free dans FSRendezvousServer::PublishRx et ConsumeTx, où Close() peut libérer un objet FSStreamReg entre la libération du mutex et l'acquisition du verrou.
FSRendezvousServer::PublishRx et FSRendezvousServer::ConsumeTx déréférencent un objet FSStreamReg selon un schéma identique et défectueux : prendre le mutex du serveur, confirmer que l'objet est toujours présent dans la liste, relâcher le mutex, puis prendre le verrou propre à l'objet — sans rien entre les deux pour le maintenir en vie.
Comme aucune référence n'est prise, il existe une fenêtre étroite entre le moment où le mutex du serveur est relâché et celui où le verrou propre à l'objet est pris, pendant laquelle FSRendezvousServer::Close() peut libérer l'objet, ce qui conduit à un use-after-free.
Crédit : @zoverin