From 177a9873791c7fd170fc348a8f63aaac0bd62a79 Mon Sep 17 00:00:00 2001 From: Pawel Jakub Dawidek Date: Thu, 30 Mar 2006 18:45:50 +0000 Subject: [PATCH] Fix a panic on sparc64 related to inproper aligment - we cannot assume, that 'unsigned char *' argument is 4 byte aligned. MFC after: 3 days --- sys/kern/md5c.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sys/kern/md5c.c b/sys/kern/md5c.c index c6d125203a96..50e2022154ac 100644 --- a/sys/kern/md5c.c +++ b/sys/kern/md5c.c @@ -60,10 +60,15 @@ static void Encode (unsigned char *output, u_int32_t *input, unsigned int len) { unsigned int i; - u_int32_t *op = (u_int32_t *)output; + uint32_t ip; - for (i = 0; i < len / 4; i++) - op[i] = htole32(input[i]); + for (i = 0; i < len / 4; i++) { + ip = input[i]; + *output++ = ip; + *output++ = ip >> 8; + *output++ = ip >> 16; + *output++ = ip >> 24; + } } /* @@ -75,10 +80,11 @@ static void Decode (u_int32_t *output, const unsigned char *input, unsigned int len) { unsigned int i; - const u_int32_t *ip = (const u_int32_t *)input; - for (i = 0; i < len / 4; i++) - output[i] = le32dec(&ip[i]); + for (i = 0; i < len; i += 4) { + *output++ = input[i] | (input[i+1] << 8) | (input[i+2] << 16) | + (input[i+3] << 24); + } } #endif