summaryrefslogtreecommitdiff
path: root/misc.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2014-04-20 13:33:19 +1000
committerDamien Miller <djm@mindrot.org>2014-04-20 13:33:19 +1000
commit888566913933a802f3a329ace123ebcb7154cf78 (patch)
treecdd8baba05c5505cf41d2e13c774f7e63e693dbc /misc.c
parent16f85cbc7e5139950e6a38317e7c8b368beafa5d (diff)
- djm@cvs.openbsd.org 2014/04/20 02:30:25
[misc.c misc.h umac.c] use get/put_u32 to load values rather than *((UINT32 *)p) that breaks on strict-alignment architectures; reported by and ok stsp@
Diffstat (limited to 'misc.c')
-rw-r--r--misc.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/misc.c b/misc.c
index e4c8c3238..deb8768f3 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.92 2013/10/14 23:28:23 djm Exp $ */ 1/* $OpenBSD: misc.c,v 1.93 2014/04/20 02:30:25 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -788,6 +788,20 @@ get_u32(const void *vp)
788 return (v); 788 return (v);
789} 789}
790 790
791u_int32_t
792get_u32_le(const void *vp)
793{
794 const u_char *p = (const u_char *)vp;
795 u_int32_t v;
796
797 v = (u_int32_t)p[0];
798 v |= (u_int32_t)p[1] << 8;
799 v |= (u_int32_t)p[2] << 16;
800 v |= (u_int32_t)p[3] << 24;
801
802 return (v);
803}
804
791u_int16_t 805u_int16_t
792get_u16(const void *vp) 806get_u16(const void *vp)
793{ 807{
@@ -826,6 +840,16 @@ put_u32(void *vp, u_int32_t v)
826 p[3] = (u_char)v & 0xff; 840 p[3] = (u_char)v & 0xff;
827} 841}
828 842
843void
844put_u32_le(void *vp, u_int32_t v)
845{
846 u_char *p = (u_char *)vp;
847
848 p[0] = (u_char)v & 0xff;
849 p[1] = (u_char)(v >> 8) & 0xff;
850 p[2] = (u_char)(v >> 16) & 0xff;
851 p[3] = (u_char)(v >> 24) & 0xff;
852}
829 853
830void 854void
831put_u16(void *vp, u_int16_t v) 855put_u16(void *vp, u_int16_t v)