
تحليل حالة سباق use-after-free في FSRendezvousServer::PublishRx وConsumeTx، حيث يمكن لـ Close() تحرير كائن FSStreamReg بين تحرير الـ mutex والحصول على القفل.
يقوم كل من FSRendezvousServer::PublishRx وFSRendezvousServer::ConsumeTx بإلغاء الإشارة إلى كائن FSStreamReg بنمط معطوب متطابق: أخذ قفل الخادم (server mutex)، والتأكد من أن الكائن لا يزال موجودًا في القائمة، ثم تحرير القفل، ثم أخذ قفل الكائن نفسه — دون أي شيء بينهما يبقيه على قيد الحياة.
نظرًا لعدم أخذ أي مرجع، توجد نافذة ضيقة بين تحرير قفل الخادم وأخذ قفل الكائن نفسه يمكن خلالها لـ FSRendezvousServer::Close() تحرير الكائن، مما يؤدي إلى استخدام بعد التحرير (use-after-free).
الفضل: @zoverin