diff options
author | beck <> | 2014-06-23 03:47:46 +0000 |
---|---|---|
committer | beck <> | 2014-06-23 03:47:46 +0000 |
commit | f36fb0683122e796aa66b09a47e611631ede1944 (patch) | |
tree | 08c42e31a882abecf0d2c991be1ddb869ac26f98 | |
parent | ca3aed695a33180fbf581f1883f15a3054e5f6fd (diff) | |
download | openbsd-f36fb0683122e796aa66b09a47e611631ede1944.tar.gz openbsd-f36fb0683122e796aa66b09a47e611631ede1944.tar.bz2 openbsd-f36fb0683122e796aa66b09a47e611631ede1944.zip |
unbreak build of getentropy_sysctl - we need linux/sysctl.h, and
RANDOM_UUID is an enum member.
-rw-r--r-- | src/lib/libcrypto/arc4random/getentropy_linux.c | 39 | ||||
-rw-r--r-- | src/lib/libcrypto/crypto/getentropy_linux.c | 39 |
2 files changed, 42 insertions, 36 deletions
diff --git a/src/lib/libcrypto/arc4random/getentropy_linux.c b/src/lib/libcrypto/arc4random/getentropy_linux.c index 37efdfa53b..d833d4c9e1 100644 --- a/src/lib/libcrypto/arc4random/getentropy_linux.c +++ b/src/lib/libcrypto/arc4random/getentropy_linux.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: getentropy_linux.c,v 1.7 2014/06/23 03:32:57 beck Exp $ */ | 1 | /* $OpenBSD: getentropy_linux.c,v 1.8 2014/06/23 03:47:46 beck Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> | 4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> |
@@ -44,6 +44,7 @@ | |||
44 | #include <openssl/sha.h> | 44 | #include <openssl/sha.h> |
45 | 45 | ||
46 | #include <linux/random.h> | 46 | #include <linux/random.h> |
47 | #include <linux/sysctl.h> | ||
47 | #include <sys/vfs.h> | 48 | #include <sys/vfs.h> |
48 | 49 | ||
49 | #define REPEAT 5 | 50 | #define REPEAT 5 |
@@ -64,7 +65,9 @@ int getentropy(void *buf, size_t len); | |||
64 | extern int main(int, char *argv[]); | 65 | extern int main(int, char *argv[]); |
65 | static int gotdata(char *buf, size_t len); | 66 | static int gotdata(char *buf, size_t len); |
66 | static int getentropy_urandom(void *buf, size_t len); | 67 | static int getentropy_urandom(void *buf, size_t len); |
68 | #ifdef CTL_MAXNAME | ||
67 | static int getentropy_sysctl(void *buf, size_t len); | 69 | static int getentropy_sysctl(void *buf, size_t len); |
70 | #endif | ||
68 | static int getentropy_fallback(void *buf, size_t len); | 71 | static int getentropy_fallback(void *buf, size_t len); |
69 | 72 | ||
70 | int | 73 | int |
@@ -87,7 +90,7 @@ getentropy(void *buf, size_t len) | |||
87 | if (ret != -1) | 90 | if (ret != -1) |
88 | return (ret); | 91 | return (ret); |
89 | 92 | ||
90 | #ifdef RANDOM_UUID | 93 | #ifdef CTL_MAXNAME |
91 | /* | 94 | /* |
92 | * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. | 95 | * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. |
93 | * sysctl is a failsafe API, so it guarantees a result. This | 96 | * sysctl is a failsafe API, so it guarantees a result. This |
@@ -108,7 +111,7 @@ getentropy(void *buf, size_t len) | |||
108 | ret = getentropy_sysctl(buf, len); | 111 | ret = getentropy_sysctl(buf, len); |
109 | if (ret != -1) | 112 | if (ret != -1) |
110 | return (ret); | 113 | return (ret); |
111 | #endif /* RANDOM_UUID */ | 114 | #endif /* CTL_MAXNAME */ |
112 | 115 | ||
113 | /* | 116 | /* |
114 | * Entropy collection via /dev/urandom and sysctl have failed. | 117 | * Entropy collection via /dev/urandom and sysctl have failed. |
@@ -218,11 +221,11 @@ nodevrandom: | |||
218 | return -1; | 221 | return -1; |
219 | } | 222 | } |
220 | 223 | ||
221 | #ifdef RANDOM_UUID | 224 | #ifdef CTL_MAXNAME |
222 | static int | 225 | static int |
223 | getentropy_sysctl(void *buf, size_t len) | 226 | getentropy_sysctl(void *buf, size_t len) |
224 | { | 227 | { |
225 | static const int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; | 228 | static int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; |
226 | size_t i, chunk; | 229 | size_t i, chunk; |
227 | int save_errno = errno; | 230 | int save_errno = errno; |
228 | 231 | ||
@@ -233,7 +236,7 @@ getentropy_sysctl(void *buf, size_t len) | |||
233 | struct __sysctl_args args = { | 236 | struct __sysctl_args args = { |
234 | .name = mib, | 237 | .name = mib, |
235 | .nlen = 3, | 238 | .nlen = 3, |
236 | .oldval = &buf[i], | 239 | .oldval = buf + i, |
237 | .oldlenp = &chunk, | 240 | .oldlenp = &chunk, |
238 | }; | 241 | }; |
239 | if (syscall(SYS__sysctl, &args) != 0) | 242 | if (syscall(SYS__sysctl, &args) != 0) |
@@ -248,7 +251,7 @@ sysctlfailed: | |||
248 | errno = EIO; | 251 | errno = EIO; |
249 | return -1; | 252 | return -1; |
250 | } | 253 | } |
251 | #endif /* RANDOM_UUID */ | 254 | #endif /* CTL_MAXNAME */ |
252 | 255 | ||
253 | static int cl[] = { | 256 | static int cl[] = { |
254 | CLOCK_REALTIME, | 257 | CLOCK_REALTIME, |
@@ -333,7 +336,7 @@ getentropy_fallback(void *buf, size_t len) | |||
333 | struct statfs stfs; | 336 | struct statfs stfs; |
334 | socklen_t ssl; | 337 | socklen_t ssl; |
335 | off_t off; | 338 | off_t off; |
336 | 339 | ||
337 | /* | 340 | /* |
338 | * Prime-sized mappings encourage fragmentation; | 341 | * Prime-sized mappings encourage fragmentation; |
339 | * thus exposing some address entropy. | 342 | * thus exposing some address entropy. |
@@ -349,7 +352,7 @@ getentropy_fallback(void *buf, size_t len) | |||
349 | { 57, MAP_FAILED }, { 3, MAP_FAILED }, | 352 | { 57, MAP_FAILED }, { 3, MAP_FAILED }, |
350 | { 131, MAP_FAILED }, { 1, MAP_FAILED }, | 353 | { 131, MAP_FAILED }, { 1, MAP_FAILED }, |
351 | }; | 354 | }; |
352 | 355 | ||
353 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { | 356 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { |
354 | HX(mm[m].p = mmap(NULL, | 357 | HX(mm[m].p = mmap(NULL, |
355 | mm[m].npg * pgs, | 358 | mm[m].npg * pgs, |
@@ -367,7 +370,7 @@ getentropy_fallback(void *buf, size_t len) | |||
367 | cnt += (int)((long)(mm[m].p) | 370 | cnt += (int)((long)(mm[m].p) |
368 | / pgs); | 371 | / pgs); |
369 | } | 372 | } |
370 | 373 | ||
371 | /* Check cnts and times... */ | 374 | /* Check cnts and times... */ |
372 | for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); | 375 | for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); |
373 | ii++) { | 376 | ii++) { |
@@ -376,7 +379,7 @@ getentropy_fallback(void *buf, size_t len) | |||
376 | if (e != -1) | 379 | if (e != -1) |
377 | cnt += (int)ts.tv_nsec; | 380 | cnt += (int)ts.tv_nsec; |
378 | } | 381 | } |
379 | 382 | ||
380 | HX((e = getrusage(RUSAGE_SELF, | 383 | HX((e = getrusage(RUSAGE_SELF, |
381 | &ru)) == -1, ru); | 384 | &ru)) == -1, ru); |
382 | if (e != -1) { | 385 | if (e != -1) { |
@@ -384,21 +387,21 @@ getentropy_fallback(void *buf, size_t len) | |||
384 | cnt += (int)ru.ru_utime.tv_usec; | 387 | cnt += (int)ru.ru_utime.tv_usec; |
385 | } | 388 | } |
386 | } | 389 | } |
387 | 390 | ||
388 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { | 391 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { |
389 | if (mm[m].p != MAP_FAILED) | 392 | if (mm[m].p != MAP_FAILED) |
390 | munmap(mm[m].p, mm[m].npg * pgs); | 393 | munmap(mm[m].p, mm[m].npg * pgs); |
391 | mm[m].p = MAP_FAILED; | 394 | mm[m].p = MAP_FAILED; |
392 | } | 395 | } |
393 | 396 | ||
394 | HX(stat(".", &st) == -1, st); | 397 | HX(stat(".", &st) == -1, st); |
395 | HX(statvfs(".", &stvfs) == -1, stvfs); | 398 | HX(statvfs(".", &stvfs) == -1, stvfs); |
396 | HX(statfs(".", &stfs) == -1, stfs); | 399 | HX(statfs(".", &stfs) == -1, stfs); |
397 | 400 | ||
398 | HX(stat("/", &st) == -1, st); | 401 | HX(stat("/", &st) == -1, st); |
399 | HX(statvfs("/", &stvfs) == -1, stvfs); | 402 | HX(statvfs("/", &stvfs) == -1, stvfs); |
400 | HX(statfs("/", &stfs) == -1, stfs); | 403 | HX(statfs("/", &stfs) == -1, stfs); |
401 | 404 | ||
402 | HX((e = fstat(0, &st)) == -1, st); | 405 | HX((e = fstat(0, &st)) == -1, st); |
403 | if (e == -1) { | 406 | if (e == -1) { |
404 | if (S_ISREG(st.st_mode) || | 407 | if (S_ISREG(st.st_mode) || |
@@ -422,7 +425,7 @@ getentropy_fallback(void *buf, size_t len) | |||
422 | ss); | 425 | ss); |
423 | } | 426 | } |
424 | } | 427 | } |
425 | 428 | ||
426 | HX((e = getrusage(RUSAGE_CHILDREN, | 429 | HX((e = getrusage(RUSAGE_CHILDREN, |
427 | &ru)) == -1, ru); | 430 | &ru)) == -1, ru); |
428 | if (e != -1) { | 431 | if (e != -1) { |
@@ -433,13 +436,13 @@ getentropy_fallback(void *buf, size_t len) | |||
433 | /* Subsequent hashes absorb previous result */ | 436 | /* Subsequent hashes absorb previous result */ |
434 | HD(results); | 437 | HD(results); |
435 | } | 438 | } |
436 | 439 | ||
437 | HX((e = gettimeofday(&tv, NULL)) == -1, tv); | 440 | HX((e = gettimeofday(&tv, NULL)) == -1, tv); |
438 | if (e != -1) { | 441 | if (e != -1) { |
439 | cnt += (int)tv.tv_sec; | 442 | cnt += (int)tv.tv_sec; |
440 | cnt += (int)tv.tv_usec; | 443 | cnt += (int)tv.tv_usec; |
441 | } | 444 | } |
442 | 445 | ||
443 | HD(cnt); | 446 | HD(cnt); |
444 | } | 447 | } |
445 | SHA512_Final(results, &ctx); | 448 | SHA512_Final(results, &ctx); |
diff --git a/src/lib/libcrypto/crypto/getentropy_linux.c b/src/lib/libcrypto/crypto/getentropy_linux.c index 37efdfa53b..d833d4c9e1 100644 --- a/src/lib/libcrypto/crypto/getentropy_linux.c +++ b/src/lib/libcrypto/crypto/getentropy_linux.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: getentropy_linux.c,v 1.7 2014/06/23 03:32:57 beck Exp $ */ | 1 | /* $OpenBSD: getentropy_linux.c,v 1.8 2014/06/23 03:47:46 beck Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> | 4 | * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> |
@@ -44,6 +44,7 @@ | |||
44 | #include <openssl/sha.h> | 44 | #include <openssl/sha.h> |
45 | 45 | ||
46 | #include <linux/random.h> | 46 | #include <linux/random.h> |
47 | #include <linux/sysctl.h> | ||
47 | #include <sys/vfs.h> | 48 | #include <sys/vfs.h> |
48 | 49 | ||
49 | #define REPEAT 5 | 50 | #define REPEAT 5 |
@@ -64,7 +65,9 @@ int getentropy(void *buf, size_t len); | |||
64 | extern int main(int, char *argv[]); | 65 | extern int main(int, char *argv[]); |
65 | static int gotdata(char *buf, size_t len); | 66 | static int gotdata(char *buf, size_t len); |
66 | static int getentropy_urandom(void *buf, size_t len); | 67 | static int getentropy_urandom(void *buf, size_t len); |
68 | #ifdef CTL_MAXNAME | ||
67 | static int getentropy_sysctl(void *buf, size_t len); | 69 | static int getentropy_sysctl(void *buf, size_t len); |
70 | #endif | ||
68 | static int getentropy_fallback(void *buf, size_t len); | 71 | static int getentropy_fallback(void *buf, size_t len); |
69 | 72 | ||
70 | int | 73 | int |
@@ -87,7 +90,7 @@ getentropy(void *buf, size_t len) | |||
87 | if (ret != -1) | 90 | if (ret != -1) |
88 | return (ret); | 91 | return (ret); |
89 | 92 | ||
90 | #ifdef RANDOM_UUID | 93 | #ifdef CTL_MAXNAME |
91 | /* | 94 | /* |
92 | * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. | 95 | * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. |
93 | * sysctl is a failsafe API, so it guarantees a result. This | 96 | * sysctl is a failsafe API, so it guarantees a result. This |
@@ -108,7 +111,7 @@ getentropy(void *buf, size_t len) | |||
108 | ret = getentropy_sysctl(buf, len); | 111 | ret = getentropy_sysctl(buf, len); |
109 | if (ret != -1) | 112 | if (ret != -1) |
110 | return (ret); | 113 | return (ret); |
111 | #endif /* RANDOM_UUID */ | 114 | #endif /* CTL_MAXNAME */ |
112 | 115 | ||
113 | /* | 116 | /* |
114 | * Entropy collection via /dev/urandom and sysctl have failed. | 117 | * Entropy collection via /dev/urandom and sysctl have failed. |
@@ -218,11 +221,11 @@ nodevrandom: | |||
218 | return -1; | 221 | return -1; |
219 | } | 222 | } |
220 | 223 | ||
221 | #ifdef RANDOM_UUID | 224 | #ifdef CTL_MAXNAME |
222 | static int | 225 | static int |
223 | getentropy_sysctl(void *buf, size_t len) | 226 | getentropy_sysctl(void *buf, size_t len) |
224 | { | 227 | { |
225 | static const int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; | 228 | static int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; |
226 | size_t i, chunk; | 229 | size_t i, chunk; |
227 | int save_errno = errno; | 230 | int save_errno = errno; |
228 | 231 | ||
@@ -233,7 +236,7 @@ getentropy_sysctl(void *buf, size_t len) | |||
233 | struct __sysctl_args args = { | 236 | struct __sysctl_args args = { |
234 | .name = mib, | 237 | .name = mib, |
235 | .nlen = 3, | 238 | .nlen = 3, |
236 | .oldval = &buf[i], | 239 | .oldval = buf + i, |
237 | .oldlenp = &chunk, | 240 | .oldlenp = &chunk, |
238 | }; | 241 | }; |
239 | if (syscall(SYS__sysctl, &args) != 0) | 242 | if (syscall(SYS__sysctl, &args) != 0) |
@@ -248,7 +251,7 @@ sysctlfailed: | |||
248 | errno = EIO; | 251 | errno = EIO; |
249 | return -1; | 252 | return -1; |
250 | } | 253 | } |
251 | #endif /* RANDOM_UUID */ | 254 | #endif /* CTL_MAXNAME */ |
252 | 255 | ||
253 | static int cl[] = { | 256 | static int cl[] = { |
254 | CLOCK_REALTIME, | 257 | CLOCK_REALTIME, |
@@ -333,7 +336,7 @@ getentropy_fallback(void *buf, size_t len) | |||
333 | struct statfs stfs; | 336 | struct statfs stfs; |
334 | socklen_t ssl; | 337 | socklen_t ssl; |
335 | off_t off; | 338 | off_t off; |
336 | 339 | ||
337 | /* | 340 | /* |
338 | * Prime-sized mappings encourage fragmentation; | 341 | * Prime-sized mappings encourage fragmentation; |
339 | * thus exposing some address entropy. | 342 | * thus exposing some address entropy. |
@@ -349,7 +352,7 @@ getentropy_fallback(void *buf, size_t len) | |||
349 | { 57, MAP_FAILED }, { 3, MAP_FAILED }, | 352 | { 57, MAP_FAILED }, { 3, MAP_FAILED }, |
350 | { 131, MAP_FAILED }, { 1, MAP_FAILED }, | 353 | { 131, MAP_FAILED }, { 1, MAP_FAILED }, |
351 | }; | 354 | }; |
352 | 355 | ||
353 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { | 356 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { |
354 | HX(mm[m].p = mmap(NULL, | 357 | HX(mm[m].p = mmap(NULL, |
355 | mm[m].npg * pgs, | 358 | mm[m].npg * pgs, |
@@ -367,7 +370,7 @@ getentropy_fallback(void *buf, size_t len) | |||
367 | cnt += (int)((long)(mm[m].p) | 370 | cnt += (int)((long)(mm[m].p) |
368 | / pgs); | 371 | / pgs); |
369 | } | 372 | } |
370 | 373 | ||
371 | /* Check cnts and times... */ | 374 | /* Check cnts and times... */ |
372 | for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); | 375 | for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); |
373 | ii++) { | 376 | ii++) { |
@@ -376,7 +379,7 @@ getentropy_fallback(void *buf, size_t len) | |||
376 | if (e != -1) | 379 | if (e != -1) |
377 | cnt += (int)ts.tv_nsec; | 380 | cnt += (int)ts.tv_nsec; |
378 | } | 381 | } |
379 | 382 | ||
380 | HX((e = getrusage(RUSAGE_SELF, | 383 | HX((e = getrusage(RUSAGE_SELF, |
381 | &ru)) == -1, ru); | 384 | &ru)) == -1, ru); |
382 | if (e != -1) { | 385 | if (e != -1) { |
@@ -384,21 +387,21 @@ getentropy_fallback(void *buf, size_t len) | |||
384 | cnt += (int)ru.ru_utime.tv_usec; | 387 | cnt += (int)ru.ru_utime.tv_usec; |
385 | } | 388 | } |
386 | } | 389 | } |
387 | 390 | ||
388 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { | 391 | for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { |
389 | if (mm[m].p != MAP_FAILED) | 392 | if (mm[m].p != MAP_FAILED) |
390 | munmap(mm[m].p, mm[m].npg * pgs); | 393 | munmap(mm[m].p, mm[m].npg * pgs); |
391 | mm[m].p = MAP_FAILED; | 394 | mm[m].p = MAP_FAILED; |
392 | } | 395 | } |
393 | 396 | ||
394 | HX(stat(".", &st) == -1, st); | 397 | HX(stat(".", &st) == -1, st); |
395 | HX(statvfs(".", &stvfs) == -1, stvfs); | 398 | HX(statvfs(".", &stvfs) == -1, stvfs); |
396 | HX(statfs(".", &stfs) == -1, stfs); | 399 | HX(statfs(".", &stfs) == -1, stfs); |
397 | 400 | ||
398 | HX(stat("/", &st) == -1, st); | 401 | HX(stat("/", &st) == -1, st); |
399 | HX(statvfs("/", &stvfs) == -1, stvfs); | 402 | HX(statvfs("/", &stvfs) == -1, stvfs); |
400 | HX(statfs("/", &stfs) == -1, stfs); | 403 | HX(statfs("/", &stfs) == -1, stfs); |
401 | 404 | ||
402 | HX((e = fstat(0, &st)) == -1, st); | 405 | HX((e = fstat(0, &st)) == -1, st); |
403 | if (e == -1) { | 406 | if (e == -1) { |
404 | if (S_ISREG(st.st_mode) || | 407 | if (S_ISREG(st.st_mode) || |
@@ -422,7 +425,7 @@ getentropy_fallback(void *buf, size_t len) | |||
422 | ss); | 425 | ss); |
423 | } | 426 | } |
424 | } | 427 | } |
425 | 428 | ||
426 | HX((e = getrusage(RUSAGE_CHILDREN, | 429 | HX((e = getrusage(RUSAGE_CHILDREN, |
427 | &ru)) == -1, ru); | 430 | &ru)) == -1, ru); |
428 | if (e != -1) { | 431 | if (e != -1) { |
@@ -433,13 +436,13 @@ getentropy_fallback(void *buf, size_t len) | |||
433 | /* Subsequent hashes absorb previous result */ | 436 | /* Subsequent hashes absorb previous result */ |
434 | HD(results); | 437 | HD(results); |
435 | } | 438 | } |
436 | 439 | ||
437 | HX((e = gettimeofday(&tv, NULL)) == -1, tv); | 440 | HX((e = gettimeofday(&tv, NULL)) == -1, tv); |
438 | if (e != -1) { | 441 | if (e != -1) { |
439 | cnt += (int)tv.tv_sec; | 442 | cnt += (int)tv.tv_sec; |
440 | cnt += (int)tv.tv_usec; | 443 | cnt += (int)tv.tv_usec; |
441 | } | 444 | } |
442 | 445 | ||
443 | HD(cnt); | 446 | HD(cnt); |
444 | } | 447 | } |
445 | SHA512_Final(results, &ctx); | 448 | SHA512_Final(results, &ctx); |