
FSRendezvousServer::PublishRx と ConsumeTx における use-after-free 競合状態の分析。Close() がミューテックスの解放からロック取得までの間に FSStreamReg オブジェクトを解放する可能性がある。
FSRendezvousServer::PublishRx と FSRendezvousServer::ConsumeTx は、同一の壊れたパターンで FSStreamReg オブジェクトを参照解除します。すなわち、サーバーミューテックスを取得し、オブジェクトがまだリスト内に存在することを確認し、ミューテックスを解放してから、オブジェクト自身のロックを取得しますが、その間にオブジェクトを生存させ続けるものは何もありません。
参照が取得されていないため、サーバーミューテックスが解放されてからオブジェクト自身のロックが取得されるまでの間に狭いウィンドウが存在し、その間に FSRendezvousServer::Close() がオブジェクトを解放できるため、use-after-free が発生します。
Credit: @zoverin