]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: prefer ckd_add for overflow checks
authorCollin Funk <collin.funk1@gmail.com>
Sun, 26 Oct 2025 19:20:01 +0000 (12:20 -0700)
committerCollin Funk <collin.funk1@gmail.com>
Mon, 27 Oct 2025 23:52:16 +0000 (16:52 -0700)
* src/cksum.c (cksum_slice8, crc32b_sum_stream): Use ckd_add to check
for overflow.
* src/cksum_avx2.c (cksum_avx2): Likewise.
* src/cksum_avx512.c (cksum_avx512): Likewise.
* src/cksum_pclmul.c (cksum_pclmul): Likewise.
* src/cksum_vmull.c (cksum_vmull): Likewise.

src/cksum.c
src/cksum_avx2.c
src/cksum_avx512.c
src/cksum_pclmul.c
src/cksum_vmull.c

index fba33f688d31f02aa12e94f5b0ef7a1d9f7f7b54..a74af07a084fca9032b5c794a886973a6f6dd3d1 100644 (file)
@@ -239,12 +239,11 @@ cksum_slice8 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
     {
       uint32_t *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       /* Process multiples of 8 bytes */
       datap = (uint32_t *)buf;
@@ -335,12 +334,11 @@ crc32b_sum_stream (FILE *stream, void *resstream, uintmax_t *reslen)
 
   while ((bytes_read = fread (buf, 1, BUFLEN, stream)) > 0)
     {
-      if (len + bytes_read < len)
+      if (ckd_add (&len, len, bytes_read))
         {
           errno = EOVERFLOW;
           return -1;
         }
-      len += bytes_read;
 
       crc = crc32_update (crc, (char const *)buf, bytes_read);
 
index b50a5de1a9e07577c145f231939959119c3e02b4..23ecc66e5248388a4d3ad9fb1965c906712c5659 100644 (file)
@@ -68,12 +68,11 @@ cksum_avx2 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
 
       __m256i *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m256i *)buf;
 
index e62c3e3ac11f6a274763c1ca25f091bee46d8e1e..df6abf569522b71965af6337b2ab4b658640c4a9 100644 (file)
@@ -75,12 +75,11 @@ cksum_avx512 (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
 
       __m512i *datap;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m512i *)buf;
 
index c47bb9f849c4cd21e5b857d2c012baeb3b2ca01e..240d475fcc651f90ccb6f05eb6145e985423ff26 100644 (file)
@@ -66,12 +66,11 @@ cksum_pclmul (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
       __m128i fold_data;
       __m128i xor_crc;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (__m128i *)buf;
 
index fb3b6dcdd4e8b13b91c0504a84b9fa42d80e7de3..fddfaa47b9885d3e045b5136b18da734c72a854e 100644 (file)
@@ -72,12 +72,11 @@ cksum_vmull (FILE *fp, uint_fast32_t *crc_out, uintmax_t *length_out)
       uint64x2_t fold_data;
       uint64x2_t xor_crc;
 
-      if (length + bytes_read < length)
+      if (ckd_add (&length, length, bytes_read))
         {
           errno = EOVERFLOW;
           return false;
         }
-      length += bytes_read;
 
       datap = (uint64x2_t *) buf;