From: Wouter Wijngaards Date: Wed, 9 May 2012 09:13:57 +0000 (+0000) Subject: fix alignment problem in util/random.c for sparc64/freebsd. X-Git-Tag: release-1.4.17rc1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3930e23b8c15e9743f41b162f3010a831bead411;p=thirdparty%2Funbound.git fix alignment problem in util/random.c for sparc64/freebsd. git-svn-id: file:///svn/unbound/trunk@2666 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/Changelog b/doc/Changelog index 52b7b8013..ea2d0eb45 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +9 May 2012: Wouter + - Fix alignment problem in util/random on sparc64/freebsd. + 8 May 2012: Wouter - Fix for accept spinning reported by OpenBSD. - iana portlist updated. diff --git a/util/random.c b/util/random.c index 1458104fe..72c58a2b4 100644 --- a/util/random.c +++ b/util/random.c @@ -75,8 +75,8 @@ struct ub_randstate { int rc4_ready; }; -/** Size of key to use */ -#define SEED_SIZE 20 +/** Size of key to use (must be multiple of 8) */ +#define SEED_SIZE 24 /** * Max random value. Similar to RAND_MAX, but more portable @@ -116,18 +116,22 @@ ub_systemseed(unsigned int seed) static void ub_arc4random_stir(struct ub_randstate* s, struct ub_randstate* from) { - unsigned char rand_buf[SEED_SIZE]; + /* not as unsigned char, but longerint so that it is + aligned properly on alignment sensitive platforms */ + uint64_t rand_buf[SEED_SIZE/sizeof(uint64_t)]; int i; memset(&s->rc4, 0, sizeof(s->rc4)); memset(rand_buf, 0xc, sizeof(rand_buf)); if (from) { + uint8_t* rbuf = (uint8_t*)rand_buf; for(i=0; irc4, SEED_SIZE, rand_buf); + RC4_set_key(&s->rc4, SEED_SIZE, (unsigned char*)rand_buf); /* * Discard early keystream, as per recommendations in: * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps */ for(i = 0; i <= 256; i += sizeof(rand_buf)) - RC4(&s->rc4, sizeof(rand_buf), rand_buf, rand_buf); + RC4(&s->rc4, sizeof(rand_buf), (unsigned char*)rand_buf, + (unsigned char*)rand_buf); memset(rand_buf, 0, sizeof(rand_buf));