diff options
| -rw-r--r-- | src/lib/libc/crypt/arc4random.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/libc/crypt/arc4random.c b/src/lib/libc/crypt/arc4random.c index 235a5d8d83..37b1ad77c1 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.43 2014/07/13 09:32:42 beck Exp $ */ | 1 | /* $OpenBSD: arc4random.c,v 1.44 2014/07/16 00:15:35 bcook Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 1996, David Mazieres <dm@uun.org> | 4 | * Copyright (c) 1996, David Mazieres <dm@uun.org> |
| @@ -66,6 +66,13 @@ static struct { | |||
| 66 | static inline void _rs_rekey(u_char *dat, size_t datlen); | 66 | static inline void _rs_rekey(u_char *dat, size_t datlen); |
| 67 | 67 | ||
| 68 | static inline void | 68 | static inline void |
| 69 | _rs_forkhandler(void) | ||
| 70 | { | ||
| 71 | if (rs) | ||
| 72 | rs->rs_count = 0; | ||
| 73 | } | ||
| 74 | |||
| 75 | static inline void | ||
| 69 | _rs_init(u_char *buf, size_t n) | 76 | _rs_init(u_char *buf, size_t n) |
| 70 | { | 77 | { |
| 71 | if (n < KEYSZ + IVSZ) | 78 | if (n < KEYSZ + IVSZ) |
| @@ -78,6 +85,8 @@ _rs_init(u_char *buf, size_t n) | |||
| 78 | #ifdef MAP_INHERIT_ZERO | 85 | #ifdef MAP_INHERIT_ZERO |
| 79 | if (minherit(rs, sizeof(*rs), MAP_INHERIT_ZERO) == -1) | 86 | if (minherit(rs, sizeof(*rs), MAP_INHERIT_ZERO) == -1) |
| 80 | abort(); | 87 | abort(); |
| 88 | #else | ||
| 89 | _ARC4_ATFORK(_rs_forkhandler); | ||
| 81 | #endif | 90 | #endif |
| 82 | } | 91 | } |
| 83 | if (rsx == NULL) { | 92 | if (rsx == NULL) { |
