diff options
author | Bob Beck <beck@cvs.openbsd.org> | 2014-06-20 20:27:23 +0000 |
---|---|---|
committer | Bob Beck <beck@cvs.openbsd.org> | 2014-06-20 20:27:23 +0000 |
commit | a9df9a565106f6338c1928804fe8844b0359fc1d (patch) | |
tree | 7a93a353c1d156c29b82f481b5d2c4f25366f940 /lib | |
parent | 579220a1423598cfe3c857618f42274a9337a3ca (diff) |
KNF
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libcrypto/arc4random/getentropy_linux.c | 104 |
1 files changed, 56 insertions, 48 deletions
diff --git a/lib/libcrypto/arc4random/getentropy_linux.c b/lib/libcrypto/arc4random/getentropy_linux.c index ea838cd03c0..39bd57a33ab 100644 --- a/lib/libcrypto/arc4random/getentropy_linux.c +++ b/lib/libcrypto/arc4random/getentropy_linux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: getentropy_linux.c,v 1.3 2014/06/20 20:18:19 deraadt Exp $ */ +/* $OpenBSD: getentropy_linux.c,v 1.4 2014/06/20 20:27:22 beck Exp $ */ /* * Copyright (c) 2014 Theo de Raadt <deraadt@openbsd.org> @@ -88,15 +88,16 @@ getentropy(void *buf, size_t len) #ifdef RANDOM_UUID /* - * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. sysctl is - * a failsafe API, so it guarantees a result. This should work - * inside a chroot, or when file descriptors are exhuasted. + * Try to use sysctl CTL_KERN, KERN_RANDOM, RANDOM_UUID. + * sysctl is a failsafe API, so it guarantees a result. This + * should work inside a chroot, or when file descriptors are + * exhuasted. * - * However this can fail if the Linux kernel removes support for sysctl. - * Starting in 2007, there have been efforts to deprecate the sysctl - * API/ABI, and push callers towards use of the chroot-unavailable - * fd-using /proc mechanism -- essentially the same problems as - * /dev/urandom. + * However this can fail if the Linux kernel removes support + * for sysctl. Starting in 2007, there have been efforts to + * deprecate the sysctl API/ABI, and push callers towards use + * of the chroot-unavailable fd-using /proc mechanism -- + * essentially the same problems as /dev/urandom. * * Numerous setbacks have been encountered in their deprecation * schedule, so as of June 2014 the kernel ABI still exists. The @@ -117,7 +118,8 @@ getentropy(void *buf, size_t len) * We have very few options: * - Even syslog_r is unsafe to call at this low level, so * there is no way to alert the user or program. - * - Cannot call abort() because some systems have unsafe corefiles. + * - Cannot call abort() because some systems have unsafe + * corefiles. * - Could raise(SIGKILL) resulting in silent program termination. * - Return EIO, to hint that arc4random's stir function * should raise(SIGKILL) @@ -292,35 +294,36 @@ getentropy_fallback(void *buf, size_t len) SHA512_Init(&ctx); for (repeat = 0; repeat < REPEAT; repeat++) { - HASHX((e = gettimeofday(&tv, NULL)) == -1, tv); - if (e != -1) { - counter += (int)tv.tv_sec; - counter += (int)tv.tv_usec; - } + HASHX((e = gettimeofday(&tv, NULL)) == -1, tv); + if (e != -1) { + counter += (int)tv.tv_sec; + counter += (int)tv.tv_usec; + } - for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); ii++) - HASHX(clock_gettime(cl[ii], &ts) == -1, ts); + for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); ii++) + HASHX(clock_gettime(cl[ii], &ts) == -1, ts); - HASHX((pid = getpid()) == -1, pid); - HASHX((pid = getsid(pid)) == -1, pid); - HASHX((pid = getppid()) == -1, pid); - HASHX((pid = getpgid(0)) == -1, pid); - HASHX((m = getpriority(0, 0)) == -1, m); + HASHX((pid = getpid()) == -1, pid); + HASHX((pid = getsid(pid)) == -1, pid); + HASHX((pid = getppid()) == -1, pid); + HASHX((pid = getpgid(0)) == -1, pid); + HASHX((m = getpriority(0, 0)) == -1, m); - ts.tv_sec = 0; - ts.tv_nsec = 1; - (void) nanosleep(&ts, NULL); + ts.tv_sec = 0; + ts.tv_nsec = 1; + (void) nanosleep(&ts, NULL); - HASHX(sigpending(&sigset) == -1, sigset); - HASHX(sigprocmask(SIG_BLOCK, NULL, &sigset) == -1, sigset); + HASHX(sigpending(&sigset) == -1, sigset); + HASHX(sigprocmask(SIG_BLOCK, NULL, &sigset) == -1, + sigset); - HASHD(main); /* an address in the main program */ - HASHD(getentropy); /* an address in this library */ - HASHD(printf); /* an address in libc */ - p = (void *)&p; - HASHD(p); /* an address on stack */ - p = (void *)&errno; - HASHD(p); /* the address of errno */ + HASHD(main); /* an address in the main program */ + HASHD(getentropy); /* man address in this library */ + HASHD(printf); /* an address in libc */ + p = (void *)&p; + HASHD(p); /* an address on stack */ + p = (void *)&errno; + HASHD(p); /* the address of errno */ if (i == 0) { struct sockaddr_storage ss; @@ -337,13 +340,13 @@ getentropy_fallback(void *buf, size_t len) struct mm { size_t npg; void *p; - } mm[] = { - { 17, MAP_FAILED }, { 3, MAP_FAILED }, - { 11, MAP_FAILED }, { 2, MAP_FAILED }, - { 5, MAP_FAILED }, { 3, MAP_FAILED }, - { 7, MAP_FAILED }, { 1, MAP_FAILED }, - { 57, MAP_FAILED }, { 3, MAP_FAILED }, - { 131, MAP_FAILED }, { 1, MAP_FAILED }, + } mm[] = { + { 17, MAP_FAILED }, { 3, MAP_FAILED }, + { 11, MAP_FAILED }, { 2, MAP_FAILED }, + { 5, MAP_FAILED }, { 3, MAP_FAILED }, + { 7, MAP_FAILED }, { 1, MAP_FAILED }, + { 57, MAP_FAILED }, { 3, MAP_FAILED }, + { 131, MAP_FAILED }, { 1, MAP_FAILED }, }; for (m = 0; m < sizeof mm/sizeof(mm[0]); m++) { @@ -355,20 +358,23 @@ getentropy_fallback(void *buf, size_t len) /* Touch some memory... */ mp = mm[m].p; - mp[counter % (mm[m].npg * pgsiz - 1)] = 1; - counter += (int)((long)(mm[m].p) / pgsiz); + mp[counter % (mm[m].npg * + pgsiz - 1)] = 1; + counter += (int)((long)(mm[m].p) + / pgsiz); } /* Check counters and times... */ for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); ii++) { - HASHX((e = clock_gettime(cl[ii], &ts)) == -1, - ts); + HASHX((e = clock_gettime(cl[ii], + &ts)) == -1, ts); if (e != -1) counter += (int)ts.tv_nsec; } - HASHX((e = getrusage(RUSAGE_SELF, &ru)) == -1, ru); + HASHX((e = getrusage(RUSAGE_SELF, &ru)) == -1, + ru); if (e != -1) { counter += (int)ru.ru_utime.tv_sec; counter += (int)ru.ru_utime.tv_usec; @@ -391,9 +397,11 @@ getentropy_fallback(void *buf, size_t len) HASHX((e = fstat(0, &st)) == -1, st); if (e == -1) { - if (S_ISREG(st.st_mode) || S_ISFIFO(st.st_mode) || + if (S_ISREG(st.st_mode) || + S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) { - HASHX(fstatvfs(0, &stvfs) == -1, stvfs); + HASHX(fstatvfs(0, &stvfs) == -1, + stvfs); HASHX(fstatfs(0, &stfs) == -1, stfs); HASHX((off = lseek(0, (off_t)0, SEEK_CUR)) < 0, off); |