aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCollin Funk <collin.funk1@gmail.com>2025-10-26 12:20:01 -0700
committerCollin Funk <collin.funk1@gmail.com>2025-10-27 16:52:16 -0700
commitffa2632dcd2ea26823f4bf81e548b1a2a288051f (patch)
treebb7dd41e37914e346054ca90928f1fd8f4eaf7e0 /src
parentbuild: don't build chcon or runcon unless selinux is available (diff)
downloadcoreutils-ffa2632dcd2ea26823f4bf81e548b1a2a288051f.tar.gz
coreutils-ffa2632dcd2ea26823f4bf81e548b1a2a288051f.zip
maint: prefer ckd_add for overflow checks
* 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.
Diffstat (limited to 'src')
-rw-r--r--src/cksum.c6
-rw-r--r--src/cksum_avx2.c3
-rw-r--r--src/cksum_avx512.c3
-rw-r--r--src/cksum_pclmul.c3
-rw-r--r--src/cksum_vmull.c3
5 files changed, 6 insertions, 12 deletions
diff --git a/src/cksum.c b/src/cksum.c
index fba33f688..a74af07a0 100644
--- a/src/cksum.c
+++ b/src/cksum.c
@@ -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);
diff --git a/src/cksum_avx2.c b/src/cksum_avx2.c
index b50a5de1a..23ecc66e5 100644
--- a/src/cksum_avx2.c
+++ b/src/cksum_avx2.c
@@ -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;
diff --git a/src/cksum_avx512.c b/src/cksum_avx512.c
index e62c3e3ac..df6abf569 100644
--- a/src/cksum_avx512.c
+++ b/src/cksum_avx512.c
@@ -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;
diff --git a/src/cksum_pclmul.c b/src/cksum_pclmul.c
index c47bb9f84..240d475fc 100644
--- a/src/cksum_pclmul.c
+++ b/src/cksum_pclmul.c
@@ -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;
diff --git a/src/cksum_vmull.c b/src/cksum_vmull.c
index fb3b6dcdd..fddfaa47b 100644
--- a/src/cksum_vmull.c
+++ b/src/cksum_vmull.c
@@ -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;