hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I8J49D
--------------------------------
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; };