From: Eric Biggers <ebiggers@kernel.org>
To: Zhen Lei <thunder.leizhen@huawei.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] fs: Clear a UBSAN shift-out-of-bounds warning
Date: Sat, 19 Nov 2022 11:39:43 -0800 [thread overview]
Message-ID: <Y3kw4IP2BVcbFoGT@sol.localdomain> (raw)
In-Reply-To: <20221110031024.204-1-thunder.leizhen@huawei.com>
On Thu, Nov 10, 2022 at 11:10:24AM +0800, Zhen Lei wrote:
> UBSAN: shift-out-of-bounds in fs/locks.c:2572:16
> left shift of 1 by 63 places cannot be represented in type 'long long int'
>
> Switch the calculation method to ((quarter - 1) * 2 + 1) can help us
> eliminate this false positive.
>
> On the other hand, the old implementation has problems with char and
> short types, although not currently involved.
> printf("%d: %x\n", sizeof(char), INT_LIMIT(char));
> printf("%d: %x\n", sizeof(short), INT_LIMIT(short));
> 1: ffffff7f
> 2: ffff7fff
>
> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
> ---
> include/linux/fs.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index e654435f16512c1..88d42e2daed9f6c 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1131,7 +1131,7 @@ struct file_lock_context {
>
> /* The following constant reflects the upper bound of the file/locking space */
> #ifndef OFFSET_MAX
> -#define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
> +#define INT_LIMIT(x) ((((x)1 << (sizeof(x) * 8 - 2)) - 1) * 2 + 1)
> #define OFFSET_MAX INT_LIMIT(loff_t)
> #define OFFT_OFFSET_MAX INT_LIMIT(off_t)
> #endif
This problem has already been solved by type_max() in include/linux/overflow.h.
How about removing INT_LIMIT() and using type_max() instead?
- Eric
next prev parent reply other threads:[~2022-11-19 19:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-10 3:10 [PATCH] fs: Clear a UBSAN shift-out-of-bounds warning Zhen Lei
2022-11-19 19:39 ` Eric Biggers [this message]
2022-11-21 1:38 ` Leizhen (ThunderTown)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y3kw4IP2BVcbFoGT@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=thunder.leizhen@huawei.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.