]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - security/keys/keyctl.c
Merge branch 'ufs-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[karo-tx-linux.git] / security / keys / keyctl.c
index 447a7d5cee0f56ebcb1847d9442f6407e259be98..ab0b337c84b4c02e4856719398edb94d1caf101a 100644 (file)
@@ -99,7 +99,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
        /* pull the payload in if one was supplied */
        payload = NULL;
 
-       if (_payload) {
+       if (plen) {
                ret = -ENOMEM;
                payload = kvmalloc(plen, GFP_KERNEL);
                if (!payload)
@@ -132,7 +132,10 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
 
        key_ref_put(keyring_ref);
  error3:
-       kvfree(payload);
+       if (payload) {
+               memzero_explicit(payload, plen);
+               kvfree(payload);
+       }
  error2:
        kfree(description);
  error:
@@ -324,7 +327,7 @@ long keyctl_update_key(key_serial_t id,
 
        /* pull the payload in if one was supplied */
        payload = NULL;
-       if (_payload) {
+       if (plen) {
                ret = -ENOMEM;
                payload = kmalloc(plen, GFP_KERNEL);
                if (!payload)
@@ -347,7 +350,7 @@ long keyctl_update_key(key_serial_t id,
 
        key_ref_put(key_ref);
 error2:
-       kfree(payload);
+       kzfree(payload);
 error:
        return ret;
 }
@@ -1093,7 +1096,10 @@ long keyctl_instantiate_key_common(key_serial_t id,
                keyctl_change_reqkey_auth(NULL);
 
 error2:
-       kvfree(payload);
+       if (payload) {
+               memzero_explicit(payload, plen);
+               kvfree(payload);
+       }
 error:
        return ret;
 }