diff options
| author | deraadt <> | 2003-02-14 17:12:54 +0000 |
|---|---|---|
| committer | deraadt <> | 2003-02-14 17:12:54 +0000 |
| commit | f14577dc0d7d942846ae2f7bd106dd1d82008bac (patch) | |
| tree | 9bae9118d8257993aa34d83090e907aa822babf0 /src/lib/libc | |
| parent | df50f5d5668c1dd3920be8a8c09c8bbd00f223cd (diff) | |
| download | openbsd-f14577dc0d7d942846ae2f7bd106dd1d82008bac.tar.gz openbsd-f14577dc0d7d942846ae2f7bd106dd1d82008bac.tar.bz2 openbsd-f14577dc0d7d942846ae2f7bd106dd1d82008bac.zip | |
re-stir if pid changes; markus & me
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/crypt/arc4random.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/lib/libc/crypt/arc4random.c b/src/lib/libc/crypt/arc4random.c index 4e916ab99a..a41001bcc3 100644 --- a/src/lib/libc/crypt/arc4random.c +++ b/src/lib/libc/crypt/arc4random.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: arc4random.c,v 1.6 2001/06/05 05:05:38 pvalchev Exp $ */ | 1 | /* $OpenBSD: arc4random.c,v 1.7 2003/02/14 17:12:54 deraadt Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Arc4 random number generator for OpenBSD. | 4 | * Arc4 random number generator for OpenBSD. |
| @@ -44,8 +44,9 @@ struct arc4_stream { | |||
| 44 | u_int8_t s[256]; | 44 | u_int8_t s[256]; |
| 45 | }; | 45 | }; |
| 46 | 46 | ||
| 47 | int rs_initialized; | 47 | static int rs_initialized; |
| 48 | static struct arc4_stream rs; | 48 | static struct arc4_stream rs; |
| 49 | static pid_t arc4_stir_pid; | ||
| 49 | 50 | ||
| 50 | static inline void | 51 | static inline void |
| 51 | arc4_init(as) | 52 | arc4_init(as) |
| @@ -113,6 +114,7 @@ arc4_stir(as) | |||
| 113 | /* fd < 0 or failed sysctl ? Ah, what the heck. We'll just take | 114 | /* fd < 0 or failed sysctl ? Ah, what the heck. We'll just take |
| 114 | * whatever was on the stack... */ | 115 | * whatever was on the stack... */ |
| 115 | 116 | ||
| 117 | arc4_stir_pid = getpid(); | ||
| 116 | arc4_addrandom(as, (void *) &rdat, sizeof(rdat)); | 118 | arc4_addrandom(as, (void *) &rdat, sizeof(rdat)); |
| 117 | } | 119 | } |
| 118 | 120 | ||
| @@ -166,7 +168,7 @@ arc4random_addrandom(dat, datlen) | |||
| 166 | u_int32_t | 168 | u_int32_t |
| 167 | arc4random() | 169 | arc4random() |
| 168 | { | 170 | { |
| 169 | if (!rs_initialized) | 171 | if (!rs_initialized || arc4_stir_pid != getpid()) |
| 170 | arc4random_stir(); | 172 | arc4random_stir(); |
| 171 | return arc4_getword(&rs); | 173 | return arc4_getword(&rs); |
| 172 | } | 174 | } |
