hc
2024-05-10 10ebd8556b7990499c896a550e3d416b444211e6
kernel/security/keys/persistent.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /* General persistent per-UID keyrings register
23 *
34 * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved.
45 * Written by David Howells (dhowells@redhat.com)
5
- *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU General Public Licence
8
- * as published by the Free Software Foundation; either version
9
- * 2 of the Licence, or (at your option) any later version.
106 */
117
128 #include <linux/user_namespace.h>
....@@ -84,15 +80,17 @@
8480 long ret;
8581
8682 /* Look in the register if it exists */
83
+ memset(&index_key, 0, sizeof(index_key));
8784 index_key.type = &key_type_keyring;
8885 index_key.description = buf;
8986 index_key.desc_len = sprintf(buf, "_persistent.%u", from_kuid(ns, uid));
87
+ key_set_index_key(&index_key);
9088
9189 if (ns->persistent_keyring_register) {
9290 reg_ref = make_key_ref(ns->persistent_keyring_register, true);
93
- down_read(&ns->persistent_keyring_register_sem);
91
+ down_read(&ns->keyring_sem);
9492 persistent_ref = find_key_to_update(reg_ref, &index_key);
95
- up_read(&ns->persistent_keyring_register_sem);
93
+ up_read(&ns->keyring_sem);
9694
9795 if (persistent_ref)
9896 goto found;
....@@ -101,9 +99,9 @@
10199 /* It wasn't in the register, so we'll need to create it. We might
102100 * also need to create the register.
103101 */
104
- down_write(&ns->persistent_keyring_register_sem);
102
+ down_write(&ns->keyring_sem);
105103 persistent_ref = key_create_persistent(ns, uid, &index_key);
106
- up_write(&ns->persistent_keyring_register_sem);
104
+ up_write(&ns->keyring_sem);
107105 if (!IS_ERR(persistent_ref))
108106 goto found;
109107