KEYS: keyctl_get_keyring_ID() should create a session keyring if create flag set
[pandora-kernel.git] / security / keys / process_keys.c
index 3bc6071..1068cb1 100644 (file)
@@ -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();