Lines Matching +full:num +full:- +full:addresses

1 // SPDX-License-Identifier: GPL-2.0-or-later
17 #include <linux/key-type.h>
22 #include <keys/rxrpc-type.h>
23 #include <keys/user-type.h>
24 #include "ar-internal.h"
54 * description and an 8-byte decryption key as the payload
72 unsigned long num; in rxrpc_vet_description_s() local
75 num = simple_strtoul(desc, &p, 10); in rxrpc_vet_description_s()
76 if (*p != ':' || num > 65535) in rxrpc_vet_description_s()
77 return -EINVAL; in rxrpc_vet_description_s()
78 num = simple_strtoul(p + 1, &p, 10); in rxrpc_vet_description_s()
79 if (*p || num < 1 || num > 255) in rxrpc_vet_description_s()
80 return -EINVAL; in rxrpc_vet_description_s()
86 * - the caller guarantees we have at least 4 words
102 return -EKEYREJECTED; in rxrpc_preparse_xdr_rxkad()
106 return -EKEYREJECTED; in rxrpc_preparse_xdr_rxkad()
108 return -EKEYREJECTED; in rxrpc_preparse_xdr_rxkad()
110 plen = sizeof(*token) + sizeof(*token->kad) + tktlen; in rxrpc_preparse_xdr_rxkad()
111 prep->quotalen = datalen + plen; in rxrpc_preparse_xdr_rxkad()
113 plen -= sizeof(*token); in rxrpc_preparse_xdr_rxkad()
116 return -ENOMEM; in rxrpc_preparse_xdr_rxkad()
118 token->kad = kzalloc(plen, GFP_KERNEL); in rxrpc_preparse_xdr_rxkad()
119 if (!token->kad) { in rxrpc_preparse_xdr_rxkad()
121 return -ENOMEM; in rxrpc_preparse_xdr_rxkad()
124 token->security_index = RXRPC_SECURITY_RXKAD; in rxrpc_preparse_xdr_rxkad()
125 token->kad->ticket_len = tktlen; in rxrpc_preparse_xdr_rxkad()
126 token->kad->vice_id = ntohl(xdr[0]); in rxrpc_preparse_xdr_rxkad()
127 token->kad->kvno = ntohl(xdr[1]); in rxrpc_preparse_xdr_rxkad()
128 token->kad->start = ntohl(xdr[4]); in rxrpc_preparse_xdr_rxkad()
129 token->kad->expiry = ntohl(xdr[5]); in rxrpc_preparse_xdr_rxkad()
130 token->kad->primary_flag = ntohl(xdr[6]); in rxrpc_preparse_xdr_rxkad()
131 memcpy(&token->kad->session_key, &xdr[2], 8); in rxrpc_preparse_xdr_rxkad()
132 memcpy(&token->kad->ticket, &xdr[8], tktlen); in rxrpc_preparse_xdr_rxkad()
134 _debug("SCIX: %u", token->security_index); in rxrpc_preparse_xdr_rxkad()
135 _debug("TLEN: %u", token->kad->ticket_len); in rxrpc_preparse_xdr_rxkad()
136 _debug("EXPY: %x", token->kad->expiry); in rxrpc_preparse_xdr_rxkad()
137 _debug("KVNO: %u", token->kad->kvno); in rxrpc_preparse_xdr_rxkad()
138 _debug("PRIM: %u", token->kad->primary_flag); in rxrpc_preparse_xdr_rxkad()
140 token->kad->session_key[0], token->kad->session_key[1], in rxrpc_preparse_xdr_rxkad()
141 token->kad->session_key[2], token->kad->session_key[3], in rxrpc_preparse_xdr_rxkad()
142 token->kad->session_key[4], token->kad->session_key[5], in rxrpc_preparse_xdr_rxkad()
143 token->kad->session_key[6], token->kad->session_key[7]); in rxrpc_preparse_xdr_rxkad()
144 if (token->kad->ticket_len >= 8) in rxrpc_preparse_xdr_rxkad()
146 token->kad->ticket[0], token->kad->ticket[1], in rxrpc_preparse_xdr_rxkad()
147 token->kad->ticket[2], token->kad->ticket[3], in rxrpc_preparse_xdr_rxkad()
148 token->kad->ticket[4], token->kad->ticket[5], in rxrpc_preparse_xdr_rxkad()
149 token->kad->ticket[6], token->kad->ticket[7]); in rxrpc_preparse_xdr_rxkad()
152 prep->payload.data[1] = (void *)((unsigned long)prep->payload.data[1] + 1); in rxrpc_preparse_xdr_rxkad()
155 for (pptoken = (struct rxrpc_key_token **)&prep->payload.data[0]; in rxrpc_preparse_xdr_rxkad()
157 pptoken = &(*pptoken)->next) in rxrpc_preparse_xdr_rxkad()
160 expiry = rxrpc_u32_to_time64(token->kad->expiry); in rxrpc_preparse_xdr_rxkad()
161 if (expiry < prep->expiry) in rxrpc_preparse_xdr_rxkad()
162 prep->expiry = expiry; in rxrpc_preparse_xdr_rxkad()
172 if (princ->name_parts) { in rxrpc_free_krb5_principal()
173 for (loop = princ->n_name_parts - 1; loop >= 0; loop--) in rxrpc_free_krb5_principal()
174 kfree(princ->name_parts[loop]); in rxrpc_free_krb5_principal()
175 kfree(princ->name_parts); in rxrpc_free_krb5_principal()
177 kfree(princ->realm); in rxrpc_free_krb5_principal()
182 kfree(td->data); in rxrpc_free_krb5_tagged()
192 rxrpc_free_krb5_principal(&rxk5->client); in rxrpc_rxk5_free()
193 rxrpc_free_krb5_principal(&rxk5->server); in rxrpc_rxk5_free()
194 rxrpc_free_krb5_tagged(&rxk5->session); in rxrpc_rxk5_free()
196 if (rxk5->addresses) { in rxrpc_rxk5_free()
197 for (loop = rxk5->n_addresses - 1; loop >= 0; loop--) in rxrpc_rxk5_free()
198 rxrpc_free_krb5_tagged(&rxk5->addresses[loop]); in rxrpc_rxk5_free()
199 kfree(rxk5->addresses); in rxrpc_rxk5_free()
201 if (rxk5->authdata) { in rxrpc_rxk5_free()
202 for (loop = rxk5->n_authdata - 1; loop >= 0; loop--) in rxrpc_rxk5_free()
203 rxrpc_free_krb5_tagged(&rxk5->authdata[loop]); in rxrpc_rxk5_free()
204 kfree(rxk5->authdata); in rxrpc_rxk5_free()
207 kfree(rxk5->ticket); in rxrpc_rxk5_free()
208 kfree(rxk5->ticket2); in rxrpc_rxk5_free()
225 return -EINVAL; in rxrpc_krb5_decode_principal()
231 toklen -= 4; in rxrpc_krb5_decode_principal()
233 return -EINVAL; in rxrpc_krb5_decode_principal()
234 princ->n_name_parts = n_parts; in rxrpc_krb5_decode_principal()
237 return -EINVAL; in rxrpc_krb5_decode_principal()
239 princ->name_parts = kcalloc(n_parts, sizeof(char *), GFP_KERNEL); in rxrpc_krb5_decode_principal()
240 if (!princ->name_parts) in rxrpc_krb5_decode_principal()
241 return -ENOMEM; in rxrpc_krb5_decode_principal()
245 return -EINVAL; in rxrpc_krb5_decode_principal()
247 toklen -= 4; in rxrpc_krb5_decode_principal()
249 return -EINVAL; in rxrpc_krb5_decode_principal()
252 return -EINVAL; in rxrpc_krb5_decode_principal()
253 princ->name_parts[loop] = kmalloc(tmp + 1, GFP_KERNEL); in rxrpc_krb5_decode_principal()
254 if (!princ->name_parts[loop]) in rxrpc_krb5_decode_principal()
255 return -ENOMEM; in rxrpc_krb5_decode_principal()
256 memcpy(princ->name_parts[loop], xdr, tmp); in rxrpc_krb5_decode_principal()
257 princ->name_parts[loop][tmp] = 0; in rxrpc_krb5_decode_principal()
258 toklen -= paddedlen; in rxrpc_krb5_decode_principal()
263 return -EINVAL; in rxrpc_krb5_decode_principal()
265 toklen -= 4; in rxrpc_krb5_decode_principal()
267 return -EINVAL; in rxrpc_krb5_decode_principal()
270 return -EINVAL; in rxrpc_krb5_decode_principal()
271 princ->realm = kmalloc(tmp + 1, GFP_KERNEL); in rxrpc_krb5_decode_principal()
272 if (!princ->realm) in rxrpc_krb5_decode_principal()
273 return -ENOMEM; in rxrpc_krb5_decode_principal()
274 memcpy(princ->realm, xdr, tmp); in rxrpc_krb5_decode_principal()
275 princ->realm[tmp] = 0; in rxrpc_krb5_decode_principal()
276 toklen -= paddedlen; in rxrpc_krb5_decode_principal()
279 _debug("%s/...@%s", princ->name_parts[0], princ->realm); in rxrpc_krb5_decode_principal()
300 return -EINVAL; in rxrpc_krb5_decode_tagged_data()
305 td->tag = ntohl(*xdr++); in rxrpc_krb5_decode_tagged_data()
307 toklen -= 8; in rxrpc_krb5_decode_tagged_data()
309 return -EINVAL; in rxrpc_krb5_decode_tagged_data()
312 return -EINVAL; in rxrpc_krb5_decode_tagged_data()
313 td->data_len = len; in rxrpc_krb5_decode_tagged_data()
316 td->data = kmemdup(xdr, len, GFP_KERNEL); in rxrpc_krb5_decode_tagged_data()
317 if (!td->data) in rxrpc_krb5_decode_tagged_data()
318 return -ENOMEM; in rxrpc_krb5_decode_tagged_data()
319 toklen -= paddedlen; in rxrpc_krb5_decode_tagged_data()
323 _debug("tag %x len %x", td->tag, td->data_len); in rxrpc_krb5_decode_tagged_data()
348 return -EINVAL; in rxrpc_krb5_decode_tagged_array()
354 toklen -= 4; in rxrpc_krb5_decode_tagged_array()
356 return -EINVAL; in rxrpc_krb5_decode_tagged_array()
360 return -EINVAL; in rxrpc_krb5_decode_tagged_array()
367 return -ENOMEM; in rxrpc_krb5_decode_tagged_array()
396 return -EINVAL; in rxrpc_krb5_decode_ticket()
401 toklen -= 4; in rxrpc_krb5_decode_ticket()
403 return -EINVAL; in rxrpc_krb5_decode_ticket()
406 return -EINVAL; in rxrpc_krb5_decode_ticket()
414 return -ENOMEM; in rxrpc_krb5_decode_ticket()
415 toklen -= paddedlen; in rxrpc_krb5_decode_ticket()
427 * - the caller guarantees we have at least 4 words
443 /* reserve some payload space for this subkey - the length of the token in rxrpc_preparse_xdr_rxk5()
445 prep->quotalen = datalen + toklen; in rxrpc_preparse_xdr_rxk5()
449 return -ENOMEM; in rxrpc_preparse_xdr_rxk5()
454 return -ENOMEM; in rxrpc_preparse_xdr_rxk5()
457 token->security_index = RXRPC_SECURITY_RXK5; in rxrpc_preparse_xdr_rxk5()
458 token->k5 = rxk5; in rxrpc_preparse_xdr_rxk5()
461 ret = rxrpc_krb5_decode_principal(&rxk5->client, &xdr, &toklen); in rxrpc_preparse_xdr_rxk5()
464 ret = rxrpc_krb5_decode_principal(&rxk5->server, &xdr, &toklen); in rxrpc_preparse_xdr_rxk5()
468 /* extract the session key and the encoding type (the tag field -> in rxrpc_preparse_xdr_rxk5()
470 ret = rxrpc_krb5_decode_tagged_data(&rxk5->session, AFSTOKEN_DATA_MAX, in rxrpc_preparse_xdr_rxk5()
477 rxk5->authtime = be64_to_cpup((const __be64 *) xdr); in rxrpc_preparse_xdr_rxk5()
479 rxk5->starttime = be64_to_cpup((const __be64 *) xdr); in rxrpc_preparse_xdr_rxk5()
481 rxk5->endtime = be64_to_cpup((const __be64 *) xdr); in rxrpc_preparse_xdr_rxk5()
483 rxk5->renew_till = be64_to_cpup((const __be64 *) xdr); in rxrpc_preparse_xdr_rxk5()
485 rxk5->is_skey = ntohl(*xdr++); in rxrpc_preparse_xdr_rxk5()
486 rxk5->flags = ntohl(*xdr++); in rxrpc_preparse_xdr_rxk5()
487 toklen -= 4 * 8 + 2 * 4; in rxrpc_preparse_xdr_rxk5()
490 rxk5->authtime, rxk5->starttime, rxk5->endtime, in rxrpc_preparse_xdr_rxk5()
491 rxk5->renew_till); in rxrpc_preparse_xdr_rxk5()
492 _debug("is_skey=%x flags=%x", rxk5->is_skey, rxk5->flags); in rxrpc_preparse_xdr_rxk5()
494 /* extract the permitted client addresses */ in rxrpc_preparse_xdr_rxk5()
495 ret = rxrpc_krb5_decode_tagged_array(&rxk5->addresses, in rxrpc_preparse_xdr_rxk5()
496 &rxk5->n_addresses, in rxrpc_preparse_xdr_rxk5()
503 ASSERTCMP((end_xdr - xdr) << 2, ==, toklen); in rxrpc_preparse_xdr_rxk5()
506 ret = rxrpc_krb5_decode_ticket(&rxk5->ticket, &rxk5->ticket_len, in rxrpc_preparse_xdr_rxk5()
510 ret = rxrpc_krb5_decode_ticket(&rxk5->ticket2, &rxk5->ticket2_len, in rxrpc_preparse_xdr_rxk5()
515 ASSERTCMP((end_xdr - xdr) << 2, ==, toklen); in rxrpc_preparse_xdr_rxk5()
518 ret = rxrpc_krb5_decode_tagged_array(&rxk5->authdata, in rxrpc_preparse_xdr_rxk5()
519 &rxk5->n_authdata, in rxrpc_preparse_xdr_rxk5()
526 ASSERTCMP((end_xdr - xdr) << 2, ==, toklen); in rxrpc_preparse_xdr_rxk5()
532 for (pptoken = (struct rxrpc_key_token **)&prep->payload.data[0]; in rxrpc_preparse_xdr_rxk5()
534 pptoken = &(*pptoken)->next) in rxrpc_preparse_xdr_rxk5()
537 expiry = rxrpc_u32_to_time64(token->k5->endtime); in rxrpc_preparse_xdr_rxk5()
538 if (expiry < prep->expiry) in rxrpc_preparse_xdr_rxk5()
539 prep->expiry = expiry; in rxrpc_preparse_xdr_rxk5()
545 ret = -EINVAL; in rxrpc_preparse_xdr_rxk5()
555 * - the caller guarantees we have more than 7 words
559 const __be32 *xdr = prep->data, *token; in rxrpc_preparse_xdr()
562 size_t datalen = prep->datalen; in rxrpc_preparse_xdr()
567 prep->datalen); in rxrpc_preparse_xdr()
580 datalen -= 4; in rxrpc_preparse_xdr()
586 datalen -= 4; in rxrpc_preparse_xdr()
600 datalen -= paddedlen; in rxrpc_preparse_xdr()
607 datalen -= 4; in rxrpc_preparse_xdr()
620 datalen -= 4; in rxrpc_preparse_xdr()
625 datalen -= paddedlen; in rxrpc_preparse_xdr()
628 } while (--loop > 0); in rxrpc_preparse_xdr()
635 * - we ignore the cellname, relying on the key to be correctly named in rxrpc_preparse_xdr()
642 toklen -= 4; in rxrpc_preparse_xdr()
644 _debug("TOKEN type=%u [%p-%p]", sec_ix, xdr, token); in rxrpc_preparse_xdr()
660 ret = -EPROTONOSUPPORT; in rxrpc_preparse_xdr()
664 } while (--ntoken > 0); in rxrpc_preparse_xdr()
670 _leave(" = -EPROTO"); in rxrpc_preparse_xdr()
671 return -EPROTO; in rxrpc_preparse_xdr()
690 * if no data is provided, then a no-security key is made
701 _enter("%zu", prep->datalen); in rxrpc_preparse()
703 /* handle a no-security key */ in rxrpc_preparse()
704 if (!prep->data && prep->datalen == 0) in rxrpc_preparse()
708 if (prep->datalen > 7 * 4) { in rxrpc_preparse()
710 if (ret != -EPROTO) in rxrpc_preparse()
715 ret = -EINVAL; in rxrpc_preparse()
716 if (prep->datalen <= 4 || !prep->data) in rxrpc_preparse()
718 memcpy(&kver, prep->data, sizeof(kver)); in rxrpc_preparse()
719 prep->data += sizeof(kver); in rxrpc_preparse()
720 prep->datalen -= sizeof(kver); in rxrpc_preparse()
724 ret = -EKEYREJECTED; in rxrpc_preparse()
729 ret = -EINVAL; in rxrpc_preparse()
730 if (prep->datalen < sizeof(*v1)) in rxrpc_preparse()
733 v1 = prep->data; in rxrpc_preparse()
734 if (prep->datalen != sizeof(*v1) + v1->ticket_length) in rxrpc_preparse()
737 _debug("SCIX: %u", v1->security_index); in rxrpc_preparse()
738 _debug("TLEN: %u", v1->ticket_length); in rxrpc_preparse()
739 _debug("EXPY: %x", v1->expiry); in rxrpc_preparse()
740 _debug("KVNO: %u", v1->kvno); in rxrpc_preparse()
742 v1->session_key[0], v1->session_key[1], in rxrpc_preparse()
743 v1->session_key[2], v1->session_key[3], in rxrpc_preparse()
744 v1->session_key[4], v1->session_key[5], in rxrpc_preparse()
745 v1->session_key[6], v1->session_key[7]); in rxrpc_preparse()
746 if (v1->ticket_length >= 8) in rxrpc_preparse()
748 v1->ticket[0], v1->ticket[1], in rxrpc_preparse()
749 v1->ticket[2], v1->ticket[3], in rxrpc_preparse()
750 v1->ticket[4], v1->ticket[5], in rxrpc_preparse()
751 v1->ticket[6], v1->ticket[7]); in rxrpc_preparse()
753 ret = -EPROTONOSUPPORT; in rxrpc_preparse()
754 if (v1->security_index != RXRPC_SECURITY_RXKAD) in rxrpc_preparse()
757 plen = sizeof(*token->kad) + v1->ticket_length; in rxrpc_preparse()
758 prep->quotalen = plen + sizeof(*token); in rxrpc_preparse()
760 ret = -ENOMEM; in rxrpc_preparse()
764 token->kad = kzalloc(plen, GFP_KERNEL); in rxrpc_preparse()
765 if (!token->kad) in rxrpc_preparse()
768 token->security_index = RXRPC_SECURITY_RXKAD; in rxrpc_preparse()
769 token->kad->ticket_len = v1->ticket_length; in rxrpc_preparse()
770 token->kad->expiry = v1->expiry; in rxrpc_preparse()
771 token->kad->kvno = v1->kvno; in rxrpc_preparse()
772 memcpy(&token->kad->session_key, &v1->session_key, 8); in rxrpc_preparse()
773 memcpy(&token->kad->ticket, v1->ticket, v1->ticket_length); in rxrpc_preparse()
776 prep->payload.data[1] = (void *)((unsigned long)prep->payload.data[1] + 1); in rxrpc_preparse()
779 pp = (struct rxrpc_key_token **)&prep->payload.data[0]; in rxrpc_preparse()
781 pp = &(*pp)->next; in rxrpc_preparse()
783 expiry = rxrpc_u32_to_time64(token->kad->expiry); in rxrpc_preparse()
784 if (expiry < prep->expiry) in rxrpc_preparse()
785 prep->expiry = expiry; in rxrpc_preparse()
803 next = token->next; in rxrpc_free_token_list()
804 switch (token->security_index) { in rxrpc_free_token_list()
806 kfree(token->kad); in rxrpc_free_token_list()
809 if (token->k5) in rxrpc_free_token_list()
810 rxrpc_rxk5_free(token->k5); in rxrpc_free_token_list()
814 token->security_index); in rxrpc_free_token_list()
827 rxrpc_free_token_list(prep->payload.data[0]); in rxrpc_free_preparse()
833 * The data should be the 8-byte secret key.
839 _enter("%zu", prep->datalen); in rxrpc_preparse_s()
841 if (prep->datalen != 8) in rxrpc_preparse_s()
842 return -EINVAL; in rxrpc_preparse_s()
844 memcpy(&prep->payload.data[2], prep->data, 8); in rxrpc_preparse_s()
852 if (crypto_skcipher_setkey(ci, prep->data, 8) < 0) in rxrpc_preparse_s()
855 prep->payload.data[0] = ci; in rxrpc_preparse_s()
865 if (prep->payload.data[0]) in rxrpc_free_preparse_s()
866 crypto_free_skcipher(prep->payload.data[0]); in rxrpc_free_preparse_s()
874 rxrpc_free_token_list(key->payload.data[0]); in rxrpc_destroy()
882 if (key->payload.data[0]) { in rxrpc_destroy_s()
883 crypto_free_skcipher(key->payload.data[0]); in rxrpc_destroy_s()
884 key->payload.data[0] = NULL; in rxrpc_destroy_s()
893 seq_puts(m, key->description); in rxrpc_describe()
906 if (optlen <= 0 || optlen > PAGE_SIZE - 1 || rx->securities) in rxrpc_request_key()
907 return -EINVAL; in rxrpc_request_key()
913 key = request_key_net(&key_type_rxrpc, description, sock_net(&rx->sk), NULL); in rxrpc_request_key()
920 rx->key = key; in rxrpc_request_key()
922 _leave(" = 0 [key %x]", key->serial); in rxrpc_request_key()
936 if (optlen <= 0 || optlen > PAGE_SIZE - 1) in rxrpc_server_keyring()
937 return -EINVAL; in rxrpc_server_keyring()
950 rx->securities = key; in rxrpc_server_keyring()
952 _leave(" = 0 [key %x]", key->serial); in rxrpc_server_keyring()
979 _leave(" = -ENOMEM [alloc %ld]", PTR_ERR(key)); in rxrpc_get_server_data_key()
980 return -ENOMEM; in rxrpc_get_server_data_key()
997 conn->params.key = key; in rxrpc_get_server_data_key()
1004 _leave(" = -ENOMEM [ins %d]", ret); in rxrpc_get_server_data_key()
1005 return -ENOMEM; in rxrpc_get_server_data_key()
1010 * rxrpc_get_null_key - Generate a null RxRPC key
1041 * - this returns the result in XDR form
1056 /* we don't know what form we should return non-AFS keys in */ in rxrpc_read()
1057 if (memcmp(key->description, "afs@", 4) != 0) in rxrpc_read()
1058 return -EOPNOTSUPP; in rxrpc_read()
1059 cnlen = strlen(key->description + 4); in rxrpc_read()
1070 for (token = key->payload.data[0]; token; token = token->next) { in rxrpc_read()
1073 switch (token->security_index) { in rxrpc_read()
1077 toksize += RND(token->kad->ticket_len); in rxrpc_read()
1081 princ = &token->k5->client; in rxrpc_read()
1082 toksize += 4 + princ->n_name_parts * 4; in rxrpc_read()
1083 for (loop = 0; loop < princ->n_name_parts; loop++) in rxrpc_read()
1084 toksize += RND(strlen(princ->name_parts[loop])); in rxrpc_read()
1085 toksize += 4 + RND(strlen(princ->realm)); in rxrpc_read()
1087 princ = &token->k5->server; in rxrpc_read()
1088 toksize += 4 + princ->n_name_parts * 4; in rxrpc_read()
1089 for (loop = 0; loop < princ->n_name_parts; loop++) in rxrpc_read()
1090 toksize += RND(strlen(princ->name_parts[loop])); in rxrpc_read()
1091 toksize += 4 + RND(strlen(princ->realm)); in rxrpc_read()
1093 toksize += 8 + RND(token->k5->session.data_len); in rxrpc_read()
1097 toksize += 4 + token->k5->n_addresses * 8; in rxrpc_read()
1098 for (loop = 0; loop < token->k5->n_addresses; loop++) in rxrpc_read()
1099 toksize += RND(token->k5->addresses[loop].data_len); in rxrpc_read()
1101 toksize += 4 + RND(token->k5->ticket_len); in rxrpc_read()
1102 toksize += 4 + RND(token->k5->ticket2_len); in rxrpc_read()
1104 toksize += 4 + token->k5->n_authdata * 8; in rxrpc_read()
1105 for (loop = 0; loop < token->k5->n_authdata; loop++) in rxrpc_read()
1106 toksize += RND(token->k5->authdata[loop].data_len); in rxrpc_read()
1111 token->security_index); in rxrpc_read()
1139 memcpy((u8 *)xdr + _l, &zero, 4 - (_l & 3)); \ in rxrpc_read()
1147 memcpy((u8 *)xdr + _l, &zero, 4 - (_l & 3)); \ in rxrpc_read()
1163 ENCODE_DATA(cnlen, key->description + 4); /* cellname */ in rxrpc_read()
1167 for (token = key->payload.data[0]; token; token = token->next) { in rxrpc_read()
1171 ENCODE(token->security_index); in rxrpc_read()
1173 switch (token->security_index) { in rxrpc_read()
1175 ENCODE(token->kad->vice_id); in rxrpc_read()
1176 ENCODE(token->kad->kvno); in rxrpc_read()
1177 ENCODE_BYTES(8, token->kad->session_key); in rxrpc_read()
1178 ENCODE(token->kad->start); in rxrpc_read()
1179 ENCODE(token->kad->expiry); in rxrpc_read()
1180 ENCODE(token->kad->primary_flag); in rxrpc_read()
1181 ENCODE_DATA(token->kad->ticket_len, token->kad->ticket); in rxrpc_read()
1185 princ = &token->k5->client; in rxrpc_read()
1186 ENCODE(princ->n_name_parts); in rxrpc_read()
1187 for (loop = 0; loop < princ->n_name_parts; loop++) in rxrpc_read()
1188 ENCODE_STR(princ->name_parts[loop]); in rxrpc_read()
1189 ENCODE_STR(princ->realm); in rxrpc_read()
1191 princ = &token->k5->server; in rxrpc_read()
1192 ENCODE(princ->n_name_parts); in rxrpc_read()
1193 for (loop = 0; loop < princ->n_name_parts; loop++) in rxrpc_read()
1194 ENCODE_STR(princ->name_parts[loop]); in rxrpc_read()
1195 ENCODE_STR(princ->realm); in rxrpc_read()
1197 ENCODE(token->k5->session.tag); in rxrpc_read()
1198 ENCODE_DATA(token->k5->session.data_len, in rxrpc_read()
1199 token->k5->session.data); in rxrpc_read()
1201 ENCODE64(token->k5->authtime); in rxrpc_read()
1202 ENCODE64(token->k5->starttime); in rxrpc_read()
1203 ENCODE64(token->k5->endtime); in rxrpc_read()
1204 ENCODE64(token->k5->renew_till); in rxrpc_read()
1205 ENCODE(token->k5->is_skey); in rxrpc_read()
1206 ENCODE(token->k5->flags); in rxrpc_read()
1208 ENCODE(token->k5->n_addresses); in rxrpc_read()
1209 for (loop = 0; loop < token->k5->n_addresses; loop++) { in rxrpc_read()
1210 ENCODE(token->k5->addresses[loop].tag); in rxrpc_read()
1211 ENCODE_DATA(token->k5->addresses[loop].data_len, in rxrpc_read()
1212 token->k5->addresses[loop].data); in rxrpc_read()
1215 ENCODE_DATA(token->k5->ticket_len, token->k5->ticket); in rxrpc_read()
1216 ENCODE_DATA(token->k5->ticket2_len, token->k5->ticket2); in rxrpc_read()
1218 ENCODE(token->k5->n_authdata); in rxrpc_read()
1219 for (loop = 0; loop < token->k5->n_authdata; loop++) { in rxrpc_read()
1220 ENCODE(token->k5->authdata[loop].tag); in rxrpc_read()
1221 ENCODE_DATA(token->k5->authdata[loop].data_len, in rxrpc_read()
1222 token->k5->authdata[loop].data); in rxrpc_read()
1230 ASSERTCMP((unsigned long)xdr - (unsigned long)oldxdr, ==, in rxrpc_read()
1240 ASSERTCMP((char __user *) xdr - buffer, ==, size); in rxrpc_read()