summaryrefslogtreecommitdiffstats
path: root/security/keys/persistent.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/keys/persistent.c')
-rw-r--r--security/keys/persistent.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/security/keys/persistent.c b/security/keys/persistent.c
index da9a0f42b795..97af230aa4b2 100644
--- a/security/keys/persistent.c
+++ b/security/keys/persistent.c
@@ -80,15 +80,17 @@ static long key_get_persistent(struct user_namespace *ns, kuid_t uid,
80 long ret; 80 long ret;
81 81
82 /* Look in the register if it exists */ 82 /* Look in the register if it exists */
83 memset(&index_key, 0, sizeof(index_key));
83 index_key.type = &key_type_keyring; 84 index_key.type = &key_type_keyring;
84 index_key.description = buf; 85 index_key.description = buf;
85 index_key.desc_len = sprintf(buf, "_persistent.%u", from_kuid(ns, uid)); 86 index_key.desc_len = sprintf(buf, "_persistent.%u", from_kuid(ns, uid));
87 key_set_index_key(&index_key);
86 88
87 if (ns->persistent_keyring_register) { 89 if (ns->persistent_keyring_register) {
88 reg_ref = make_key_ref(ns->persistent_keyring_register, true); 90 reg_ref = make_key_ref(ns->persistent_keyring_register, true);
89 down_read(&ns->persistent_keyring_register_sem); 91 down_read(&ns->keyring_sem);
90 persistent_ref = find_key_to_update(reg_ref, &index_key); 92 persistent_ref = find_key_to_update(reg_ref, &index_key);
91 up_read(&ns->persistent_keyring_register_sem); 93 up_read(&ns->keyring_sem);
92 94
93 if (persistent_ref) 95 if (persistent_ref)
94 goto found; 96 goto found;
@@ -97,9 +99,9 @@ static long key_get_persistent(struct user_namespace *ns, kuid_t uid,
97 /* It wasn't in the register, so we'll need to create it. We might 99 /* It wasn't in the register, so we'll need to create it. We might
98 * also need to create the register. 100 * also need to create the register.
99 */ 101 */
100 down_write(&ns->persistent_keyring_register_sem); 102 down_write(&ns->keyring_sem);
101 persistent_ref = key_create_persistent(ns, uid, &index_key); 103 persistent_ref = key_create_persistent(ns, uid, &index_key);
102 up_write(&ns->persistent_keyring_register_sem); 104 up_write(&ns->keyring_sem);
103 if (!IS_ERR(persistent_ref)) 105 if (!IS_ERR(persistent_ref))
104 goto found; 106 goto found;
105 107