
Analyse einer Use-after-free-Race-Condition in FSRendezvousServer::PublishRx und ConsumeTx, bei der Close() ein FSStreamReg-Objekt zwischen Mutex-Freigabe und Lock-Erwerb freigeben kann.
FSRendezvousServer::PublishRx und FSRendezvousServer::ConsumeTx dereferenzieren ein FSStreamReg-Objekt mit einem identischen, fehlerhaften Muster: Server-Mutex sperren, bestätigen, dass das Objekt noch in der Liste enthalten ist, Mutex freigeben, dann die eigene Sperre des Objekts nehmen — ohne dass dazwischen etwas es am Leben hält.
Da keine Referenz genommen wird, gibt es ein schmales Zeitfenster zwischen der Freigabe des Server-Mutex und dem Nehmen der eigenen Sperre des Objekts, während dessen FSRendezvousServer::Close() das Objekt freigeben kann, was zu einem Use-after-free führt.
Credit: @zoverin