diff options
author | mcpowers <none@none> | 2006-05-01 16:17:15 -0700 |
---|---|---|
committer | mcpowers <none@none> | 2006-05-01 16:17:15 -0700 |
commit | 8047c9fb10f4d3f14385d535d6b23a5eb80c0c0f (patch) | |
tree | 192b7c0157fe031e0882c2cd25d196fd9ad70bc4 /usr/src/uts/common/io/random.c | |
parent | b7b2cb069f0572c787a861df08054e686404c23e (diff) | |
download | illumos-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.c | 26 |
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); |