mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
libceph: Amend checking to fix make W=1 build breakage
In a few cases the code compares 32-bit value to a SIZE_MAX derived
constant which is much higher than that value on 64-bit platforms,
Clang, in particular, is not happy about this
net/ceph/osdmap.c:1441:10: error: result of comparison of constant 4611686018427387891 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
1441 | if (len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32))
| ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/ceph/osdmap.c:1624:10: error: result of comparison of constant 2305843009213693945 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
1624 | if (len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32)))
| ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fix this by casting to size_t. Note, that possible replacement of SIZE_MAX
by U32_MAX may lead to the behaviour changes on the corner cases.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
87327d4eaa
commit
04d8712b07
@ -1438,7 +1438,7 @@ static struct ceph_pg_mapping *__decode_pg_temp(void **p, void *end,
|
||||
ceph_decode_32_safe(p, end, len, e_inval);
|
||||
if (len == 0 && incremental)
|
||||
return NULL; /* new_pg_temp: [] to remove */
|
||||
if (len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32))
|
||||
if ((size_t)len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
ceph_decode_need(p, end, len * sizeof(u32), e_inval);
|
||||
@ -1619,7 +1619,7 @@ static struct ceph_pg_mapping *__decode_pg_upmap_items(void **p, void *end,
|
||||
u32 len, i;
|
||||
|
||||
ceph_decode_32_safe(p, end, len, e_inval);
|
||||
if (len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32)))
|
||||
if ((size_t)len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32)))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
ceph_decode_need(p, end, 2 * len * sizeof(u32), e_inval);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user