From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A01D0E55C; Tue, 3 Feb 2026 01:06:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770080764; cv=none; b=rdAqf+VmLM7VKN/TjQxKBymvcMPf7G+frGrZhm/AIRrdOU3ZM91SORxXfKSua7zfkxfwqhJKSuX4bUUAO1kh12XkBliUG1vLeS8k8kbFsT0hAAm/OvAYqGF1bJavqJcr0Shj/463VxukwGCO1RW96BSVZJv8ZZpnLYwlChOM8Gg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770080764; c=relaxed/simple; bh=azEkiGxiA3Hw2+tfcndTv3hv9emD35wXOEgTKhj5v88=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=luD/NN8E7a+4J1iq9fN0Gm+v2ygvJ8DjZAfpZKk8I9bpa18y/Ft/nbORR/lP5alUQnTBilyxbSRu+f6IwcXlxvmY3u5xZlB7pOuEbA3XsY80yOKlhhgx5cQ89v1v0RIu8GKt7XYmIefvrLMdaDP509ilN5RWjKhxO+kt4+LHgNs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EkDCsU6/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EkDCsU6/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A559C116C6; Tue, 3 Feb 2026 01:06:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1770080764; bh=azEkiGxiA3Hw2+tfcndTv3hv9emD35wXOEgTKhj5v88=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=EkDCsU6/YPYJFZ1iaExHI4hbskDbrtiyHvFCcdPJ5aTo5ctujsVFkMrFTjbGFVLto Z6Fu014LXwc49j+8GS56Y1/WDLmRKQNBoyKusXsmNDvqQRtR5klWbXmr93EREDKmLW ZvdetYt/9Jgo5vpT9HcQKz32PF3mH1yxm17xp0wGCEhk6WzbsaZpX08AdiJ6Y46yZ1 B83Q4NDoZji7HJ8ow4gZ8bnAC9gV8B8GerBjumPtF92hKCcoWqUnKNG7sBsS9A4gQg 2CndLEJwqCayDeDrxUC1jokKeL+HTtTdsbDpMr/syKsrLLHFgRuT7cN5SE3PnsA51w O7rRAHLf/DXoQ== Date: Mon, 2 Feb 2026 18:05:58 -0700 From: Nathan Chancellor To: david.laight.linux@gmail.com, Christian Brauner Cc: Andrew Morton , Miklos Szeredi , Mark Brown , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Alexander Viro , Andreas Dilger , Kees Cook , OGAWA Hirofumi , Theodore Ts'o , Brian Masney Subject: Re: [PATCH next] fuse: Fix 'min: signedness error' in fuse_wr_pages() Message-ID: <20260203010558.GA1648836@ax162> References: <20260113192243.73983-1-david.laight.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260113192243.73983-1-david.laight.linux@gmail.com> On Tue, Jan 13, 2026 at 07:22:43PM +0000, david.laight.linux@gmail.com wrote: > From: David Laight > > On 32bit systems 'pos' is s64 and everything else is 32bit so the > first argument to min() is signed - generating a warning. > On 64bit systems 'len' is 64bit unsigned forcing everything to unsigned. > > Fix by reworking the exprssion to completely avoid 64bit maths on 32bit. > Use DIV_ROUND_UP() instead of open-coding something equivalent. > > Note that the 32bit 'len' cannot overflow because the syscall interface > limits read/write (etc) to (INT_MAX - PAGE_SIZE) bytes (even on 64bit). > > Fixes: 0f5bb0cfb0b4 ("fs: use min() or umin() instead of min_t()") Christian, you took 0f5bb0cfb0b4 in vfs-7.0.misc, could you please apply this fix? Building this file for 32-bit has been broken for the majority of the -next cycle (I applied an earlier fix David provided and forgot to chase it until now). > Signed-off-by: David Laight > --- > fs/fuse/file.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/fuse/file.c b/fs/fuse/file.c > index 2595b6b4922b..ff823b0545ed 100644 > --- a/fs/fuse/file.c > +++ b/fs/fuse/file.c > @@ -1323,8 +1323,8 @@ static ssize_t fuse_fill_write_pages(struct fuse_io_args *ia, > static inline unsigned int fuse_wr_pages(loff_t pos, size_t len, > unsigned int max_pages) > { > - return min(((pos + len - 1) >> PAGE_SHIFT) - (pos >> PAGE_SHIFT) + 1, > - max_pages); > + len += pos % PAGE_SIZE; > + return min(DIV_ROUND_UP(len, PAGE_SIZE), max_pages); > } > > static ssize_t fuse_perform_write(struct kiocb *iocb, struct iov_iter *ii) > -- > 2.39.5 >