aboutsummaryrefslogtreecommitdiffstats
path: root/security/keys/process_keys.c
diff options
context:
space:
mode:
authorWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 23:15:19 +0200
committerWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2015-10-23 23:15:19 +0200
commit272e77de798362c31e6452a46a0e7d5b6aaeb550 (patch)
tree52c767d8f7a1ffd3df0a910478450da5d9d47cf4 /security/keys/process_keys.c
parent7134863d0877e48d58344a51024a410fe1093a34 (diff)
downloadkernel_samsung_smdk4412-272e77de798362c31e6452a46a0e7d5b6aaeb550.zip
kernel_samsung_smdk4412-272e77de798362c31e6452a46a0e7d5b6aaeb550.tar.gz
kernel_samsung_smdk4412-272e77de798362c31e6452a46a0e7d5b6aaeb550.tar.bz2
first round of updates to the security code
Diffstat (limited to 'security/keys/process_keys.c')
-rw-r--r--security/keys/process_keys.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
index 44a5100..60d0df7 100644
--- a/security/keys/process_keys.c
+++ b/security/keys/process_keys.c
@@ -270,7 +270,7 @@ static int install_session_keyring(struct key *keyring)
if (!new)
return -ENOMEM;
- ret = install_session_keyring_to_cred(new, NULL);
+ ret = install_session_keyring_to_cred(new, keyring);
if (ret < 0) {
abort_creds(new);
return ret;
@@ -589,12 +589,22 @@ try_again:
ret = install_user_keyrings();
if (ret < 0)
goto error;
- ret = install_session_keyring(
- cred->user->session_keyring);
+ if (lflags & KEY_LOOKUP_CREATE)
+ ret = join_session_keyring(NULL);
+ else
+ ret = install_session_keyring(
+ cred->user->session_keyring);
if (ret < 0)
goto error;
goto reget_creds;
+ } else if (cred->tgcred->session_keyring ==
+ cred->user->session_keyring &&
+ lflags & KEY_LOOKUP_CREATE) {
+ ret = join_session_keyring(NULL);
+ if (ret < 0)
+ goto error;
+ goto reget_creds;
}
rcu_read_lock();