FSRendezvousServer::PublishRx 和 FSRendezvousServer::ConsumeTx 以完全相同且有缺陷的模式解引用 FSStreamReg 对象:获取服务器互斥锁,确认该对象仍在列表中,释放互斥锁,然后获取对象自身的锁——中间没有任何机制保证其存活。
由于没有获取引用,在服务器互斥锁被释放与对象自身锁被获取之间存在一个狭窄的时间窗口,在此期间 FSRendezvousServer::Close() 可以释放该对象,从而导致释放后使用(use-after-free)。
致谢:@zoverin