From 1c17d2940cd374751007291a1c0555ae08e4e017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Fri, 24 Dec 2021 17:43:28 +0100 Subject: [PATCH] module: icp: remove unused notification framework MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Brian Behlendorf Signed-off-by: Ahelenia ZiemiaƄska Closes #12901 --- lib/libicp/Makefile.am | 1 - module/icp/Makefile.in | 1 - module/icp/api/kcf_miscapi.c | 127 --------------------- module/icp/core/kcf_mech_tabs.c | 27 ++++- module/icp/core/kcf_sched.c | 7 -- module/icp/include/sys/crypto/impl.h | 1 - module/icp/include/sys/crypto/sched_impl.h | 69 ----------- module/icp/spi/kcf_spi.c | 29 ----- 8 files changed, 25 insertions(+), 237 deletions(-) delete mode 100644 module/icp/api/kcf_miscapi.c diff --git a/lib/libicp/Makefile.am b/lib/libicp/Makefile.am index 4e8585f92..6ebcd4907 100644 --- a/lib/libicp/Makefile.am +++ b/lib/libicp/Makefile.am @@ -28,7 +28,6 @@ KERNEL_C = \ spi/kcf_spi.c \ api/kcf_ctxops.c \ api/kcf_cipher.c \ - api/kcf_miscapi.c \ api/kcf_mac.c \ algs/aes/aes_impl_aesni.c \ algs/aes/aes_impl_generic.c \ diff --git a/module/icp/Makefile.in b/module/icp/Makefile.in index d9f4ff2f8..eb807d0e5 100644 --- a/module/icp/Makefile.in +++ b/module/icp/Makefile.in @@ -16,7 +16,6 @@ ccflags-y := -I$(icp_include) $(MODULE)-objs += illumos-crypto.o $(MODULE)-objs += api/kcf_cipher.o $(MODULE)-objs += api/kcf_mac.o -$(MODULE)-objs += api/kcf_miscapi.o $(MODULE)-objs += api/kcf_ctxops.o $(MODULE)-objs += core/kcf_callprov.o $(MODULE)-objs += core/kcf_prov_tabs.o diff --git a/module/icp/api/kcf_miscapi.c b/module/icp/api/kcf_miscapi.c deleted file mode 100644 index bb6c52946..000000000 --- a/module/icp/api/kcf_miscapi.c +++ /dev/null @@ -1,127 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * 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. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include -#include -#include -#include -#include - -/* - * All event subscribers are put on a list. kcf_notify_list_lock - * protects changes to this list. - * - * The following locking order is maintained in the code - The - * global kcf_notify_list_lock followed by the individual lock - * in a kcf_ntfy_elem structure (kn_lock). - */ -kmutex_t ntfy_list_lock; -kcondvar_t ntfy_list_cv; /* cv the service thread waits on */ -static kcf_ntfy_elem_t *ntfy_list_head; - -/* - * crypto_mech2id() - * - * Arguments: - * . mechname: A null-terminated string identifying the mechanism name. - * - * Description: - * Walks the mechanisms tables, looking for an entry that matches the - * mechname. Once it find it, it builds the 64-bit mech_type and returns - * it. If there are no providers for the mechanism, - * but there is an unloaded provider, this routine will attempt - * to load it. - * - * Context: - * Process and interruption. - * - * Returns: - * The unique mechanism identified by 'mechname', if found. - * CRYPTO_MECH_INVALID otherwise. - */ -crypto_mech_type_t -crypto_mech2id(const char *mechname) -{ - return (crypto_mech2id_common(mechname, B_TRUE)); -} - -/* - * We walk the notification list and do the callbacks. - */ -void -kcf_walk_ntfylist(uint32_t event, void *event_arg) -{ - kcf_ntfy_elem_t *nep; - int nelem = 0; - - mutex_enter(&ntfy_list_lock); - - /* - * Count how many clients are on the notification list. We need - * this count to ensure that clients which joined the list after we - * have started this walk, are not wrongly notified. - */ - for (nep = ntfy_list_head; nep != NULL; nep = nep->kn_next) - nelem++; - - for (nep = ntfy_list_head; (nep != NULL && nelem); nep = nep->kn_next) { - nelem--; - - /* - * Check if this client is interested in the - * event. - */ - if (!(nep->kn_event_mask & event)) - continue; - - mutex_enter(&nep->kn_lock); - nep->kn_state = NTFY_RUNNING; - mutex_exit(&nep->kn_lock); - mutex_exit(&ntfy_list_lock); - - /* - * We invoke the callback routine with no locks held. Another - * client could have joined the list meanwhile. This is fine - * as we maintain nelem as stated above. The NULL check in the - * for loop guards against shrinkage. Also, any callers of - * crypto_unnotify_events() at this point cv_wait till kn_state - * changes to NTFY_WAITING. Hence, nep is assured to be valid. - */ - (*nep->kn_func)(event, event_arg); - - mutex_enter(&nep->kn_lock); - nep->kn_state = NTFY_WAITING; - cv_broadcast(&nep->kn_cv); - mutex_exit(&nep->kn_lock); - - mutex_enter(&ntfy_list_lock); - } - - mutex_exit(&ntfy_list_lock); -} - -#if defined(_KERNEL) -EXPORT_SYMBOL(crypto_mech2id); -#endif diff --git a/module/icp/core/kcf_mech_tabs.c b/module/icp/core/kcf_mech_tabs.c index 811db7136..204cc178a 100644 --- a/module/icp/core/kcf_mech_tabs.c +++ b/module/icp/core/kcf_mech_tabs.c @@ -556,6 +556,26 @@ kcf_get_mech_entry(crypto_mech_type_t mech_type, kcf_mech_entry_t **mep) return (KCF_SUCCESS); } +/* + * crypto_mech2id() + * + * Arguments: + * . mechname: A null-terminated string identifying the mechanism name. + * + * Description: + * Walks the mechanisms tables, looking for an entry that matches the + * mechname. Once it find it, it builds the 64-bit mech_type and returns + * it. If there are no providers for the mechanism, + * but there is an unloaded provider, this routine will attempt + * to load it. + * + * Context: + * Process and interruption. + * + * Returns: + * The unique mechanism identified by 'mechname', if found. + * CRYPTO_MECH_INVALID otherwise. + */ /* * Lookup the hash table for an entry that matches the mechname. * If there are no providers for the mechanism, @@ -563,8 +583,11 @@ kcf_get_mech_entry(crypto_mech_type_t mech_type, kcf_mech_entry_t **mep) * to load it. */ crypto_mech_type_t -crypto_mech2id_common(const char *mechname, boolean_t load_module) +crypto_mech2id(const char *mechname) { - (void) load_module; return (kcf_mech_hash_find(mechname)); } + +#if defined(_KERNEL) +EXPORT_SYMBOL(crypto_mech2id); +#endif diff --git a/module/icp/core/kcf_sched.c b/module/icp/core/kcf_sched.c index 9dd1c39d4..9ed4f6fb2 100644 --- a/module/icp/core/kcf_sched.c +++ b/module/icp/core/kcf_sched.c @@ -287,9 +287,6 @@ kcf_sched_destroy(void) kmem_cache_destroy(kcf_areq_cache); if (kcf_sreq_cache) kmem_cache_destroy(kcf_sreq_cache); - - mutex_destroy(&ntfy_list_lock); - cv_destroy(&ntfy_list_cv); } /* @@ -339,10 +336,6 @@ kcf_sched_init(void) /* Allocate and initialize the thread pool */ kcfpool_alloc(); - /* Initialize the event notification list variables */ - mutex_init(&ntfy_list_lock, NULL, MUTEX_DEFAULT, NULL); - cv_init(&ntfy_list_cv, NULL, CV_DEFAULT, NULL); - /* Create the kcf kstat */ kcf_misc_kstat = kstat_create("kcf", 0, "framework_stats", "crypto", KSTAT_TYPE_NAMED, sizeof (kcf_stats_t) / sizeof (kstat_named_t), diff --git a/module/icp/include/sys/crypto/impl.h b/module/icp/include/sys/crypto/impl.h index 9f13866b7..c15ce0550 100644 --- a/module/icp/include/sys/crypto/impl.h +++ b/module/icp/include/sys/crypto/impl.h @@ -492,7 +492,6 @@ extern int kcf_get_mech_entry(crypto_mech_type_t, kcf_mech_entry_t **); extern kcf_provider_desc_t *kcf_alloc_provider_desc(void); extern void kcf_provider_zero_refcnt(kcf_provider_desc_t *); extern void kcf_free_provider_desc(kcf_provider_desc_t *); -extern crypto_mech_type_t crypto_mech2id_common(const char *, boolean_t); extern void undo_register_provider(kcf_provider_desc_t *, boolean_t); extern int crypto_uio_data(crypto_data_t *, uchar_t *, int, cmd_type_t, void *, void (*update)(void)); diff --git a/module/icp/include/sys/crypto/sched_impl.h b/module/icp/include/sys/crypto/sched_impl.h index fe178ad51..ee64aad12 100644 --- a/module/icp/include/sys/crypto/sched_impl.h +++ b/module/icp/include/sys/crypto/sched_impl.h @@ -346,61 +346,6 @@ typedef struct kcf_pool { } kcf_pool_t; -/* - * State of a crypto bufcall element. - */ -typedef enum cbuf_state { - CBUF_FREE = 1, - CBUF_WAITING, - CBUF_RUNNING -} cbuf_state_t; - -/* - * Structure of a crypto bufcall element. - */ -typedef struct kcf_cbuf_elem { - /* - * lock and cv to wait for CBUF_RUNNING to be done - * kc_lock also protects kc_state. - */ - kmutex_t kc_lock; - kcondvar_t kc_cv; - cbuf_state_t kc_state; - - struct kcf_cbuf_elem *kc_next; - struct kcf_cbuf_elem *kc_prev; - - void (*kc_func)(void *arg); - void *kc_arg; -} kcf_cbuf_elem_t; - -/* - * State of a notify element. - */ -typedef enum ntfy_elem_state { - NTFY_WAITING = 1, - NTFY_RUNNING -} ntfy_elem_state_t; - -/* - * Structure of a notify list element. - */ -typedef struct kcf_ntfy_elem { - /* - * lock and cv to wait for NTFY_RUNNING to be done. - * kn_lock also protects kn_state. - */ - kmutex_t kn_lock; - kcondvar_t kn_cv; - ntfy_elem_state_t kn_state; - - struct kcf_ntfy_elem *kn_next; - struct kcf_ntfy_elem *kn_prev; - - crypto_notify_callback_t kn_func; - uint32_t kn_event_mask; -} kcf_ntfy_elem_t; - /* * The following values are based on the assumption that it would @@ -412,19 +357,6 @@ typedef struct kcf_ntfy_elem { */ #define CRYPTO_TASKQ_MAX 2 * 1024 * 1024 -/* - * All pending crypto bufcalls are put on a list. cbuf_list_lock - * protects changes to this list. - */ -extern kmutex_t cbuf_list_lock; -extern kcondvar_t cbuf_list_cv; - -/* - * All event subscribers are put on a list. kcf_notify_list_lock - * protects changes to this list. - */ -extern kmutex_t ntfy_list_lock; -extern kcondvar_t ntfy_list_cv; extern void kcf_free_triedlist(kcf_prov_tried_t *); extern kcf_prov_tried_t *kcf_insert_triedlist(kcf_prov_tried_t **, @@ -447,7 +379,6 @@ extern void verify_unverified_providers(void); extern void kcf_free_req(kcf_areq_node_t *areq); extern void crypto_bufcall_service(void); -extern void kcf_walk_ntfylist(uint32_t, void *); extern void kcf_do_notify(kcf_provider_desc_t *, boolean_t); #ifdef __cplusplus diff --git a/module/icp/spi/kcf_spi.c b/module/icp/spi/kcf_spi.c index 89ecb4e41..de9585514 100644 --- a/module/icp/spi/kcf_spi.c +++ b/module/icp/spi/kcf_spi.c @@ -122,7 +122,6 @@ crypto_register_provider(const crypto_provider_info_t *info, mutex_enter(&prov_desc->pd_lock); prov_desc->pd_state = KCF_PROV_READY; mutex_exit(&prov_desc->pd_lock); - kcf_do_notify(prov_desc, B_TRUE); *handle = prov_desc->pd_kcf_prov_handle; ret = CRYPTO_SUCCESS; @@ -209,8 +208,6 @@ crypto_unregister_provider(crypto_kcf_provider_handle_t handle) cv_wait(&desc->pd_remove_cv, &desc->pd_lock); mutex_exit(&desc->pd_lock); - kcf_do_notify(desc, B_FALSE); - /* * This is the only place where kcf_free_provider_desc() * is called directly. KCF_PROV_REFRELE() should free the @@ -366,32 +363,6 @@ undo_register_provider(kcf_provider_desc_t *desc, boolean_t remove_prov) (void) kcf_prov_tab_rem_provider(desc->pd_prov_id); } -/* - * Dispatch events as needed for a provider. is_added flag tells - * whether the provider is registering or unregistering. - */ -void -kcf_do_notify(kcf_provider_desc_t *prov_desc, boolean_t is_added) -{ - int i; - crypto_notify_event_change_t ec; - - ASSERT(prov_desc->pd_state > KCF_PROV_ALLOCATED); - - /* - * Inform interested clients of the mechanisms becoming - * available/unavailable. - */ - ec.ec_change = is_added ? CRYPTO_MECH_ADDED : - CRYPTO_MECH_REMOVED; - for (i = 0; i < prov_desc->pd_mech_list_count; i++) { - (void) strlcpy(ec.ec_mech_name, - prov_desc->pd_mechanisms[i].cm_mech_name, - CRYPTO_MAX_MECH_NAME); - kcf_walk_ntfylist(CRYPTO_EVENT_MECHS_CHANGED, &ec); - } -} - static void delete_kstat(kcf_provider_desc_t *desc) {