summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/random.c
diff options
context:
space:
mode:
authormcpowers <none@none>2006-05-01 16:17:15 -0700
committermcpowers <none@none>2006-05-01 16:17:15 -0700
commit8047c9fb10f4d3f14385d535d6b23a5eb80c0c0f (patch)
tree192b7c0157fe031e0882c2cd25d196fd9ad70bc4 /usr/src/uts/common/io/random.c
parentb7b2cb069f0572c787a861df08054e686404c23e (diff)
downloadillumos-joyent-8047c9fb10f4d3f14385d535d6b23a5eb80c0c0f.tar.gz
PSARC 2006/214 Crypto Framework random number API/SPI update
6374503 C_SeedRandom is too slow causing poor performance with Apache/OpenSSL when using pkcs11
Diffstat (limited to 'usr/src/uts/common/io/random.c')
-rw-r--r--usr/src/uts/common/io/random.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/usr/src/uts/common/io/random.c b/usr/src/uts/common/io/random.c
index d1d335ee7f..9d3a7d8b56 100644
--- a/usr/src/uts/common/io/random.c
+++ b/usr/src/uts/common/io/random.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -19,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -278,6 +277,9 @@ rnd_write(dev_t dev, struct uio *uiop, cred_t *credp)
int error;
uint8_t buf[WRITEBUFSIZE];
size_t bytes;
+ minor_t devno;
+
+ devno = getminor(dev);
while (uiop->uio_resid > 0) {
bytes = min(sizeof (buf), uiop->uio_resid);
@@ -287,9 +289,19 @@ rnd_write(dev_t dev, struct uio *uiop, cred_t *credp)
if ((error = uiomove(buf, bytes, UIO_WRITE, uiop)) != 0)
return (error);
- /* Add bytes to the pool but don't change the entropy level */
- if ((error = random_add_entropy(buf, bytes, 0)) != 0)
- return (error);
+ switch (devno) {
+ case DEVRANDOM:
+ if ((error = random_add_entropy(buf, bytes, 0)) != 0)
+ return (error);
+ break;
+ case DEVURANDOM:
+ if ((error = random_add_pseudo_entropy(buf, bytes,
+ 0)) != 0)
+ return (error);
+ break;
+ default:
+ return (ENXIO);
+ }
}
return (0);