FAILED: patch "[PATCH] crypto: do not free algorithm before using" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
e5bde04ccce64d808f8b00a489a1fe5825d285cbMon Sep 17 00:00:00 2001
From: Pan Bian <[email protected]>
Date: Thu, 22 Nov 2018 18:00:16 +0800
Subject: [PATCH] crypto: do not free algorithm before using
In multiple functions, the algorithm fields are read after its reference is dropped through crypto_mod_put. In this case, the algorithm memory may be freed, resulting in use-after-free bugs. This patch delays the put operation until the algorithm is never used.
crypto/cbc.c +4 -2
@@ -140,9 +140,8 @@ static int crypto_cbc_create(struct crypto_template *tmpl, struct rtattr **tb) spawn =skcipher_instance_ctx (inst); err =crypto_init_spawn (spawn, alg,skcipher_crypto_instance (inst),CRYPTO_ALG_TYPE_MASK ); -crypto_mod_put (alg);if (err) - goto err_free_inst; + goto err_put_alg; err =crypto_inst_setname (skcipher_crypto_instance (inst),"cbc" , alg);if (err)
@@ -174,12 +173,15 @@ static int crypto_cbc_create(struct crypto_template *tmpl, struct rtattr **tb) err =skcipher_register_instance (tmpl, inst);if (err) goto err_drop_spawn; +crypto_mod_put (alg); out:return err; err_drop_spawn:crypto_drop_spawn (spawn); +err_put_alg: +crypto_mod_put (alg); err_free_inst:kfree (inst); goto out;
crypto/cfb.c +4 -2
@@ -286,9 +286,8 @@ static int crypto_cfb_create(struct crypto_template *tmpl, struct rtattr **tb) spawn =skcipher_instance_ctx (inst); err =crypto_init_spawn (spawn, alg,skcipher_crypto_instance (inst),CRYPTO_ALG_TYPE_MASK ); -crypto_mod_put (alg);if (err) - goto err_free_inst; + goto err_put_alg; err =crypto_inst_setname (skcipher_crypto_instance (inst),"cfb" , alg);if (err)
@@ -317,12 +316,15 @@ static int crypto_cfb_create(struct crypto_template *tmpl, struct rtattr **tb) err =skcipher_register_instance (tmpl, inst);if (err) goto err_drop_spawn; +crypto_mod_put (alg); out:return err; err_drop_spawn:crypto_drop_spawn (spawn); +err_put_alg: +crypto_mod_put (alg); err_free_inst:kfree (inst); goto out;
crypto/pcbc.c +4 -2
@@ -244,9 +244,8 @@ static int crypto_pcbc_create(struct crypto_template *tmpl, struct rtattr **tb) spawn =skcipher_instance_ctx (inst); err =crypto_init_spawn (spawn, alg,skcipher_crypto_instance (inst),CRYPTO_ALG_TYPE_MASK ); -crypto_mod_put (alg);if (err) - goto err_free_inst; + goto err_put_alg; err =crypto_inst_setname (skcipher_crypto_instance (inst),"pcbc" , alg);if (err)
@@ -275,12 +274,15 @@ static int crypto_pcbc_create(struct crypto_template *tmpl, struct rtattr **tb) err =skcipher_register_instance (tmpl, inst);if (err) goto err_drop_spawn; +crypto_mod_put (alg); out:return err; err_drop_spawn:crypto_drop_spawn (spawn); +err_put_alg: +crypto_mod_put (alg); err_free_inst:kfree (inst); goto out;