From b0bd967ce759654724830cbfd588fd20418eef45 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 27 Dec 2024 16:19:37 +0000 Subject: [PATCH] Revert "crypto: api - Add crypto_clone_tfm" This reverts commit f688979e42508552e05c72e4f45b828eef01b2c3 which is commit 3c3a24cb0ae46c9c45e4ce2272f84f0504831f59 upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I1614e323a505f05d64b0a5171b35cdd30cf29a42 Signed-off-by: Greg Kroah-Hartman --- crypto/api.c | 59 ++++++++--------------------------------------- crypto/internal.h | 2 -- 2 files changed, 9 insertions(+), 52 deletions(-) diff --git a/crypto/api.c b/crypto/api.c index a6b17dd6e274..22089630f3dd 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -488,44 +488,28 @@ err: } EXPORT_SYMBOL_GPL(crypto_alloc_base); -static void *crypto_alloc_tfmmem(struct crypto_alg *alg, - const struct crypto_type *frontend, int node, - gfp_t gfp) +void *crypto_create_tfm_node(struct crypto_alg *alg, + const struct crypto_type *frontend, + int node) { - struct crypto_tfm *tfm; + char *mem; + struct crypto_tfm *tfm = NULL; unsigned int tfmsize; unsigned int total; - char *mem; + int err = -ENOMEM; tfmsize = frontend->tfmsize; total = tfmsize + sizeof(*tfm) + frontend->extsize(alg); - mem = kzalloc_node(total, gfp, node); + mem = kzalloc_node(total, GFP_KERNEL, node); if (mem == NULL) - return ERR_PTR(-ENOMEM); + goto out_err; tfm = (struct crypto_tfm *)(mem + tfmsize); tfm->__crt_alg = alg; tfm->node = node; refcount_set(&tfm->refcnt, 1); - return mem; -} - -void *crypto_create_tfm_node(struct crypto_alg *alg, - const struct crypto_type *frontend, - int node) -{ - struct crypto_tfm *tfm; - char *mem; - int err; - - mem = crypto_alloc_tfmmem(alg, frontend, node, GFP_KERNEL); - if (IS_ERR(mem)) - goto out; - - tfm = (struct crypto_tfm *)(mem + frontend->tfmsize); - err = frontend->init_tfm(tfm); if (err) goto out_free_tfm; @@ -541,38 +525,13 @@ out_free_tfm: if (err == -EAGAIN) crypto_shoot_alg(alg); kfree(mem); +out_err: mem = ERR_PTR(err); out: return mem; } EXPORT_SYMBOL_GPL(crypto_create_tfm_node); -void *crypto_clone_tfm(const struct crypto_type *frontend, - struct crypto_tfm *otfm) -{ - struct crypto_alg *alg = otfm->__crt_alg; - struct crypto_tfm *tfm; - char *mem; - - mem = ERR_PTR(-ESTALE); - if (unlikely(!crypto_mod_get(alg))) - goto out; - - mem = crypto_alloc_tfmmem(alg, frontend, otfm->node, GFP_ATOMIC); - if (IS_ERR(mem)) { - crypto_mod_put(alg); - goto out; - } - - tfm = (struct crypto_tfm *)(mem + frontend->tfmsize); - tfm->crt_flags = otfm->crt_flags; - tfm->exit = otfm->exit; - -out: - return mem; -} -EXPORT_SYMBOL_GPL(crypto_clone_tfm); - struct crypto_alg *crypto_find_alg(const char *alg_name, const struct crypto_type *frontend, u32 type, u32 mask) diff --git a/crypto/internal.h b/crypto/internal.h index de2502679117..cc1500c32e96 100644 --- a/crypto/internal.h +++ b/crypto/internal.h @@ -104,8 +104,6 @@ struct crypto_tfm *__crypto_alloc_tfm(struct crypto_alg *alg, u32 type, u32 mask); void *crypto_create_tfm_node(struct crypto_alg *alg, const struct crypto_type *frontend, int node); -void *crypto_clone_tfm(const struct crypto_type *frontend, - struct crypto_tfm *otfm); static inline void *crypto_create_tfm(struct crypto_alg *alg, const struct crypto_type *frontend)