漏洞标题
ext4:修复由于错误移动extents的moved_len导致的块双重释放问题
漏洞描述信息
在 Linux 内核中,以下漏洞已被修复:
ext4:修复因错误移动的区间大小导致的块双重释放问题
在 ext4_move_extents() 函数中,只有当所有移动操作都成功执行时,才会更新 moved_len,且只有当 moved_len 不为零时,才会丢弃 orig_inode 和 donor_inode 的预分配。当循环在成功移动一些区间后未能退出时,moved_len 未更新,仍为 0,因此不会丢弃预分配。
如果移动的区间与预分配的区间重叠,那么在 ext4_mb_release_inode_pa() 和 ext4_process_freed_data() 中(如提交 94d7c16cbbbd("ext4:修复使用 EXT4_IOC_MOVE_EXT 时的块双重释放问题")中描述的那样),重叠的区间会在两次函数中被释放两次,同时 bb_free 会增加两次。因此,在执行 trim 操作时,由于 bb_free 非零而 bb_fragments 为零,会在 mb_update_avg_fragment_size() 中触发除以零的错误。
因此,应在每次区间移动后更新 move_len,以避免该问题。
CVSS信息
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
漏洞类别
双重释放
漏洞标题
ext4: fix double-free of blocks due to wrong extents moved_len
漏洞描述信息
In the Linux kernel, the following vulnerability has been resolved:
ext4: fix double-free of blocks due to wrong extents moved_len
In ext4_move_extents(), moved_len is only updated when all moves are
successfully executed, and only discards orig_inode and donor_inode
preallocations when moved_len is not zero. When the loop fails to exit
after successfully moving some extents, moved_len is not updated and
remains at 0, so it does not discard the preallocations.
If the moved extents overlap with the preallocated extents, the
overlapped extents are freed twice in ext4_mb_release_inode_pa() and
ext4_process_freed_data() (as described in commit 94d7c16cbbbd ("ext4:
Fix double-free of blocks with EXT4_IOC_MOVE_EXT")), and bb_free is
incremented twice. Hence when trim is executed, a zero-division bug is
triggered in mb_update_avg_fragment_size() because bb_free is not zero
and bb_fragments is zero.
Therefore, update move_len after each extent move to avoid the issue.
CVSS信息
N/A
漏洞类别
N/A
漏洞标题
Linux kernel 安全漏洞
漏洞描述信息
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于存在双重释放。
CVSS信息
N/A
漏洞类别
其他