
Offering: HULK hulk inclusion category: bugfix bugzilla: 189311 -------------------------------- Fix kabi breakage in commit dd82a543420c ("[Backport] crypto: api - Use work queue in crypto_destroy_instance") Signed-off-by: Yi Yang <yiyang13@huawei.com> --- crypto/algapi.c | 21 +++++++++++++++++---- include/crypto/algapi.h | 7 +++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/crypto/algapi.c b/crypto/algapi.c index 5d422e725b26..bb8f11aafa63 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c @@ -71,22 +71,35 @@ static void crypto_free_instance(struct crypto_instance *inst) static void crypto_destroy_instance_workfn(struct work_struct *w) { - struct crypto_instance *inst = container_of(w, struct crypto_instance, - free_work); + struct crypto_instance_freework *work = container_of(w, + struct crypto_instance_freework, free_work); + struct crypto_instance *inst = work->instance; struct crypto_template *tmpl = inst->tmpl; crypto_free_instance(inst); crypto_tmpl_put(tmpl); + + kfree(work); } static void crypto_destroy_instance(struct crypto_alg *alg) { + struct crypto_instance_freework *work; struct crypto_instance *inst = container_of(alg, struct crypto_instance, alg); + struct crypto_template *tmpl = inst->tmpl; + + work = kzalloc(sizeof(*work), GFP_ATOMIC); + if (!work) { + crypto_free_instance(inst); + crypto_tmpl_put(tmpl); + return; + } + work->instance = inst; - INIT_WORK(&inst->free_work, crypto_destroy_instance_workfn); - schedule_work(&inst->free_work); + INIT_WORK(&work->free_work, crypto_destroy_instance_workfn); + schedule_work(&work->free_work); } /* diff --git a/include/crypto/algapi.h b/include/crypto/algapi.h index 96dbd438cc70..4712ee620463 100644 --- a/include/crypto/algapi.h +++ b/include/crypto/algapi.h @@ -44,6 +44,11 @@ struct crypto_type { unsigned int tfmsize; }; +struct crypto_instance_freework { + struct crypto_instance *instance; + struct work_struct free_work; +}; + struct crypto_instance { struct crypto_alg alg; @@ -56,8 +61,6 @@ struct crypto_instance { struct crypto_spawn *spawns; }; - struct work_struct free_work; - void *__ctx[] CRYPTO_MINALIGN_ATTR; }; -- 2.25.1