从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 问题描述:io_uring在启动写入时,会调用kiocb_start_write()来增加超级块的rwsem,防止任何冻结在写入过程中发生。然而,io_uring在启动写入时会无条件地调用kiocb_start_write(),这会导致在写入过程中冻结的挂起任务无法完成,从而导致死锁。 - 问题影响:这会导致依赖于写入完成的挂起任务无法完成,从而导致新的写入任务被阻塞。 2. 问题原因: - 问题原因:io_uring在启动写入时会无条件地调用kiocb_start_write(),这会导致在写入过程中冻结的挂起任务无法完成,从而导致新的写入任务被阻塞。 3. 解决方案: - 解决方案:修复这个问题的方法是让io_uring在启动写入时只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 4. 代码更改: - 代码更改:代码更改包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 5. 影响范围: - 影响范围:这个问题影响了Linux内核的io_uring模块,可能会导致系统在某些情况下出现死锁。 6. 修复过程: - 修复过程:修复这个问题的过程包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 7. 修复结果: - 修复结果:修复这个问题后,系统在某些情况下出现死锁的问题得到了解决。 8. 修复人员: - 修复人员:这个问题的修复人员包括Jens Axboe和Sasha Levin。 9. 修复时间: - 修复时间:这个问题的修复时间是2024年11月8日。 10. 修复代码: - 修复代码:修复代码包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 11. 修复描述: - 修复描述:修复代码包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 12. 修复代码更改: - 修复代码更改:修复代码更改包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 13. 修复代码位置: - 修复代码位置:修复代码位置在a/io_uring/rw.c文件中。 14. 修复代码内容: - 修复代码内容:修复代码内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 15. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 16. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 17. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 18. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 19. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 20. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 21. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 22. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 23. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 24. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 25. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 26. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 27. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 28. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 29. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 30. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 31. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 32. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 33. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 34. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 35. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 36. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 37. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 38. 修复代码更改位置: - 修复代码更改位置:修复代码更改位置在a/io_uring/rw.c文件中。 39. 修复代码更改内容: - 修复代码更改内容:修复代码更改内容包括在io_uring启动写入时,只尝试获取超级块的rwsem,如果rwsem已经被冻结,则返回-EAGAIN。这样可以确保写入任务能够完成,从而避免死锁。 40. **修复代码更改位置