从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 该漏洞发生在Btrfs文件系统中,当在btrfs_submit_chunk函数中遇到错误时,可能会发生use-after-free(使用后释放)错误。 - 该错误是由KASAN(Kernel Address Sanitizer)报告的,报告中显示了使用后释放的堆栈跟踪。 2. 堆栈跟踪: - 堆栈跟踪显示了错误发生时的调用栈,包括多个函数和模块的调用,如btrfs_check_read_bio、btrfs_do_readpage、btrfs_readahead等。 3. 错误原因: - 该错误的原因是btrfs_submit_chunk函数在处理bio(block I/O)时,错误地释放了bio结构体,导致bio结构体被双重释放。 - 这种情况发生在bio长度为128K,跨越两个64K条带时。 4. 修复措施: - 修复措施是修改btrfs_submit_chunk函数,避免在错误情况下释放bio结构体。 - 具体修改包括: - 在错误情况下,不再调用btrfs_bio_end_io,而是调用btrfs_orig_bbio_end_io,该函数有额外的检查以处理split bios的情况。 - 移除多余的btrfs_cleanup_bio调用。 5. 代码变更: - 代码变更主要集中在btrfs_bio.c文件中,具体修改了btrfs_submit_chunk函数的逻辑。 - 修改了错误处理逻辑,避免了bio结构体的双重释放。 6. 报告和审查: - 漏洞报告和修复经过了多个开发者的审查和确认,包括David Sterba和Greg Kroah-Hartman。 这些信息表明,该漏洞是由于在错误情况下释放bio结构体导致的use-after-free错误,修复措施主要是修改了错误处理逻辑,避免了bio结构体的双重释放。