Skip to content

Commit 04d8712

Browse files
andy-shevidryomov
authored andcommitted
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>
1 parent 87327d4 commit 04d8712

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

net/ceph/osdmap.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,7 +1438,7 @@ static struct ceph_pg_mapping *__decode_pg_temp(void **p, void *end,
14381438
ceph_decode_32_safe(p, end, len, e_inval);
14391439
if (len == 0 && incremental)
14401440
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))
14421442
return ERR_PTR(-EINVAL);
14431443

14441444
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,
16191619
u32 len, i;
16201620

16211621
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)))
16231623
return ERR_PTR(-EINVAL);
16241624

16251625
ceph_decode_need(p, end, 2 * len * sizeof(u32), e_inval);

0 commit comments

Comments
 (0)