| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* General persistent per-UID keyrings register |
|---|
| 2 | 3 | * |
|---|
| 3 | 4 | * Copyright (C) 2013 Red Hat, Inc. All Rights Reserved. |
|---|
| 4 | 5 | * 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. |
|---|
| 10 | 6 | */ |
|---|
| 11 | 7 | |
|---|
| 12 | 8 | #include <linux/user_namespace.h> |
|---|
| .. | .. |
|---|
| 84 | 80 | long ret; |
|---|
| 85 | 81 | |
|---|
| 86 | 82 | /* Look in the register if it exists */ |
|---|
| 83 | + memset(&index_key, 0, sizeof(index_key)); |
|---|
| 87 | 84 | index_key.type = &key_type_keyring; |
|---|
| 88 | 85 | index_key.description = buf; |
|---|
| 89 | 86 | index_key.desc_len = sprintf(buf, "_persistent.%u", from_kuid(ns, uid)); |
|---|
| 87 | + key_set_index_key(&index_key); |
|---|
| 90 | 88 | |
|---|
| 91 | 89 | if (ns->persistent_keyring_register) { |
|---|
| 92 | 90 | reg_ref = make_key_ref(ns->persistent_keyring_register, true); |
|---|
| 93 | | - down_read(&ns->persistent_keyring_register_sem); |
|---|
| 91 | + down_read(&ns->keyring_sem); |
|---|
| 94 | 92 | persistent_ref = find_key_to_update(reg_ref, &index_key); |
|---|
| 95 | | - up_read(&ns->persistent_keyring_register_sem); |
|---|
| 93 | + up_read(&ns->keyring_sem); |
|---|
| 96 | 94 | |
|---|
| 97 | 95 | if (persistent_ref) |
|---|
| 98 | 96 | goto found; |
|---|
| .. | .. |
|---|
| 101 | 99 | /* It wasn't in the register, so we'll need to create it. We might |
|---|
| 102 | 100 | * also need to create the register. |
|---|
| 103 | 101 | */ |
|---|
| 104 | | - down_write(&ns->persistent_keyring_register_sem); |
|---|
| 102 | + down_write(&ns->keyring_sem); |
|---|
| 105 | 103 | persistent_ref = key_create_persistent(ns, uid, &index_key); |
|---|
| 106 | | - up_write(&ns->persistent_keyring_register_sem); |
|---|
| 104 | + up_write(&ns->keyring_sem); |
|---|
| 107 | 105 | if (!IS_ERR(persistent_ref)) |
|---|
| 108 | 106 | goto found; |
|---|
| 109 | 107 | |
|---|