diff options
Diffstat (limited to 'security/keys/persistent.c')
-rw-r--r-- | security/keys/persistent.c | 10 |
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 | ||