diff options
author | Mark Adler <madler@alumni.caltech.edu> | 2016-10-03 22:33:26 -0700 |
---|---|---|
committer | Hans Kristian Rosbach <hk-git@circlestorm.org> | 2017-01-31 11:09:18 +0100 |
commit | 52380f5b4475ad92c4aa5f033fa119fcb914e633 (patch) | |
tree | 24abf6fdc6a759228caec6ebae33de320c4470af /crc32.c | |
parent | 2234eb9f0a3f4e753ad059af5f6288dbd269868e (diff) |
Note the violation of the strict aliasing rule in crc32.c.
See the comment for more details. This is in response to an issue
raised as a result of a security audit of the zlib code by Trail
of Bits and TrustInSoft, in support of the Mozilla Foundation.
Diffstat (limited to 'crc32.c')
-rw-r--r-- | crc32.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -247,6 +247,18 @@ uint32_t ZEXPORT crc32(uint32_t crc, const unsigned char *buf, z_off64_t len) { } +/* + This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit + integer pointer type. This violates the strict aliasing rule, where a + compiler can assume, for optimization purposes, that two pointers to + fundamentally different types won't ever point to the same memory. This can + manifest as a problem only if one of the pointers is written to. This code + only reads from those pointers. So long as this code remains isolated in + this compilation unit, there won't be a problem. For this reason, this code + should not be copied and pasted into a compilation unit in which other code + writes to the buffer that is passed to these routines. + */ + /* ========================================================================= */ #if BYTE_ORDER == LITTLE_ENDIAN #define DOLIT4 c ^= *buf4++; \ |