HomeFreeBSD

powerpc_nvram: Fix a bug in the adler32 checksum.

Description

powerpc_nvram: Fix a bug in the adler32 checksum.

The Adler32 digest consists of two 16-bit words whose values are
calculated modulo 65521 (largest prime < 2^16). To avoid two division
instructions per byte, this version copies an optimization found in
zlib which defers the modulus until close to the point that the
intermediate sums can overflow 2^32. (zlib uses NMAX == 5552 for
this, this version uses 5000)

The bug is that in the deferred modulus case, the modulus was
only applied to the high word (and twice at that) but not to
the low word. The fix is to apply it to both words.

Reviewed by: jhibbits
Reported by: Miod Vallat <miod@openbsd.org>
Differential Revision: https://reviews.freebsd.org/D36798

(cherry picked from commit e0df0dce71d86796195502b923243bb6bacdcdc2)

Details

Provenance
jhbAuthored on Oct 3 2022, 11:10 PM
Reviewer
jhibbits
Differential Revision
D36798: powerpc_nvram: Fix a bug in the adler32 checksum.
Parents
rG991603548ecb: pfctl: Fix mismatch in array bounds for pfr_next_token().
Branches
Unknown
Tags
Unknown