From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com
Subject: Re: Completeness status of musl
Date: Fri, 24 Jun 2011 14:12:46 +0200 [thread overview]
Message-ID: <20110624121246.GU27421@port70.net> (raw)
In-Reply-To: <20110623185041.GQ27421@port70.net>
[-- Attachment #1: Type: text/plain, Size: 229 bytes --]
* Szabolcs Nagy <nsz@port70.net> [2011-06-23 20:50:41 +0200]:
> * Szabolcs Nagy <nsz@port70.net> [2011-06-23 16:16:08 +0200]:
> > modified a bit to use uint32_t and uint64_t
>
> i changed the seeding
added locking
(not tested)
[-- Attachment #2: random-lock.diff --]
[-- Type: text/x-diff, Size: 1715 bytes --]
diff --git a/src/prng/random.c b/src/prng/random.c
index 4b2daef..cc5702e 100644
--- a/src/prng/random.c
+++ b/src/prng/random.c
@@ -7,6 +7,7 @@
#include <stdlib.h>
#include <stdint.h>
+#include "libc.h"
/*
this code uses the same lagged fibonacci generator as the
@@ -32,6 +33,7 @@ static int n = 31;
static int i = 3;
static int j = 0;
static uint32_t *x = init+1;
+static int lock;
static uint32_t lcg31(uint32_t x) {
return (1103515245*x + 12345) & 0x7fffffff;
@@ -53,7 +55,7 @@ static void loadstate(uint32_t *state) {
j = x[-1]&0xff;
}
-void srandom(unsigned seed) {
+static void __srandom(unsigned seed) {
int k;
uint64_t s = seed;
@@ -71,11 +73,20 @@ void srandom(unsigned seed) {
x[0] |= 1;
}
+void srandom(unsigned seed) {
+ LOCK(&lock);
+ __srandom(seed);
+ UNLOCK(&lock);
+}
+
char *initstate(unsigned seed, char *state, size_t size) {
- void *old = savestate();
+ void *old;
+
if (size < 8)
return 0;
- else if (size < 32)
+ LOCK(&lock);
+ old = savestate();
+ if (size < 32)
n = 0;
else if (size < 64)
n = 7;
@@ -86,26 +97,36 @@ char *initstate(unsigned seed, char *state, size_t size) {
else
n = 63;
x = (uint32_t*)state + 1;
- srandom(seed);
+ __srandom(seed);
+ UNLOCK(&lock);
return old;
}
char *setstate(char *state) {
- void *old = savestate();
+ void *old;
+
+ LOCK(&lock);
+ old = savestate();
loadstate((uint32_t*)state);
+ UNLOCK(&lock);
return old;
}
long random(void) {
long k;
- if (n == 0)
- return x[0] = lcg31(x[0]);
+ LOCK(&lock);
+ if (n == 0) {
+ k = x[0] = lcg31(x[0]);
+ goto end;
+ }
x[i] += x[j];
k = x[i]>>1;
if (++i == n)
i = 0;
if (++j == n)
j = 0;
+end:
+ UNLOCK(&lock);
return k;
}
next prev parent reply other threads:[~2011-06-24 12:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-28 23:41 Help assessing " Rich Felker
2011-05-29 16:19 ` gs
2011-05-29 16:44 ` gs
2011-05-29 17:32 ` gs
2011-05-29 18:08 ` Szabolcs Nagy
2011-05-30 10:30 ` Szabolcs Nagy
2011-05-30 15:47 ` Rich Felker
2011-05-30 17:27 ` Szabolcs Nagy
2011-06-08 23:58 ` Completeness " Rich Felker
2011-06-21 1:46 ` Szabolcs Nagy
2011-06-23 6:54 ` Rich Felker
2011-06-23 13:25 ` Szabolcs Nagy
2011-06-23 14:16 ` Szabolcs Nagy
2011-06-23 18:50 ` Szabolcs Nagy
2011-06-24 12:12 ` Szabolcs Nagy [this message]
2011-06-25 18:31 ` Szabolcs Nagy
2011-06-26 10:30 ` Szabolcs Nagy
2011-06-29 21:14 ` Rich Felker
2011-07-05 15:40 ` Hiltjo Posthuma
2011-06-18 21:32 ` Help assessing " Szabolcs Nagy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110624121246.GU27421@port70.net \
--to=nsz@port70.net \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).