Re: [PATCH] ocfs2: reject FITRIM ranges shorter than a cluster
Joseph Qi <[email protected]> Sat, 30 May 2026 21:12:58 +0800
| Newsgroups | dev.linux.lists.ocfs2-devel |
|---|---|
| Message-ID | <[email protected]> |
On 5/28/26 11:12 PM, Zhang Cen wrote:
> 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.
>
> Fixes: aa89762c5480 ("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 <[email protected]>
Looks fine.
Reviewed-by: Joseph Qi <[email protected]>
> ---
> fs/ocfs2/alloc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
> index 6e5fd3f12a84..be09e766ac1f 100644
> --- a/fs/ocfs2/alloc.c
> +++ b/fs/ocfs2/alloc.c
> @@ -7576,7 +7576,7 @@ int ocfs2_trim_mainbm(struct super_block *sb, struct fstrim_range *range)
> len = range->len >> osb->s_clustersize_bits;
> minlen = range->minlen >> osb->s_clustersize_bits;
>
> - if (minlen >= osb->bitmap_cpg || range->len < sb->s_blocksize)
> + if (minlen >= osb->bitmap_cpg || range->len < osb->s_clustersize)
> return -EINVAL;
>
> trace_ocfs2_trim_mainbm(start, len, minlen);