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);