Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Andy Shevchenko and committed by
Ilya Dryomov
04d8712b 87327d4e

+2 -2
+2 -2
net/ceph/osdmap.c
··· 1438 1438 ceph_decode_32_safe(p, end, len, e_inval); 1439 1439 if (len == 0 && incremental) 1440 1440 return NULL; /* new_pg_temp: [] to remove */ 1441 - if (len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32)) 1441 + if ((size_t)len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32)) 1442 1442 return ERR_PTR(-EINVAL); 1443 1443 1444 1444 ceph_decode_need(p, end, len * sizeof(u32), e_inval); ··· 1619 1619 u32 len, i; 1620 1620 1621 1621 ceph_decode_32_safe(p, end, len, e_inval); 1622 - if (len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32))) 1622 + if ((size_t)len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32))) 1623 1623 return ERR_PTR(-EINVAL); 1624 1624 1625 1625 ceph_decode_need(p, end, 2 * len * sizeof(u32), e_inval);