hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/security/integrity/digsig_asymmetric.c
....@@ -1,16 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) 2013 Intel Corporation
34 *
45 * Author:
56 * Dmitry Kasatkin <dmitry.kasatkin@intel.com>
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License as published by
9
- * the Free Software Foundation, version 2 of the License.
10
- *
117 */
12
-
13
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
148
159 #include <linux/err.h>
1610 #include <linux/ratelimit.h>
....@@ -39,7 +33,7 @@
3933 key_ref_t kref;
4034
4135 kref = keyring_search(make_key_ref(key, 1),
42
- &key_type_asymmetric, name);
36
+ &key_type_asymmetric, name, true);
4337 if (!IS_ERR(kref)) {
4438 pr_err("Key '%s' is in ima_blacklist_keyring\n", name);
4539 return ERR_PTR(-EKEYREJECTED);
....@@ -51,7 +45,7 @@
5145 key_ref_t kref;
5246
5347 kref = keyring_search(make_key_ref(keyring, 1),
54
- &key_type_asymmetric, name);
48
+ &key_type_asymmetric, name, true);
5549 if (IS_ERR(kref))
5650 key = ERR_CAST(kref);
5751 else
....@@ -61,8 +55,14 @@
6155 }
6256
6357 if (IS_ERR(key)) {
64
- pr_err_ratelimited("Request for unknown key '%s' err %ld\n",
65
- name, PTR_ERR(key));
58
+ if (keyring)
59
+ pr_err_ratelimited("Request for unknown key '%s' in '%s' keyring. err %ld\n",
60
+ name, keyring->description,
61
+ PTR_ERR(key));
62
+ else
63
+ pr_err_ratelimited("Request for unknown key '%s' err %ld\n",
64
+ name, PTR_ERR(key));
65
+
6666 switch (PTR_ERR(key)) {
6767 /* Hide some search errors */
6868 case -EACCES:
....@@ -85,7 +85,7 @@
8585 struct public_key_signature pks;
8686 struct signature_v2_hdr *hdr = (struct signature_v2_hdr *)sig;
8787 struct key *key;
88
- int ret = -ENOMEM;
88
+ int ret;
8989
9090 if (siglen <= sizeof(*hdr))
9191 return -EBADMSG;
....@@ -104,8 +104,24 @@
104104
105105 memset(&pks, 0, sizeof(pks));
106106
107
- pks.pkey_algo = "rsa";
108107 pks.hash_algo = hash_algo_name[hdr->hash_algo];
108
+ switch (hdr->hash_algo) {
109
+ case HASH_ALGO_STREEBOG_256:
110
+ case HASH_ALGO_STREEBOG_512:
111
+ /* EC-RDSA and Streebog should go together. */
112
+ pks.pkey_algo = "ecrdsa";
113
+ pks.encoding = "raw";
114
+ break;
115
+ case HASH_ALGO_SM3_256:
116
+ /* SM2 and SM3 should go together. */
117
+ pks.pkey_algo = "sm2";
118
+ pks.encoding = "raw";
119
+ break;
120
+ default:
121
+ pks.pkey_algo = "rsa";
122
+ pks.encoding = "pkcs1";
123
+ break;
124
+ }
109125 pks.digest = (u8 *)data;
110126 pks.digest_size = datalen;
111127 pks.s = hdr->sig;