* [dhowells-fs:afs-testing 25/35] net/rxrpc/rxgk_kdf.c:222: undefined reference to `crypto_krb5_find_enctype'
@ 2025-02-12 16:32 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-02-12 16:32 UTC (permalink / raw)
To: David Howells; +Cc: llvm, oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git afs-testing
head: 1df5ee14458290f1dc72aeba8770ba56a94e5c15
commit: 8b667ac5d90083111d3579d5b53e4d6a0cc0a7af [25/35] rxrpc: rxgk: Provide infrastructure and key derivation
config: um-randconfig-001-20250212 (https://download.01.org/0day-ci/archive/20250213/202502130005.Gejidzvc-lkp@intel.com/config)
compiler: clang version 16.0.6 (https://github.com/llvm/llvm-project 7cbf1a2591520c2491aa35339f227775f4d3adf6)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250213/202502130005.Gejidzvc-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502130005.Gejidzvc-lkp@intel.com/
All errors (new ones prefixed by >>):
/usr/bin/ld: warning: .tmp_vmlinux1 has a LOAD segment with RWX permissions
/usr/bin/ld: net/rxrpc/rxgk_kdf.o: in function `rxgk_generate_transport_key':
>> net/rxrpc/rxgk_kdf.c:222: undefined reference to `crypto_krb5_find_enctype'
>> /usr/bin/ld: net/rxrpc/rxgk_kdf.c:86: undefined reference to `crypto_krb5_calc_PRFplus'
>> /usr/bin/ld: net/rxrpc/rxgk_kdf.c:119: undefined reference to `crypto_krb5_prepare_encryption'
>> /usr/bin/ld: net/rxrpc/rxgk_kdf.c:162: undefined reference to `crypto_krb5_prepare_checksum'
/usr/bin/ld: net/rxrpc/rxgk_kdf.c:135: undefined reference to `crypto_krb5_prepare_checksum'
>> /usr/bin/ld: net/rxrpc/rxgk_kdf.c:(.text+0x81b): undefined reference to `crypto_krb5_prepare_checksum'
/usr/bin/ld: net/rxrpc/rxgk_kdf.o: in function `rxgk_set_up_token_cipher':
net/rxrpc/rxgk_kdf.c:276: undefined reference to `crypto_krb5_find_enctype'
/usr/bin/ld: net/rxrpc/rxgk_kdf.c:280: undefined reference to `crypto_krb5_prepare_encryption'
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
vim +222 net/rxrpc/rxgk_kdf.c
48
49 /*
50 * Transport key derivation function.
51 *
52 * TK = random-to-key(PRF+(K0, L,
53 * epoch || cid || start_time || key_number))
54 * [tools.ietf.org/html/draft-wilkinson-afs3-rxgk-11 sec 8.3]
55 */
56 static int rxgk_derive_transport_key(struct rxrpc_connection *conn,
57 struct rxgk_context *gk,
58 const struct rxgk_key *rxgk,
59 struct krb5_buffer *TK,
60 gfp_t gfp)
61 {
62 const struct krb5_enctype *krb5 = gk->krb5;
63 struct krb5_buffer conn_info;
64 unsigned int L = krb5->key_bytes;
65 __be32 *info;
66 u8 *buffer;
67 int ret;
68
69 _enter("");
70
71 conn_info.len = sizeof(__be32) * 5;
72
73 buffer = kzalloc(round16(conn_info.len), gfp);
74 if (!buffer)
75 return -ENOMEM;
76
77 conn_info.data = buffer;
78
79 info = (__be32 *)conn_info.data;
80 info[0] = htonl(conn->proto.epoch);
81 info[1] = htonl(conn->proto.cid);
82 info[2] = htonl(conn->rxgk.start_time >> 32);
83 info[3] = htonl(conn->rxgk.start_time >> 0);
84 info[4] = htonl(gk->key_number);
85
> 86 ret = crypto_krb5_calc_PRFplus(krb5, &rxgk->key, L, &conn_info, TK, gfp);
87 kfree_sensitive(buffer);
88 _leave(" = %d", ret);
89 return ret;
90 }
91
92 /*
93 * Set up the ciphers for the usage keys.
94 */
95 static int rxgk_set_up_ciphers(struct rxrpc_connection *conn,
96 struct rxgk_context *gk,
97 const struct rxgk_key *rxgk,
98 gfp_t gfp)
99 {
100 const struct krb5_enctype *krb5 = gk->krb5;
101 struct crypto_shash *shash;
102 struct crypto_aead *aead;
103 struct krb5_buffer TK;
104 bool service = rxrpc_conn_is_service(conn);
105 int ret;
106 u8 *buffer;
107
108 buffer = kzalloc(krb5->key_bytes, gfp);
109 if (!buffer)
110 return -ENOMEM;
111
112 TK.len = krb5->key_bytes;
113 TK.data = buffer;
114
115 ret = rxgk_derive_transport_key(conn, gk, rxgk, &TK, gfp);
116 if (ret < 0)
117 goto out;
118
> 119 aead = crypto_krb5_prepare_encryption(krb5, &TK, RXGK_CLIENT_ENC_RESPONSE, gfp);
120 if (IS_ERR(aead))
121 goto aead_error;
122 gk->resp_enc = aead;
123
124 if (crypto_aead_blocksize(gk->resp_enc) != krb5->block_len ||
125 crypto_aead_authsize(gk->resp_enc) != krb5->cksum_len) {
126 pr_notice("algo inconsistent with krb5 table %u!=%u or %u!=%u\n",
127 crypto_aead_blocksize(gk->resp_enc), krb5->block_len,
128 crypto_aead_authsize(gk->resp_enc), krb5->cksum_len);
129 return -EINVAL;
130 }
131
132 if (service) {
133 switch (conn->security_level) {
134 case RXRPC_SECURITY_AUTH:
135 shash = crypto_krb5_prepare_checksum(
136 krb5, &TK, RXGK_SERVER_MIC_PACKET, gfp);
137 if (IS_ERR(shash))
138 goto hash_error;
139 gk->tx_Kc = shash;
140 shash = crypto_krb5_prepare_checksum(
141 krb5, &TK, RXGK_CLIENT_MIC_PACKET, gfp);
142 if (IS_ERR(shash))
143 goto hash_error;
144 gk->rx_Kc = shash;
145 break;
146 case RXRPC_SECURITY_ENCRYPT:
147 aead = crypto_krb5_prepare_encryption(
148 krb5, &TK, RXGK_SERVER_ENC_PACKET, gfp);
149 if (IS_ERR(aead))
150 goto aead_error;
151 gk->tx_enc = aead;
152 aead = crypto_krb5_prepare_encryption(
153 krb5, &TK, RXGK_CLIENT_ENC_PACKET, gfp);
154 if (IS_ERR(aead))
155 goto aead_error;
156 gk->rx_enc = aead;
157 break;
158 }
159 } else {
160 switch (conn->security_level) {
161 case RXRPC_SECURITY_AUTH:
> 162 shash = crypto_krb5_prepare_checksum(
163 krb5, &TK, RXGK_CLIENT_MIC_PACKET, gfp);
164 if (IS_ERR(shash))
165 goto hash_error;
166 gk->tx_Kc = shash;
167 shash = crypto_krb5_prepare_checksum(
168 krb5, &TK, RXGK_SERVER_MIC_PACKET, gfp);
169 if (IS_ERR(shash))
170 goto hash_error;
171 gk->rx_Kc = shash;
172 break;
173 case RXRPC_SECURITY_ENCRYPT:
174 aead = crypto_krb5_prepare_encryption(
175 krb5, &TK, RXGK_CLIENT_ENC_PACKET, gfp);
176 if (IS_ERR(aead))
177 goto aead_error;
178 gk->tx_enc = aead;
179 aead = crypto_krb5_prepare_encryption(
180 krb5, &TK, RXGK_SERVER_ENC_PACKET, gfp);
181 if (IS_ERR(aead))
182 goto aead_error;
183 gk->rx_enc = aead;
184 break;
185 }
186 }
187
188 ret = 0;
189 out:
190 kfree_sensitive(buffer);
191 return ret;
192 aead_error:
193 ret = PTR_ERR(aead);
194 goto out;
195 hash_error:
196 ret = PTR_ERR(shash);
197 goto out;
198 }
199
200 /*
201 * Derive a transport key for a connection and then derive a bunch of usage
202 * keys from it and set up ciphers using them.
203 */
204 struct rxgk_context *rxgk_generate_transport_key(struct rxrpc_connection *conn,
205 const struct rxgk_key *key,
206 unsigned int key_number,
207 gfp_t gfp)
208 {
209 struct rxgk_context *gk;
210 unsigned long lifetime;
211 int ret = -ENOPKG;
212
213 _enter("");
214
215 gk = kzalloc(sizeof(*gk), GFP_KERNEL);
216 if (!gk)
217 return ERR_PTR(-ENOMEM);
218 refcount_set(&gk->usage, 1);
219 gk->key = key;
220 gk->key_number = key_number;
221
> 222 gk->krb5 = crypto_krb5_find_enctype(key->enctype);
223 if (!gk->krb5)
224 goto err_tk;
225
226 ret = rxgk_set_up_ciphers(conn, gk, key, gfp);
227 if (ret)
228 goto err_tk;
229
230 /* Set the remaining number of bytes encrypted with this key that may
231 * be transmitted before rekeying. Note that the spec has been
232 * interpreted differently on this point...
233 */
234 switch (key->bytelife) {
235 case 0:
236 case 63:
237 gk->bytes_remaining = LLONG_MAX;
238 break;
239 case 1 ... 62:
240 gk->bytes_remaining = 1LL << key->bytelife;
241 break;
242 default:
243 gk->bytes_remaining = key->bytelife;
244 break;
245 }
246
247 /* Set the time after which rekeying must occur */
248 if (key->lifetime) {
249 lifetime = min_t(u64, key->lifetime, INT_MAX / HZ);
250 lifetime *= HZ;
251 } else {
252 lifetime = MAX_JIFFY_OFFSET;
253 }
254 gk->expiry = jiffies + lifetime;
255 return gk;
256
257 err_tk:
258 rxgk_put(gk);
259 _leave(" = %d", ret);
260 return ERR_PTR(ret);
261 }
262
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-02-12 16:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-12 16:32 [dhowells-fs:afs-testing 25/35] net/rxrpc/rxgk_kdf.c:222: undefined reference to `crypto_krb5_find_enctype' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.