summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbeck <>2014-06-25 15:53:56 +0000
committerbeck <>2014-06-25 15:53:56 +0000
commit69d2f36faae2eadd4be09546d27257594f86a13a (patch)
treee328c7903c5e458f5a420b0abb22438b430ba27a /src
parent246d5b153abc2cefc0db7c0c99d72576232d926f (diff)
downloadopenbsd-69d2f36faae2eadd4be09546d27257594f86a13a.tar.gz
openbsd-69d2f36faae2eadd4be09546d27257594f86a13a.tar.bz2
openbsd-69d2f36faae2eadd4be09546d27257594f86a13a.zip
O_NOFOLLOW would be very nice to have here if the version of linux
we are running supports it. from enh@google.com
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/arc4random/getentropy_linux.c21
-rw-r--r--src/lib/libcrypto/crypto/getentropy_linux.c21
2 files changed, 22 insertions, 20 deletions
diff --git a/src/lib/libcrypto/arc4random/getentropy_linux.c b/src/lib/libcrypto/arc4random/getentropy_linux.c
index d833d4c9e1..8166131899 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.8 2014/06/23 03:47:46 beck Exp $ */ 1/* $OpenBSD: getentropy_linux.c,v 1.9 2014/06/25 15:53:56 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>
@@ -169,24 +169,25 @@ getentropy_urandom(void *buf, size_t len)
169{ 169{
170 struct stat st; 170 struct stat st;
171 size_t i; 171 size_t i;
172 int fd, cnt; 172 int fd, cnt, flags;
173 int save_errno = errno; 173 int save_errno = errno;
174 174
175start: 175start:
176
177 flags = O_RDONLY;
178#ifdef O_NOFOLLOW
179 flags |= O_NOFOLLOW;
180#endif
176#ifdef O_CLOEXEC 181#ifdef O_CLOEXEC
177 fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC, 0); 182 flags |= O_CLOEXEC;
178 if (fd == -1) { 183#endif
179 if (errno == EINTR) 184 fd = open("/dev/urandom", flags, 0);
180 goto start;
181 goto nodevrandom;
182 }
183#else
184 fd = open("/dev/urandom", O_RDONLY, 0);
185 if (fd == -1) { 185 if (fd == -1) {
186 if (errno == EINTR) 186 if (errno == EINTR)
187 goto start; 187 goto start;
188 goto nodevrandom; 188 goto nodevrandom;
189 } 189 }
190#ifndef O_CLOEXEC
190 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); 191 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
191#endif 192#endif
192 193
diff --git a/src/lib/libcrypto/crypto/getentropy_linux.c b/src/lib/libcrypto/crypto/getentropy_linux.c
index d833d4c9e1..8166131899 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.8 2014/06/23 03:47:46 beck Exp $ */ 1/* $OpenBSD: getentropy_linux.c,v 1.9 2014/06/25 15:53:56 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>
@@ -169,24 +169,25 @@ getentropy_urandom(void *buf, size_t len)
169{ 169{
170 struct stat st; 170 struct stat st;
171 size_t i; 171 size_t i;
172 int fd, cnt; 172 int fd, cnt, flags;
173 int save_errno = errno; 173 int save_errno = errno;
174 174
175start: 175start:
176
177 flags = O_RDONLY;
178#ifdef O_NOFOLLOW
179 flags |= O_NOFOLLOW;
180#endif
176#ifdef O_CLOEXEC 181#ifdef O_CLOEXEC
177 fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC, 0); 182 flags |= O_CLOEXEC;
178 if (fd == -1) { 183#endif
179 if (errno == EINTR) 184 fd = open("/dev/urandom", flags, 0);
180 goto start;
181 goto nodevrandom;
182 }
183#else
184 fd = open("/dev/urandom", O_RDONLY, 0);
185 if (fd == -1) { 185 if (fd == -1) {
186 if (errno == EINTR) 186 if (errno == EINTR)
187 goto start; 187 goto start;
188 goto nodevrandom; 188 goto nodevrandom;
189 } 189 }
190#ifndef O_CLOEXEC
190 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); 191 fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
191#endif 192#endif
192 193