diff options
author | Zhen Lei <thunder.leizhen@huawei.com> | 2022-11-25 17:13:58 +0800 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2022-11-25 15:43:39 -0500 |
commit | ea258f159da14a710f9cb88656558538b5ba5b76 (patch) | |
tree | 581f2519c1d3d0e184474076f5d7c1fa61a59a47 /include/linux/fs.h | |
parent | cf260db405b1a159e9076220b40f5f02ac480525 (diff) | |
download | lwn-ea258f159da14a710f9cb88656558538b5ba5b76.tar.gz lwn-ea258f159da14a710f9cb88656558538b5ba5b76.zip |
get rid of INT_LIMIT, use type_max() instead
INT_LIMIT() tries to do what type_max() does, except that type_max()
doesn't rely upon undefined behaviour[*], might as well use type_max()
instead.
[*] if T is an N-bit signed integer type, the maximal value in T is
pow(2, N - 1) - 1, all right, but naive expression for that value
ends up with a couple of wraparounds and as usual for wraparounds
in signed types, that's an undefined behaviour. type_max() takes
care to avoid those...
Caught-by: UBSAN
Suggested-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index e654435f1651..a384741b1449 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1131,9 +1131,8 @@ 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 OFFSET_MAX INT_LIMIT(loff_t) -#define OFFT_OFFSET_MAX INT_LIMIT(off_t) +#define OFFSET_MAX type_max(loff_t) +#define OFFT_OFFSET_MAX type_max(off_t) #endif extern void send_sigio(struct fown_struct *fown, int fd, int band); |