Index: sys/crypto/aesni/aesni_ghash.c =================================================================== --- sys/crypto/aesni/aesni_ghash.c +++ sys/crypto/aesni/aesni_ghash.c @@ -534,7 +534,7 @@ const unsigned char *tag, uint32_t nbytes, uint32_t abytes, int ibytes, const unsigned char *key, int nr) { - int i, j ,k; + int i, j, k; __m128i tmp1, tmp2, tmp3, tmp4; __m128i tmp5, tmp6, tmp7, tmp8; __m128i H, H2, H3, H4, Y, T; @@ -799,8 +799,9 @@ } tmp1 = _mm_aesenc_si128(tmp1, KEY[nr-1]); tmp1 = _mm_aesenclast_si128(tmp1, KEY[nr]); - tmp1 = _mm_xor_si128(tmp1, - _mm_loadu_si128(&((const __m128i *)in)[k])); + last_block = _mm_setzero_si128(); + memcpy(&last_block, &((const __m128i *)in)[k], nbytes%16); + tmp1 = _mm_xor_si128(tmp1, last_block); last_block = tmp1; for (j=0; j