summaryrefslogtreecommitdiffstats
path: root/sys/kern/md5c.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-03-30 18:45:50 +0000
committerpjd <pjd@FreeBSD.org>2006-03-30 18:45:50 +0000
commite23555c1ae0ad4ec7daf34e76d9e2f44b33043a9 (patch)
tree1ba904ed99c3310effa795f32f09a27b96fc3437 /sys/kern/md5c.c
parent54a1f381bf4d97ff61c5c90ee0251de5e45adb2f (diff)
downloadFreeBSD-src-e23555c1ae0ad4ec7daf34e76d9e2f44b33043a9.zip
FreeBSD-src-e23555c1ae0ad4ec7daf34e76d9e2f44b33043a9.tar.gz
Fix a panic on sparc64 related to inproper aligment - we cannot assume,
that 'unsigned char *' argument is 4 byte aligned. MFC after: 3 days
Diffstat (limited to 'sys/kern/md5c.c')
-rw-r--r--sys/kern/md5c.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/kern/md5c.c b/sys/kern/md5c.c
index c6d1252..50e2022 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;
-
- for (i = 0; i < len / 4; i++)
- op[i] = htole32(input[i]);
+ uint32_t ip;
+
+ 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
OpenPOWER on IntegriCloud