This is a cross-post from glibc bugreport: http://sourceware.org/bugzilla/show_bug.cgi?id=14090
In short, the code below handles blocks larger than 8 GB incorrectly because they require ctx->total[1] incremented more than by 1: ------------------------------------------------------------------------------ /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += len; if (ctx->total[0] < len) ++ctx->total[1]; ------------------------------------------------------------------------------ Note that md5sum is not affected by this, as it calls md5_process_block() with small and fixed block size. Testcase for the bug: http://sourceware.org/bugzilla/attachment.cgi?id=6411