Skip to content

Commit 346314b

Browse files
Zhang Cengregkh
authored andcommitted
ocfs2: reject FITRIM ranges shorter than a cluster
[ Upstream commit ca1afd8 ] ocfs2_trim_mainbm() trims the global bitmap in cluster units, but its too-short range validation only checks sb->s_blocksize. On filesystems with a cluster size larger than the block size, a FITRIM range that is at least one block but shorter than one cluster is accepted and shifted down to len == 0. The later start + len - 1 and len -= ... arithmetic then underflows and can drive trimming past the requested range. Reject ranges shorter than s_clustersize instead. That preserves the existing -EINVAL behavior for requests that cannot discard even one allocation unit and keeps zero-cluster trims out of the group walk. Link: https://lore.kernel.org/20260528151247.361854-1-rollkingzzc@gmail.com Fixes: aa89762 ("ocfs2: return EINVAL if the given range to discard is less than block size") Assisted-by: Codex:gpt-5.5 Signed-off-by: Zhang Cen <rollkingzzc@gmail.com> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Jun Piao <piaojun@huawei.com> Cc: Heming Zhao <heming.zhao@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent ecb3f93 commit 346314b

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

fs/ocfs2/alloc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7546,7 +7546,7 @@ int ocfs2_trim_mainbm(struct super_block *sb, struct fstrim_range *range)
75467546
len = range->len >> osb->s_clustersize_bits;
75477547
minlen = range->minlen >> osb->s_clustersize_bits;
75487548

7549-
if (minlen >= osb->bitmap_cpg || range->len < sb->s_blocksize)
7549+
if (minlen >= osb->bitmap_cpg || range->len < osb->s_clustersize)
75507550
return -EINVAL;
75517551

75527552
trace_ocfs2_trim_mainbm(start, len, minlen);

0 commit comments

Comments
 (0)