This patch frees the payload at the end of the instantiate
method of both trusted and encrypted key types if an error occurs.

Signed-off-by: Roberto Sassu <roberto.sa...@polito.it>
---
 security/keys/encrypted_defined.c |    6 ++++++
 security/keys/trusted_defined.c   |    4 ++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/security/keys/encrypted_defined.c 
b/security/keys/encrypted_defined.c
index 54c0f0f..8426e66 100644
--- a/security/keys/encrypted_defined.c
+++ b/security/keys/encrypted_defined.c
@@ -624,7 +624,13 @@ static int encrypted_instantiate(struct key *key, const 
void *data,
        }
        ret = encrypted_init(epayload, master_desc, decrypted_datalen,
                             hex_encoded_iv, hex_encoded_data);
+       if (ret)
+               goto out_free_epayload;
+
        rcu_assign_pointer(key->payload.data, epayload);
+out_free_epayload:
+       if (ret)
+               kfree(epayload);
 out:
        kfree(datablob);
        return ret > 0 ? -EINVAL : ret;
diff --git a/security/keys/trusted_defined.c b/security/keys/trusted_defined.c
index aedad16..ab7c7f9 100644
--- a/security/keys/trusted_defined.c
+++ b/security/keys/trusted_defined.c
@@ -848,6 +848,10 @@ static int trusted_instantiate(struct key *key, const void 
*data,
 out:
        if (!ret)
                rcu_assign_pointer(key->payload.data, p);
+       else {
+               if (p)
+                       kfree(p);
+       }
        kfree(datablob);
        return ret;
 }
-- 
1.7.2.3

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to