diff options
| author | Collin Funk <collin.funk1@gmail.com> | 2025-10-26 12:20:01 -0700 |
|---|---|---|
| committer | Collin Funk <collin.funk1@gmail.com> | 2025-10-27 16:52:16 -0700 |
| commit | ffa2632dcd2ea26823f4bf81e548b1a2a288051f (patch) | |
| tree | bb7dd41e37914e346054ca90928f1fd8f4eaf7e0 /src | |
| parent | build: don't build chcon or runcon unless selinux is available (diff) | |
| download | coreutils-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.c | 6 | ||||
| -rw-r--r-- | src/cksum_avx2.c | 3 | ||||
| -rw-r--r-- | src/cksum_avx512.c | 3 | ||||
| -rw-r--r-- | src/cksum_pclmul.c | 3 | ||||
| -rw-r--r-- | src/cksum_vmull.c | 3 |
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; |
