从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 当并发执行 系统调用时,如果使用同一个文件描述符,可能会在短时间内发生竞争条件,导致内存泄漏。 2. 漏洞过程: - 1) 程序打开一个文件描述符,并启动两个线程(例如使用 pthreads 库)。 - 2) 线程 A 调用 时,它会锁定文件的读取锁,并在 函数中获取文件的 指针。 - 3) 线程 B 也调用 时,它会锁定文件的共享模式,并在 函数中获取文件的 指针。 - 4) 由于线程 A 和线程 B 都看到了一个空的 指针,它们各自分配了一个 结构,并将其分配给文件结构。 - 5) 在这个过程中,线程 A 分配的 结构被泄露。 3. 修复措施: - 通过保护 的分配和检查,同时保持文件的 spinlock 锁,并跟踪分配 的任务,确保 只被分配给当前任务。 - 这样可以防止在未来的使用中出现问题,因为 结构的缓存状态可能会导致使用后的释放问题。 4. 补丁内容: - 修改了 、 和 文件中的代码,以保护 的分配和检查。 - 在 函数中,检查 是否为 ,如果不是,则分配一个新的 结构,并将其分配给当前任务。 5. 补丁应用: - 该补丁修复了 的问题。 - 该补丁由 Filipe Manana 和 David Sterba 审查和签署。 这些信息可以帮助我们理解漏洞的原理、修复措施以及补丁的具体实现。