从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 标题: - 描述:当回调正在被取消时, 函数会失败。这会导致一个死锁,因为两个回调都会等待对方完成执行,从而引入了一个锁。 2. 代码示例: - 代码片段:展示了在 函数中,两个回调会等待对方完成执行,从而导致死锁。 3. 解决方案: - 解决方案:在 结构中添加一个名为 的原子计数器。这个计数器用于跟踪所有正在执行的取消请求。在取消一个 BPF 计时器时,必须检查是否有未完成的取消请求,并在必要时返回错误(-EDEADLK)。 4. 背景信息: - 背景:之前的版本使用了一个布尔变量 来跟踪取消状态,但这种方法可能会导致竞态条件和死锁。 5. 修复和签名: - 修复:在 结构中添加了一个名为 的原子计数器。 - 签名:由 Kumar Kartikeya Dwivedi 和其他开发者签署。 6. 报告和链接: - 报告:由 Dohyun Kim 和 Neel Natu 报告。 - 链接:提供了上游 commit 的链接。 7. Diffstat: - 文件更改: 文件有 35 个插入和 3 个删除。 8. Diff: - 代码差异:展示了 文件中 结构的更改,包括添加了一个 字段。 这些信息表明,这个漏洞是由于在 BPF 计时器取消操作中没有正确处理回调之间的同步问题导致的。修复方案是通过在 结构中添加一个原子计数器来跟踪取消请求,从而避免死锁。