diff options
Diffstat (limited to 'usr/src/uts/common/crypto/io/aes.c')
-rw-r--r-- | usr/src/uts/common/crypto/io/aes.c | 47 |
1 files changed, 11 insertions, 36 deletions
diff --git a/usr/src/uts/common/crypto/io/aes.c b/usr/src/uts/common/crypto/io/aes.c index 45044e1940..328599e331 100644 --- a/usr/src/uts/common/crypto/io/aes.c +++ b/usr/src/uts/common/crypto/io/aes.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -232,51 +232,26 @@ _init(void) { int ret; - /* - * Register with KCF. If the registration fails, return error. - */ - if ((ret = crypto_register_provider(&aes_prov_info, - &aes_prov_handle)) != CRYPTO_SUCCESS) { - cmn_err(CE_WARN, "%s _init: crypto_register_provider()" - "failed (0x%x)", CRYPTO_PROVIDER_NAME, ret); - return (EACCES); - } + if ((ret = mod_install(&modlinkage)) != 0) + return (ret); - if ((ret = mod_install(&modlinkage)) != 0) { - int rv; - - ASSERT(aes_prov_handle != NULL); - /* We should not return if the unregister returns busy. */ - while ((rv = crypto_unregister_provider(aes_prov_handle)) - == CRYPTO_BUSY) { - cmn_err(CE_WARN, - "%s _init: crypto_unregister_provider() " - "failed (0x%x). Retrying.", - CRYPTO_PROVIDER_NAME, rv); - /* wait 10 seconds and try again. */ - delay(10 * drv_usectohz(1000000)); - } + /* Register with KCF. If the registration fails, remove the module. */ + if (crypto_register_provider(&aes_prov_info, &aes_prov_handle)) { + (void) mod_remove(&modlinkage); + return (EACCES); } - return (ret); + return (0); } int _fini(void) { - int ret; - - /* - * Unregister from KCF if previous registration succeeded. - */ + /* Unregister from KCF if module is registered */ if (aes_prov_handle != NULL) { - if ((ret = crypto_unregister_provider(aes_prov_handle)) != - CRYPTO_SUCCESS) { - cmn_err(CE_WARN, - "%s _fini: crypto_unregister_provider() " - "failed (0x%x)", CRYPTO_PROVIDER_NAME, ret); + if (crypto_unregister_provider(aes_prov_handle)) return (EBUSY); - } + aes_prov_handle = NULL; } |