1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#include <crypto/hash.h>
27#include <crypto/skcipher.h>
28#include <linux/fs.h>
29#include <linux/mount.h>
30#include <linux/pagemap.h>
31#include <linux/random.h>
32#include <linux/compiler.h>
33#include <linux/key.h>
34#include <linux/namei.h>
35#include <linux/file.h>
36#include <linux/scatterlist.h>
37#include <linux/slab.h>
38#include <asm/unaligned.h>
39#include <linux/kernel.h>
40#include "ecryptfs_kernel.h"
41
42#define DECRYPT 0
43#define ENCRYPT 1
44
45
46
47
48
49
50
51
52void ecryptfs_from_hex(char *dst, char *src, int dst_size)
53{
54 int x;
55 char tmp[3] = { 0, };
56
57 for (x = 0; x < dst_size; x++) {
58 tmp[0] = src[x * 2];
59 tmp[1] = src[x * 2 + 1];
60 dst[x] = (unsigned char)simple_strtol(tmp, NULL, 16);
61 }
62}
63
64static int ecryptfs_hash_digest(struct crypto_shash *tfm,
65 char *src, int len, char *dst)
66{
67 SHASH_DESC_ON_STACK(desc, tfm);
68 int err;
69
70 desc->tfm = tfm;
71 desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
72 err = crypto_shash_digest(desc, src, len, dst);
73 shash_desc_zero(desc);
74 return err;
75}
76
77
78
79
80
81
82
83
84
85
86
87static int ecryptfs_calculate_md5(char *dst,
88 struct ecryptfs_crypt_stat *crypt_stat,
89 char *src, int len)
90{
91 struct crypto_shash *tfm;
92 int rc = 0;
93
94 tfm = crypt_stat->hash_tfm;
95 rc = ecryptfs_hash_digest(tfm, src, len, dst);
96 if (rc) {
97 printk(KERN_ERR
98 "%s: Error computing crypto hash; rc = [%d]\n",
99 __func__, rc);
100 goto out;
101 }
102out:
103 return rc;
104}
105
106static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name,
107 char *cipher_name,
108 char *chaining_modifier)
109{
110 int cipher_name_len = strlen(cipher_name);
111 int chaining_modifier_len = strlen(chaining_modifier);
112 int algified_name_len;
113 int rc;
114
115 algified_name_len = (chaining_modifier_len + cipher_name_len + 3);
116 (*algified_name) = kmalloc(algified_name_len, GFP_KERNEL);
117 if (!(*algified_name)) {
118 rc = -ENOMEM;
119 goto out;
120 }
121 snprintf((*algified_name), algified_name_len, "%s(%s)",
122 chaining_modifier, cipher_name);
123 rc = 0;
124out:
125 return rc;
126}
127
128
129
130
131
132
133
134
135
136
137
138
139int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
140 loff_t offset)
141{
142 int rc = 0;
143 char dst[MD5_DIGEST_SIZE];
144 char src[ECRYPTFS_MAX_IV_BYTES + 16];
145
146 if (unlikely(ecryptfs_verbosity > 0)) {
147 ecryptfs_printk(KERN_DEBUG, "root iv:\n");
148 ecryptfs_dump_hex(crypt_stat->root_iv, crypt_stat->iv_bytes);
149 }
150
151
152
153
154 memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes);
155 memset((src + crypt_stat->iv_bytes), 0, 16);
156 snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
157 if (unlikely(ecryptfs_verbosity > 0)) {
158 ecryptfs_printk(KERN_DEBUG, "source:\n");
159 ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));
160 }
161 rc = ecryptfs_calculate_md5(dst, crypt_stat, src,
162 (crypt_stat->iv_bytes + 16));
163 if (rc) {
164 ecryptfs_printk(KERN_WARNING, "Error attempting to compute "
165 "MD5 while generating IV for a page\n");
166 goto out;
167 }
168 memcpy(iv, dst, crypt_stat->iv_bytes);
169 if (unlikely(ecryptfs_verbosity > 0)) {
170 ecryptfs_printk(KERN_DEBUG, "derived iv:\n");
171 ecryptfs_dump_hex(iv, crypt_stat->iv_bytes);
172 }
173out:
174 return rc;
175}
176
177
178
179
180
181
182
183int ecryptfs_init_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
184{
185 struct crypto_shash *tfm;
186 int rc;
187
188 tfm = crypto_alloc_shash(ECRYPTFS_DEFAULT_HASH, 0, 0);
189 if (IS_ERR(tfm)) {
190 rc = PTR_ERR(tfm);
191 ecryptfs_printk(KERN_ERR, "Error attempting to "
192 "allocate crypto context; rc = [%d]\n",
193 rc);
194 return rc;
195 }
196
197 memset((void *)crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
198 INIT_LIST_HEAD(&crypt_stat->keysig_list);
199 mutex_init(&crypt_stat->keysig_list_mutex);
200 mutex_init(&crypt_stat->cs_mutex);
201 mutex_init(&crypt_stat->cs_tfm_mutex);
202 crypt_stat->hash_tfm = tfm;
203 crypt_stat->flags |= ECRYPTFS_STRUCT_INITIALIZED;
204
205 return 0;
206}
207
208
209
210
211
212
213
214void ecryptfs_destroy_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
215{
216 struct ecryptfs_key_sig *key_sig, *key_sig_tmp;
217
218 crypto_free_skcipher(crypt_stat->tfm);
219 crypto_free_shash(crypt_stat->hash_tfm);
220 list_for_each_entry_safe(key_sig, key_sig_tmp,
221 &crypt_stat->keysig_list, crypt_stat_list) {
222 list_del(&key_sig->crypt_stat_list);
223 kmem_cache_free(ecryptfs_key_sig_cache, key_sig);
224 }
225 memset(crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
226}
227
228void ecryptfs_destroy_mount_crypt_stat(
229 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
230{
231 struct ecryptfs_global_auth_tok *auth_tok, *auth_tok_tmp;
232
233 if (!(mount_crypt_stat->flags & ECRYPTFS_MOUNT_CRYPT_STAT_INITIALIZED))
234 return;
235 mutex_lock(&mount_crypt_stat->global_auth_tok_list_mutex);
236 list_for_each_entry_safe(auth_tok, auth_tok_tmp,
237 &mount_crypt_stat->global_auth_tok_list,
238 mount_crypt_stat_list) {
239 list_del(&auth_tok->mount_crypt_stat_list);
240 if (!(auth_tok->flags & ECRYPTFS_AUTH_TOK_INVALID))
241 key_put(auth_tok->global_auth_tok_key);
242 kmem_cache_free(ecryptfs_global_auth_tok_cache, auth_tok);
243 }
244 mutex_unlock(&mount_crypt_stat->global_auth_tok_list_mutex);
245 memset(mount_crypt_stat, 0, sizeof(struct ecryptfs_mount_crypt_stat));
246}
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261int virt_to_scatterlist(const void *addr, int size, struct scatterlist *sg,
262 int sg_size)
263{
264 int i = 0;
265 struct page *pg;
266 int offset;
267 int remainder_of_page;
268
269 sg_init_table(sg, sg_size);
270
271 while (size > 0 && i < sg_size) {
272 pg = virt_to_page(addr);
273 offset = offset_in_page(addr);
274 sg_set_page(&sg[i], pg, 0, offset);
275 remainder_of_page = PAGE_SIZE - offset;
276 if (size >= remainder_of_page) {
277 sg[i].length = remainder_of_page;
278 addr += remainder_of_page;
279 size -= remainder_of_page;
280 } else {
281 sg[i].length = size;
282 addr += size;
283 size = 0;
284 }
285 i++;
286 }
287 if (size > 0)
288 return -ENOMEM;
289 return i;
290}
291
292struct extent_crypt_result {
293 struct completion completion;
294 int rc;
295};
296
297static void extent_crypt_complete(struct crypto_async_request *req, int rc)
298{
299 struct extent_crypt_result *ecr = req->data;
300
301 if (rc == -EINPROGRESS)
302 return;
303
304 ecr->rc = rc;
305 complete(&ecr->completion);
306}
307
308
309
310
311
312
313
314
315
316
317
318
319static int crypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
320 struct scatterlist *dst_sg,
321 struct scatterlist *src_sg, int size,
322 unsigned char *iv, int op)
323{
324 struct skcipher_request *req = NULL;
325 struct extent_crypt_result ecr;
326 int rc = 0;
327
328 BUG_ON(!crypt_stat || !crypt_stat->tfm
329 || !(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED));
330 if (unlikely(ecryptfs_verbosity > 0)) {
331 ecryptfs_printk(KERN_DEBUG, "Key size [%zd]; key:\n",
332 crypt_stat->key_size);
333 ecryptfs_dump_hex(crypt_stat->key,
334 crypt_stat->key_size);
335 }
336
337 init_completion(&ecr.completion);
338
339 mutex_lock(&crypt_stat->cs_tfm_mutex);
340 req = skcipher_request_alloc(crypt_stat->tfm, GFP_NOFS);
341 if (!req) {
342 mutex_unlock(&crypt_stat->cs_tfm_mutex);
343 rc = -ENOMEM;
344 goto out;
345 }
346
347 skcipher_request_set_callback(req,
348 CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
349 extent_crypt_complete, &ecr);
350
351 if (!(crypt_stat->flags & ECRYPTFS_KEY_SET)) {
352 rc = crypto_skcipher_setkey(crypt_stat->tfm, crypt_stat->key,
353 crypt_stat->key_size);
354 if (rc) {
355 ecryptfs_printk(KERN_ERR,
356 "Error setting key; rc = [%d]\n",
357 rc);
358 mutex_unlock(&crypt_stat->cs_tfm_mutex);
359 rc = -EINVAL;
360 goto out;
361 }
362 crypt_stat->flags |= ECRYPTFS_KEY_SET;
363 }
364 mutex_unlock(&crypt_stat->cs_tfm_mutex);
365 skcipher_request_set_crypt(req, src_sg, dst_sg, size, iv);
366 rc = op == ENCRYPT ? crypto_skcipher_encrypt(req) :
367 crypto_skcipher_decrypt(req);
368 if (rc == -EINPROGRESS || rc == -EBUSY) {
369 struct extent_crypt_result *ecr = req->base.data;
370
371 wait_for_completion(&ecr->completion);
372 rc = ecr->rc;
373 reinit_completion(&ecr->completion);
374 }
375out:
376 skcipher_request_free(req);
377 return rc;
378}
379
380
381
382
383
384
385static loff_t lower_offset_for_page(struct ecryptfs_crypt_stat *crypt_stat,
386 struct page *page)
387{
388 return ecryptfs_lower_header_size(crypt_stat) +
389 ((loff_t)page->index << PAGE_SHIFT);
390}
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405static int crypt_extent(struct ecryptfs_crypt_stat *crypt_stat,
406 struct page *dst_page,
407 struct page *src_page,
408 unsigned long extent_offset, int op)
409{
410 pgoff_t page_index = op == ENCRYPT ? src_page->index : dst_page->index;
411 loff_t extent_base;
412 char extent_iv[ECRYPTFS_MAX_IV_BYTES];
413 struct scatterlist src_sg, dst_sg;
414 size_t extent_size = crypt_stat->extent_size;
415 int rc;
416
417 extent_base = (((loff_t)page_index) * (PAGE_SIZE / extent_size));
418 rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
419 (extent_base + extent_offset));
420 if (rc) {
421 ecryptfs_printk(KERN_ERR, "Error attempting to derive IV for "
422 "extent [0x%.16llx]; rc = [%d]\n",
423 (unsigned long long)(extent_base + extent_offset), rc);
424 goto out;
425 }
426
427 sg_init_table(&src_sg, 1);
428 sg_init_table(&dst_sg, 1);
429
430 sg_set_page(&src_sg, src_page, extent_size,
431 extent_offset * extent_size);
432 sg_set_page(&dst_sg, dst_page, extent_size,
433 extent_offset * extent_size);
434
435 rc = crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, extent_size,
436 extent_iv, op);
437 if (rc < 0) {
438 printk(KERN_ERR "%s: Error attempting to crypt page with "
439 "page_index = [%ld], extent_offset = [%ld]; "
440 "rc = [%d]\n", __func__, page_index, extent_offset, rc);
441 goto out;
442 }
443 rc = 0;
444out:
445 return rc;
446}
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464int ecryptfs_encrypt_page(struct page *page)
465{
466 struct inode *ecryptfs_inode;
467 struct ecryptfs_crypt_stat *crypt_stat;
468 char *enc_extent_virt;
469 struct page *enc_extent_page = NULL;
470 loff_t extent_offset;
471 loff_t lower_offset;
472 int rc = 0;
473
474 ecryptfs_inode = page->mapping->host;
475 crypt_stat =
476 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat);
477 BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
478 enc_extent_page = alloc_page(GFP_USER);
479 if (!enc_extent_page) {
480 rc = -ENOMEM;
481 ecryptfs_printk(KERN_ERR, "Error allocating memory for "
482 "encrypted extent\n");
483 goto out;
484 }
485
486 for (extent_offset = 0;
487 extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
488 extent_offset++) {
489 rc = crypt_extent(crypt_stat, enc_extent_page, page,
490 extent_offset, ENCRYPT);
491 if (rc) {
492 printk(KERN_ERR "%s: Error encrypting extent; "
493 "rc = [%d]\n", __func__, rc);
494 goto out;
495 }
496 }
497
498 lower_offset = lower_offset_for_page(crypt_stat, page);
499 enc_extent_virt = kmap(enc_extent_page);
500 rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, lower_offset,
501 PAGE_SIZE);
502 kunmap(enc_extent_page);
503 if (rc < 0) {
504 ecryptfs_printk(KERN_ERR,
505 "Error attempting to write lower page; rc = [%d]\n",
506 rc);
507 goto out;
508 }
509 rc = 0;
510out:
511 if (enc_extent_page) {
512 __free_page(enc_extent_page);
513 }
514 return rc;
515}
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533int ecryptfs_decrypt_page(struct page *page)
534{
535 struct inode *ecryptfs_inode;
536 struct ecryptfs_crypt_stat *crypt_stat;
537 char *page_virt;
538 unsigned long extent_offset;
539 loff_t lower_offset;
540 int rc = 0;
541
542 ecryptfs_inode = page->mapping->host;
543 crypt_stat =
544 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat);
545 BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
546
547 lower_offset = lower_offset_for_page(crypt_stat, page);
548 page_virt = kmap(page);
549 rc = ecryptfs_read_lower(page_virt, lower_offset, PAGE_SIZE,
550 ecryptfs_inode);
551 kunmap(page);
552 if (rc < 0) {
553 ecryptfs_printk(KERN_ERR,
554 "Error attempting to read lower page; rc = [%d]\n",
555 rc);
556 goto out;
557 }
558
559 for (extent_offset = 0;
560 extent_offset < (PAGE_SIZE / crypt_stat->extent_size);
561 extent_offset++) {
562 rc = crypt_extent(crypt_stat, page, page,
563 extent_offset, DECRYPT);
564 if (rc) {
565 printk(KERN_ERR "%s: Error encrypting extent; "
566 "rc = [%d]\n", __func__, rc);
567 goto out;
568 }
569 }
570out:
571 return rc;
572}
573
574#define ECRYPTFS_MAX_SCATTERLIST_LEN 4
575
576
577
578
579
580
581
582
583
584
585int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
586{
587 char *full_alg_name;
588 int rc = -EINVAL;
589
590 ecryptfs_printk(KERN_DEBUG,
591 "Initializing cipher [%s]; strlen = [%d]; "
592 "key_size_bits = [%zd]\n",
593 crypt_stat->cipher, (int)strlen(crypt_stat->cipher),
594 crypt_stat->key_size << 3);
595 mutex_lock(&crypt_stat->cs_tfm_mutex);
596 if (crypt_stat->tfm) {
597 rc = 0;
598 goto out_unlock;
599 }
600 rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name,
601 crypt_stat->cipher, "cbc");
602 if (rc)
603 goto out_unlock;
604 crypt_stat->tfm = crypto_alloc_skcipher(full_alg_name, 0, 0);
605 if (IS_ERR(crypt_stat->tfm)) {
606 rc = PTR_ERR(crypt_stat->tfm);
607 crypt_stat->tfm = NULL;
608 ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
609 "Error initializing cipher [%s]\n",
610 full_alg_name);
611 goto out_free;
612 }
613 crypto_skcipher_set_flags(crypt_stat->tfm, CRYPTO_TFM_REQ_WEAK_KEY);
614 rc = 0;
615out_free:
616 kfree(full_alg_name);
617out_unlock:
618 mutex_unlock(&crypt_stat->cs_tfm_mutex);
619 return rc;
620}
621
622static void set_extent_mask_and_shift(struct ecryptfs_crypt_stat *crypt_stat)
623{
624 int extent_size_tmp;
625
626 crypt_stat->extent_mask = 0xFFFFFFFF;
627 crypt_stat->extent_shift = 0;
628 if (crypt_stat->extent_size == 0)
629 return;
630 extent_size_tmp = crypt_stat->extent_size;
631 while ((extent_size_tmp & 0x01) == 0) {
632 extent_size_tmp >>= 1;
633 crypt_stat->extent_mask <<= 1;
634 crypt_stat->extent_shift++;
635 }
636}
637
638void ecryptfs_set_default_sizes(struct ecryptfs_crypt_stat *crypt_stat)
639{
640
641
642 crypt_stat->extent_size = ECRYPTFS_DEFAULT_EXTENT_SIZE;
643 set_extent_mask_and_shift(crypt_stat);
644 crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES;
645 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
646 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
647 else {
648 if (PAGE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)
649 crypt_stat->metadata_size =
650 ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
651 else
652 crypt_stat->metadata_size = PAGE_SIZE;
653 }
654}
655
656
657
658
659
660
661
662int ecryptfs_compute_root_iv(struct ecryptfs_crypt_stat *crypt_stat)
663{
664 int rc = 0;
665 char dst[MD5_DIGEST_SIZE];
666
667 BUG_ON(crypt_stat->iv_bytes > MD5_DIGEST_SIZE);
668 BUG_ON(crypt_stat->iv_bytes <= 0);
669 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
670 rc = -EINVAL;
671 ecryptfs_printk(KERN_WARNING, "Session key not valid; "
672 "cannot generate root IV\n");
673 goto out;
674 }
675 rc = ecryptfs_calculate_md5(dst, crypt_stat, crypt_stat->key,
676 crypt_stat->key_size);
677 if (rc) {
678 ecryptfs_printk(KERN_WARNING, "Error attempting to compute "
679 "MD5 while generating root IV\n");
680 goto out;
681 }
682 memcpy(crypt_stat->root_iv, dst, crypt_stat->iv_bytes);
683out:
684 if (rc) {
685 memset(crypt_stat->root_iv, 0, crypt_stat->iv_bytes);
686 crypt_stat->flags |= ECRYPTFS_SECURITY_WARNING;
687 }
688 return rc;
689}
690
691static void ecryptfs_generate_new_key(struct ecryptfs_crypt_stat *crypt_stat)
692{
693 get_random_bytes(crypt_stat->key, crypt_stat->key_size);
694 crypt_stat->flags |= ECRYPTFS_KEY_VALID;
695 ecryptfs_compute_root_iv(crypt_stat);
696 if (unlikely(ecryptfs_verbosity > 0)) {
697 ecryptfs_printk(KERN_DEBUG, "Generated new session key:\n");
698 ecryptfs_dump_hex(crypt_stat->key,
699 crypt_stat->key_size);
700 }
701}
702
703
704
705
706
707
708
709
710
711static void ecryptfs_copy_mount_wide_flags_to_inode_flags(
712 struct ecryptfs_crypt_stat *crypt_stat,
713 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
714{
715 if (mount_crypt_stat->flags & ECRYPTFS_XATTR_METADATA_ENABLED)
716 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
717 if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
718 crypt_stat->flags |= ECRYPTFS_VIEW_AS_ENCRYPTED;
719 if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
720 crypt_stat->flags |= ECRYPTFS_ENCRYPT_FILENAMES;
721 if (mount_crypt_stat->flags
722 & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)
723 crypt_stat->flags |= ECRYPTFS_ENCFN_USE_MOUNT_FNEK;
724 else if (mount_crypt_stat->flags
725 & ECRYPTFS_GLOBAL_ENCFN_USE_FEK)
726 crypt_stat->flags |= ECRYPTFS_ENCFN_USE_FEK;
727 }
728}
729
730static int ecryptfs_copy_mount_wide_sigs_to_inode_sigs(
731 struct ecryptfs_crypt_stat *crypt_stat,
732 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
733{
734 struct ecryptfs_global_auth_tok *global_auth_tok;
735 int rc = 0;
736
737 mutex_lock(&crypt_stat->keysig_list_mutex);
738 mutex_lock(&mount_crypt_stat->global_auth_tok_list_mutex);
739
740 list_for_each_entry(global_auth_tok,
741 &mount_crypt_stat->global_auth_tok_list,
742 mount_crypt_stat_list) {
743 if (global_auth_tok->flags & ECRYPTFS_AUTH_TOK_FNEK)
744 continue;
745 rc = ecryptfs_add_keysig(crypt_stat, global_auth_tok->sig);
746 if (rc) {
747 printk(KERN_ERR "Error adding keysig; rc = [%d]\n", rc);
748 goto out;
749 }
750 }
751
752out:
753 mutex_unlock(&mount_crypt_stat->global_auth_tok_list_mutex);
754 mutex_unlock(&crypt_stat->keysig_list_mutex);
755 return rc;
756}
757
758
759
760
761
762
763
764
765static void ecryptfs_set_default_crypt_stat_vals(
766 struct ecryptfs_crypt_stat *crypt_stat,
767 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
768{
769 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
770 mount_crypt_stat);
771 ecryptfs_set_default_sizes(crypt_stat);
772 strcpy(crypt_stat->cipher, ECRYPTFS_DEFAULT_CIPHER);
773 crypt_stat->key_size = ECRYPTFS_DEFAULT_KEY_BYTES;
774 crypt_stat->flags &= ~(ECRYPTFS_KEY_VALID);
775 crypt_stat->file_version = ECRYPTFS_FILE_VERSION;
776 crypt_stat->mount_crypt_stat = mount_crypt_stat;
777}
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798int ecryptfs_new_file_context(struct inode *ecryptfs_inode)
799{
800 struct ecryptfs_crypt_stat *crypt_stat =
801 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
802 struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
803 &ecryptfs_superblock_to_private(
804 ecryptfs_inode->i_sb)->mount_crypt_stat;
805 int cipher_name_len;
806 int rc = 0;
807
808 ecryptfs_set_default_crypt_stat_vals(crypt_stat, mount_crypt_stat);
809 crypt_stat->flags |= (ECRYPTFS_ENCRYPTED | ECRYPTFS_KEY_VALID);
810 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
811 mount_crypt_stat);
812 rc = ecryptfs_copy_mount_wide_sigs_to_inode_sigs(crypt_stat,
813 mount_crypt_stat);
814 if (rc) {
815 printk(KERN_ERR "Error attempting to copy mount-wide key sigs "
816 "to the inode key sigs; rc = [%d]\n", rc);
817 goto out;
818 }
819 cipher_name_len =
820 strlen(mount_crypt_stat->global_default_cipher_name);
821 memcpy(crypt_stat->cipher,
822 mount_crypt_stat->global_default_cipher_name,
823 cipher_name_len);
824 crypt_stat->cipher[cipher_name_len] = '\0';
825 crypt_stat->key_size =
826 mount_crypt_stat->global_default_cipher_key_size;
827 ecryptfs_generate_new_key(crypt_stat);
828 rc = ecryptfs_init_crypt_ctx(crypt_stat);
829 if (rc)
830 ecryptfs_printk(KERN_ERR, "Error initializing cryptographic "
831 "context for cipher [%s]: rc = [%d]\n",
832 crypt_stat->cipher, rc);
833out:
834 return rc;
835}
836
837
838
839
840
841
842
843static int ecryptfs_validate_marker(char *data)
844{
845 u32 m_1, m_2;
846
847 m_1 = get_unaligned_be32(data);
848 m_2 = get_unaligned_be32(data + 4);
849 if ((m_1 ^ MAGIC_ECRYPTFS_MARKER) == m_2)
850 return 0;
851 ecryptfs_printk(KERN_DEBUG, "m_1 = [0x%.8x]; m_2 = [0x%.8x]; "
852 "MAGIC_ECRYPTFS_MARKER = [0x%.8x]\n", m_1, m_2,
853 MAGIC_ECRYPTFS_MARKER);
854 ecryptfs_printk(KERN_DEBUG, "(m_1 ^ MAGIC_ECRYPTFS_MARKER) = "
855 "[0x%.8x]\n", (m_1 ^ MAGIC_ECRYPTFS_MARKER));
856 return -EINVAL;
857}
858
859struct ecryptfs_flag_map_elem {
860 u32 file_flag;
861 u32 local_flag;
862};
863
864
865static struct ecryptfs_flag_map_elem ecryptfs_flag_map[] = {
866 {0x00000001, ECRYPTFS_ENABLE_HMAC},
867 {0x00000002, ECRYPTFS_ENCRYPTED},
868 {0x00000004, ECRYPTFS_METADATA_IN_XATTR},
869 {0x00000008, ECRYPTFS_ENCRYPT_FILENAMES}
870};
871
872
873
874
875
876
877
878
879
880static int ecryptfs_process_flags(struct ecryptfs_crypt_stat *crypt_stat,
881 char *page_virt, int *bytes_read)
882{
883 int rc = 0;
884 int i;
885 u32 flags;
886
887 flags = get_unaligned_be32(page_virt);
888 for (i = 0; i < ARRAY_SIZE(ecryptfs_flag_map); i++)
889 if (flags & ecryptfs_flag_map[i].file_flag) {
890 crypt_stat->flags |= ecryptfs_flag_map[i].local_flag;
891 } else
892 crypt_stat->flags &= ~(ecryptfs_flag_map[i].local_flag);
893
894 crypt_stat->file_version = ((flags >> 24) & 0xFF);
895 (*bytes_read) = 4;
896 return rc;
897}
898
899
900
901
902
903
904
905
906static void write_ecryptfs_marker(char *page_virt, size_t *written)
907{
908 u32 m_1, m_2;
909
910 get_random_bytes(&m_1, (MAGIC_ECRYPTFS_MARKER_SIZE_BYTES / 2));
911 m_2 = (m_1 ^ MAGIC_ECRYPTFS_MARKER);
912 put_unaligned_be32(m_1, page_virt);
913 page_virt += (MAGIC_ECRYPTFS_MARKER_SIZE_BYTES / 2);
914 put_unaligned_be32(m_2, page_virt);
915 (*written) = MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
916}
917
918void ecryptfs_write_crypt_stat_flags(char *page_virt,
919 struct ecryptfs_crypt_stat *crypt_stat,
920 size_t *written)
921{
922 u32 flags = 0;
923 int i;
924
925 for (i = 0; i < ARRAY_SIZE(ecryptfs_flag_map); i++)
926 if (crypt_stat->flags & ecryptfs_flag_map[i].local_flag)
927 flags |= ecryptfs_flag_map[i].file_flag;
928
929 flags |= ((((u8)crypt_stat->file_version) << 24) & 0xFF000000);
930 put_unaligned_be32(flags, page_virt);
931 (*written) = 4;
932}
933
934struct ecryptfs_cipher_code_str_map_elem {
935 char cipher_str[16];
936 u8 cipher_code;
937};
938
939
940
941
942static struct ecryptfs_cipher_code_str_map_elem
943ecryptfs_cipher_code_str_map[] = {
944 {"aes",RFC2440_CIPHER_AES_128 },
945 {"blowfish", RFC2440_CIPHER_BLOWFISH},
946 {"des3_ede", RFC2440_CIPHER_DES3_EDE},
947 {"cast5", RFC2440_CIPHER_CAST_5},
948 {"twofish", RFC2440_CIPHER_TWOFISH},
949 {"cast6", RFC2440_CIPHER_CAST_6},
950 {"aes", RFC2440_CIPHER_AES_192},
951 {"aes", RFC2440_CIPHER_AES_256}
952};
953
954
955
956
957
958
959
960
961u8 ecryptfs_code_for_cipher_string(char *cipher_name, size_t key_bytes)
962{
963 int i;
964 u8 code = 0;
965 struct ecryptfs_cipher_code_str_map_elem *map =
966 ecryptfs_cipher_code_str_map;
967
968 if (strcmp(cipher_name, "aes") == 0) {
969 switch (key_bytes) {
970 case 16:
971 code = RFC2440_CIPHER_AES_128;
972 break;
973 case 24:
974 code = RFC2440_CIPHER_AES_192;
975 break;
976 case 32:
977 code = RFC2440_CIPHER_AES_256;
978 }
979 } else {
980 for (i = 0; i < ARRAY_SIZE(ecryptfs_cipher_code_str_map); i++)
981 if (strcmp(cipher_name, map[i].cipher_str) == 0) {
982 code = map[i].cipher_code;
983 break;
984 }
985 }
986 return code;
987}
988
989
990
991
992
993
994
995
996int ecryptfs_cipher_code_to_string(char *str, u8 cipher_code)
997{
998 int rc = 0;
999 int i;
1000
1001 str[0] = '\0';
1002 for (i = 0; i < ARRAY_SIZE(ecryptfs_cipher_code_str_map); i++)
1003 if (cipher_code == ecryptfs_cipher_code_str_map[i].cipher_code)
1004 strcpy(str, ecryptfs_cipher_code_str_map[i].cipher_str);
1005 if (str[0] == '\0') {
1006 ecryptfs_printk(KERN_WARNING, "Cipher code not recognized: "
1007 "[%d]\n", cipher_code);
1008 rc = -EINVAL;
1009 }
1010 return rc;
1011}
1012
1013int ecryptfs_read_and_validate_header_region(struct inode *inode)
1014{
1015 u8 file_size[ECRYPTFS_SIZE_AND_MARKER_BYTES];
1016 u8 *marker = file_size + ECRYPTFS_FILE_SIZE_BYTES;
1017 int rc;
1018
1019 rc = ecryptfs_read_lower(file_size, 0, ECRYPTFS_SIZE_AND_MARKER_BYTES,
1020 inode);
1021 if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
1022 return rc >= 0 ? -EINVAL : rc;
1023 rc = ecryptfs_validate_marker(marker);
1024 if (!rc)
1025 ecryptfs_i_size_init(file_size, inode);
1026 return rc;
1027}
1028
1029void
1030ecryptfs_write_header_metadata(char *virt,
1031 struct ecryptfs_crypt_stat *crypt_stat,
1032 size_t *written)
1033{
1034 u32 header_extent_size;
1035 u16 num_header_extents_at_front;
1036
1037 header_extent_size = (u32)crypt_stat->extent_size;
1038 num_header_extents_at_front =
1039 (u16)(crypt_stat->metadata_size / crypt_stat->extent_size);
1040 put_unaligned_be32(header_extent_size, virt);
1041 virt += 4;
1042 put_unaligned_be16(num_header_extents_at_front, virt);
1043 (*written) = 6;
1044}
1045
1046struct kmem_cache *ecryptfs_header_cache;
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079static int ecryptfs_write_headers_virt(char *page_virt, size_t max,
1080 size_t *size,
1081 struct ecryptfs_crypt_stat *crypt_stat,
1082 struct dentry *ecryptfs_dentry)
1083{
1084 int rc;
1085 size_t written;
1086 size_t offset;
1087
1088 offset = ECRYPTFS_FILE_SIZE_BYTES;
1089 write_ecryptfs_marker((page_virt + offset), &written);
1090 offset += written;
1091 ecryptfs_write_crypt_stat_flags((page_virt + offset), crypt_stat,
1092 &written);
1093 offset += written;
1094 ecryptfs_write_header_metadata((page_virt + offset), crypt_stat,
1095 &written);
1096 offset += written;
1097 rc = ecryptfs_generate_key_packet_set((page_virt + offset), crypt_stat,
1098 ecryptfs_dentry, &written,
1099 max - offset);
1100 if (rc)
1101 ecryptfs_printk(KERN_WARNING, "Error generating key packet "
1102 "set; rc = [%d]\n", rc);
1103 if (size) {
1104 offset += written;
1105 *size = offset;
1106 }
1107 return rc;
1108}
1109
1110static int
1111ecryptfs_write_metadata_to_contents(struct inode *ecryptfs_inode,
1112 char *virt, size_t virt_len)
1113{
1114 int rc;
1115
1116 rc = ecryptfs_write_lower(ecryptfs_inode, virt,
1117 0, virt_len);
1118 if (rc < 0)
1119 printk(KERN_ERR "%s: Error attempting to write header "
1120 "information to lower file; rc = [%d]\n", __func__, rc);
1121 else
1122 rc = 0;
1123 return rc;
1124}
1125
1126static int
1127ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry,
1128 struct inode *ecryptfs_inode,
1129 char *page_virt, size_t size)
1130{
1131 int rc;
1132
1133 rc = ecryptfs_setxattr(ecryptfs_dentry, ecryptfs_inode,
1134 ECRYPTFS_XATTR_NAME, page_virt, size, 0);
1135 return rc;
1136}
1137
1138static unsigned long ecryptfs_get_zeroed_pages(gfp_t gfp_mask,
1139 unsigned int order)
1140{
1141 struct page *page;
1142
1143 page = alloc_pages(gfp_mask | __GFP_ZERO, order);
1144 if (page)
1145 return (unsigned long) page_address(page);
1146 return 0;
1147}
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry,
1163 struct inode *ecryptfs_inode)
1164{
1165 struct ecryptfs_crypt_stat *crypt_stat =
1166 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
1167 unsigned int order;
1168 char *virt;
1169 size_t virt_len;
1170 size_t size = 0;
1171 int rc = 0;
1172
1173 if (likely(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
1174 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
1175 printk(KERN_ERR "Key is invalid; bailing out\n");
1176 rc = -EINVAL;
1177 goto out;
1178 }
1179 } else {
1180 printk(KERN_WARNING "%s: Encrypted flag not set\n",
1181 __func__);
1182 rc = -EINVAL;
1183 goto out;
1184 }
1185 virt_len = crypt_stat->metadata_size;
1186 order = get_order(virt_len);
1187
1188 virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order);
1189 if (!virt) {
1190 printk(KERN_ERR "%s: Out of memory\n", __func__);
1191 rc = -ENOMEM;
1192 goto out;
1193 }
1194
1195 rc = ecryptfs_write_headers_virt(virt, virt_len, &size, crypt_stat,
1196 ecryptfs_dentry);
1197 if (unlikely(rc)) {
1198 printk(KERN_ERR "%s: Error whilst writing headers; rc = [%d]\n",
1199 __func__, rc);
1200 goto out_free;
1201 }
1202 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1203 rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry, ecryptfs_inode,
1204 virt, size);
1205 else
1206 rc = ecryptfs_write_metadata_to_contents(ecryptfs_inode, virt,
1207 virt_len);
1208 if (rc) {
1209 printk(KERN_ERR "%s: Error writing metadata out to lower file; "
1210 "rc = [%d]\n", __func__, rc);
1211 goto out_free;
1212 }
1213out_free:
1214 free_pages((unsigned long)virt, order);
1215out:
1216 return rc;
1217}
1218
1219#define ECRYPTFS_DONT_VALIDATE_HEADER_SIZE 0
1220#define ECRYPTFS_VALIDATE_HEADER_SIZE 1
1221static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,
1222 char *virt, int *bytes_read,
1223 int validate_header_size)
1224{
1225 int rc = 0;
1226 u32 header_extent_size;
1227 u16 num_header_extents_at_front;
1228
1229 header_extent_size = get_unaligned_be32(virt);
1230 virt += sizeof(__be32);
1231 num_header_extents_at_front = get_unaligned_be16(virt);
1232 crypt_stat->metadata_size = (((size_t)num_header_extents_at_front
1233 * (size_t)header_extent_size));
1234 (*bytes_read) = (sizeof(__be32) + sizeof(__be16));
1235 if ((validate_header_size == ECRYPTFS_VALIDATE_HEADER_SIZE)
1236 && (crypt_stat->metadata_size
1237 < ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)) {
1238 rc = -EINVAL;
1239 printk(KERN_WARNING "Invalid header size: [%zd]\n",
1240 crypt_stat->metadata_size);
1241 }
1242 return rc;
1243}
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
1254{
1255 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
1256}
1257
1258void ecryptfs_i_size_init(const char *page_virt, struct inode *inode)
1259{
1260 struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
1261 struct ecryptfs_crypt_stat *crypt_stat;
1262 u64 file_size;
1263
1264 crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
1265 mount_crypt_stat =
1266 &ecryptfs_superblock_to_private(inode->i_sb)->mount_crypt_stat;
1267 if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
1268 file_size = i_size_read(ecryptfs_inode_to_lower(inode));
1269 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1270 file_size += crypt_stat->metadata_size;
1271 } else
1272 file_size = get_unaligned_be64(page_virt);
1273 i_size_write(inode, (loff_t)file_size);
1274 crypt_stat->flags |= ECRYPTFS_I_SIZE_INITIALIZED;
1275}
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289static int ecryptfs_read_headers_virt(char *page_virt,
1290 struct ecryptfs_crypt_stat *crypt_stat,
1291 struct dentry *ecryptfs_dentry,
1292 int validate_header_size)
1293{
1294 int rc = 0;
1295 int offset;
1296 int bytes_read;
1297
1298 ecryptfs_set_default_sizes(crypt_stat);
1299 crypt_stat->mount_crypt_stat = &ecryptfs_superblock_to_private(
1300 ecryptfs_dentry->d_sb)->mount_crypt_stat;
1301 offset = ECRYPTFS_FILE_SIZE_BYTES;
1302 rc = ecryptfs_validate_marker(page_virt + offset);
1303 if (rc)
1304 goto out;
1305 if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
1306 ecryptfs_i_size_init(page_virt, d_inode(ecryptfs_dentry));
1307 offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
1308 rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
1309 &bytes_read);
1310 if (rc) {
1311 ecryptfs_printk(KERN_WARNING, "Error processing flags\n");
1312 goto out;
1313 }
1314 if (crypt_stat->file_version > ECRYPTFS_SUPPORTED_FILE_VERSION) {
1315 ecryptfs_printk(KERN_WARNING, "File version is [%d]; only "
1316 "file version [%d] is supported by this "
1317 "version of eCryptfs\n",
1318 crypt_stat->file_version,
1319 ECRYPTFS_SUPPORTED_FILE_VERSION);
1320 rc = -EINVAL;
1321 goto out;
1322 }
1323 offset += bytes_read;
1324 if (crypt_stat->file_version >= 1) {
1325 rc = parse_header_metadata(crypt_stat, (page_virt + offset),
1326 &bytes_read, validate_header_size);
1327 if (rc) {
1328 ecryptfs_printk(KERN_WARNING, "Error reading header "
1329 "metadata; rc = [%d]\n", rc);
1330 }
1331 offset += bytes_read;
1332 } else
1333 set_default_header_data(crypt_stat);
1334 rc = ecryptfs_parse_packet_set(crypt_stat, (page_virt + offset),
1335 ecryptfs_dentry);
1336out:
1337 return rc;
1338}
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350int ecryptfs_read_xattr_region(char *page_virt, struct inode *ecryptfs_inode)
1351{
1352 struct dentry *lower_dentry =
1353 ecryptfs_inode_to_private(ecryptfs_inode)->lower_file->f_path.dentry;
1354 ssize_t size;
1355 int rc = 0;
1356
1357 size = ecryptfs_getxattr_lower(lower_dentry,
1358 ecryptfs_inode_to_lower(ecryptfs_inode),
1359 ECRYPTFS_XATTR_NAME,
1360 page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE);
1361 if (size < 0) {
1362 if (unlikely(ecryptfs_verbosity > 0))
1363 printk(KERN_INFO "Error attempting to read the [%s] "
1364 "xattr from the lower file; return value = "
1365 "[%zd]\n", ECRYPTFS_XATTR_NAME, size);
1366 rc = -EINVAL;
1367 goto out;
1368 }
1369out:
1370 return rc;
1371}
1372
1373int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry,
1374 struct inode *inode)
1375{
1376 u8 file_size[ECRYPTFS_SIZE_AND_MARKER_BYTES];
1377 u8 *marker = file_size + ECRYPTFS_FILE_SIZE_BYTES;
1378 int rc;
1379
1380 rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry),
1381 ecryptfs_inode_to_lower(inode),
1382 ECRYPTFS_XATTR_NAME, file_size,
1383 ECRYPTFS_SIZE_AND_MARKER_BYTES);
1384 if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
1385 return rc >= 0 ? -EINVAL : rc;
1386 rc = ecryptfs_validate_marker(marker);
1387 if (!rc)
1388 ecryptfs_i_size_init(file_size, inode);
1389 return rc;
1390}
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
1405{
1406 int rc;
1407 char *page_virt;
1408 struct inode *ecryptfs_inode = d_inode(ecryptfs_dentry);
1409 struct ecryptfs_crypt_stat *crypt_stat =
1410 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
1411 struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
1412 &ecryptfs_superblock_to_private(
1413 ecryptfs_dentry->d_sb)->mount_crypt_stat;
1414
1415 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
1416 mount_crypt_stat);
1417
1418 page_virt = kmem_cache_alloc(ecryptfs_header_cache, GFP_USER);
1419 if (!page_virt) {
1420 rc = -ENOMEM;
1421 goto out;
1422 }
1423 rc = ecryptfs_read_lower(page_virt, 0, crypt_stat->extent_size,
1424 ecryptfs_inode);
1425 if (rc >= 0)
1426 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1427 ecryptfs_dentry,
1428 ECRYPTFS_VALIDATE_HEADER_SIZE);
1429 if (rc) {
1430
1431 memset(page_virt, 0, PAGE_SIZE);
1432 rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);
1433 if (rc) {
1434 printk(KERN_DEBUG "Valid eCryptfs headers not found in "
1435 "file header region or xattr region, inode %lu\n",
1436 ecryptfs_inode->i_ino);
1437 rc = -EINVAL;
1438 goto out;
1439 }
1440 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1441 ecryptfs_dentry,
1442 ECRYPTFS_DONT_VALIDATE_HEADER_SIZE);
1443 if (rc) {
1444 printk(KERN_DEBUG "Valid eCryptfs headers not found in "
1445 "file xattr region either, inode %lu\n",
1446 ecryptfs_inode->i_ino);
1447 rc = -EINVAL;
1448 }
1449 if (crypt_stat->mount_crypt_stat->flags
1450 & ECRYPTFS_XATTR_METADATA_ENABLED) {
1451 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
1452 } else {
1453 printk(KERN_WARNING "Attempt to access file with "
1454 "crypto metadata only in the extended attribute "
1455 "region, but eCryptfs was mounted without "
1456 "xattr support enabled. eCryptfs will not treat "
1457 "this like an encrypted file, inode %lu\n",
1458 ecryptfs_inode->i_ino);
1459 rc = -EINVAL;
1460 }
1461 }
1462out:
1463 if (page_virt) {
1464 memset(page_virt, 0, PAGE_SIZE);
1465 kmem_cache_free(ecryptfs_header_cache, page_virt);
1466 }
1467 return rc;
1468}
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479static int
1480ecryptfs_encrypt_filename(struct ecryptfs_filename *filename,
1481 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
1482{
1483 int rc = 0;
1484
1485 filename->encrypted_filename = NULL;
1486 filename->encrypted_filename_size = 0;
1487 if (mount_crypt_stat && (mount_crypt_stat->flags
1488 & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)) {
1489 size_t packet_size;
1490 size_t remaining_bytes;
1491
1492 rc = ecryptfs_write_tag_70_packet(
1493 NULL, NULL,
1494 &filename->encrypted_filename_size,
1495 mount_crypt_stat, NULL,
1496 filename->filename_size);
1497 if (rc) {
1498 printk(KERN_ERR "%s: Error attempting to get packet "
1499 "size for tag 72; rc = [%d]\n", __func__,
1500 rc);
1501 filename->encrypted_filename_size = 0;
1502 goto out;
1503 }
1504 filename->encrypted_filename =
1505 kmalloc(filename->encrypted_filename_size, GFP_KERNEL);
1506 if (!filename->encrypted_filename) {
1507 rc = -ENOMEM;
1508 goto out;
1509 }
1510 remaining_bytes = filename->encrypted_filename_size;
1511 rc = ecryptfs_write_tag_70_packet(filename->encrypted_filename,
1512 &remaining_bytes,
1513 &packet_size,
1514 mount_crypt_stat,
1515 filename->filename,
1516 filename->filename_size);
1517 if (rc) {
1518 printk(KERN_ERR "%s: Error attempting to generate "
1519 "tag 70 packet; rc = [%d]\n", __func__,
1520 rc);
1521 kfree(filename->encrypted_filename);
1522 filename->encrypted_filename = NULL;
1523 filename->encrypted_filename_size = 0;
1524 goto out;
1525 }
1526 filename->encrypted_filename_size = packet_size;
1527 } else {
1528 printk(KERN_ERR "%s: No support for requested filename "
1529 "encryption method in this release\n", __func__);
1530 rc = -EOPNOTSUPP;
1531 goto out;
1532 }
1533out:
1534 return rc;
1535}
1536
1537static int ecryptfs_copy_filename(char **copied_name, size_t *copied_name_size,
1538 const char *name, size_t name_size)
1539{
1540 int rc = 0;
1541
1542 (*copied_name) = kmalloc((name_size + 1), GFP_KERNEL);
1543 if (!(*copied_name)) {
1544 rc = -ENOMEM;
1545 goto out;
1546 }
1547 memcpy((void *)(*copied_name), (void *)name, name_size);
1548 (*copied_name)[(name_size)] = '\0';
1549
1550
1551
1552 (*copied_name_size) = name_size;
1553out:
1554 return rc;
1555}
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567static int
1568ecryptfs_process_key_cipher(struct crypto_skcipher **key_tfm,
1569 char *cipher_name, size_t *key_size)
1570{
1571 char dummy_key[ECRYPTFS_MAX_KEY_BYTES];
1572 char *full_alg_name = NULL;
1573 int rc;
1574
1575 *key_tfm = NULL;
1576 if (*key_size > ECRYPTFS_MAX_KEY_BYTES) {
1577 rc = -EINVAL;
1578 printk(KERN_ERR "Requested key size is [%zd] bytes; maximum "
1579 "allowable is [%d]\n", *key_size, ECRYPTFS_MAX_KEY_BYTES);
1580 goto out;
1581 }
1582 rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name, cipher_name,
1583 "ecb");
1584 if (rc)
1585 goto out;
1586 *key_tfm = crypto_alloc_skcipher(full_alg_name, 0, CRYPTO_ALG_ASYNC);
1587 if (IS_ERR(*key_tfm)) {
1588 rc = PTR_ERR(*key_tfm);
1589 printk(KERN_ERR "Unable to allocate crypto cipher with name "
1590 "[%s]; rc = [%d]\n", full_alg_name, rc);
1591 goto out;
1592 }
1593 crypto_skcipher_set_flags(*key_tfm, CRYPTO_TFM_REQ_WEAK_KEY);
1594 if (*key_size == 0)
1595 *key_size = crypto_skcipher_default_keysize(*key_tfm);
1596 get_random_bytes(dummy_key, *key_size);
1597 rc = crypto_skcipher_setkey(*key_tfm, dummy_key, *key_size);
1598 if (rc) {
1599 printk(KERN_ERR "Error attempting to set key of size [%zd] for "
1600 "cipher [%s]; rc = [%d]\n", *key_size, full_alg_name,
1601 rc);
1602 rc = -EINVAL;
1603 goto out;
1604 }
1605out:
1606 kfree(full_alg_name);
1607 return rc;
1608}
1609
1610struct kmem_cache *ecryptfs_key_tfm_cache;
1611static struct list_head key_tfm_list;
1612struct mutex key_tfm_list_mutex;
1613
1614int __init ecryptfs_init_crypto(void)
1615{
1616 mutex_init(&key_tfm_list_mutex);
1617 INIT_LIST_HEAD(&key_tfm_list);
1618 return 0;
1619}
1620
1621
1622
1623
1624
1625
1626int ecryptfs_destroy_crypto(void)
1627{
1628 struct ecryptfs_key_tfm *key_tfm, *key_tfm_tmp;
1629
1630 mutex_lock(&key_tfm_list_mutex);
1631 list_for_each_entry_safe(key_tfm, key_tfm_tmp, &key_tfm_list,
1632 key_tfm_list) {
1633 list_del(&key_tfm->key_tfm_list);
1634 crypto_free_skcipher(key_tfm->key_tfm);
1635 kmem_cache_free(ecryptfs_key_tfm_cache, key_tfm);
1636 }
1637 mutex_unlock(&key_tfm_list_mutex);
1638 return 0;
1639}
1640
1641int
1642ecryptfs_add_new_key_tfm(struct ecryptfs_key_tfm **key_tfm, char *cipher_name,
1643 size_t key_size)
1644{
1645 struct ecryptfs_key_tfm *tmp_tfm;
1646 int rc = 0;
1647
1648 BUG_ON(!mutex_is_locked(&key_tfm_list_mutex));
1649
1650 tmp_tfm = kmem_cache_alloc(ecryptfs_key_tfm_cache, GFP_KERNEL);
1651 if (key_tfm)
1652 (*key_tfm) = tmp_tfm;
1653 if (!tmp_tfm) {
1654 rc = -ENOMEM;
1655 goto out;
1656 }
1657 mutex_init(&tmp_tfm->key_tfm_mutex);
1658 strncpy(tmp_tfm->cipher_name, cipher_name,
1659 ECRYPTFS_MAX_CIPHER_NAME_SIZE);
1660 tmp_tfm->cipher_name[ECRYPTFS_MAX_CIPHER_NAME_SIZE] = '\0';
1661 tmp_tfm->key_size = key_size;
1662 rc = ecryptfs_process_key_cipher(&tmp_tfm->key_tfm,
1663 tmp_tfm->cipher_name,
1664 &tmp_tfm->key_size);
1665 if (rc) {
1666 printk(KERN_ERR "Error attempting to initialize key TFM "
1667 "cipher with name = [%s]; rc = [%d]\n",
1668 tmp_tfm->cipher_name, rc);
1669 kmem_cache_free(ecryptfs_key_tfm_cache, tmp_tfm);
1670 if (key_tfm)
1671 (*key_tfm) = NULL;
1672 goto out;
1673 }
1674 list_add(&tmp_tfm->key_tfm_list, &key_tfm_list);
1675out:
1676 return rc;
1677}
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689int ecryptfs_tfm_exists(char *cipher_name, struct ecryptfs_key_tfm **key_tfm)
1690{
1691 struct ecryptfs_key_tfm *tmp_key_tfm;
1692
1693 BUG_ON(!mutex_is_locked(&key_tfm_list_mutex));
1694
1695 list_for_each_entry(tmp_key_tfm, &key_tfm_list, key_tfm_list) {
1696 if (strcmp(tmp_key_tfm->cipher_name, cipher_name) == 0) {
1697 if (key_tfm)
1698 (*key_tfm) = tmp_key_tfm;
1699 return 1;
1700 }
1701 }
1702 if (key_tfm)
1703 (*key_tfm) = NULL;
1704 return 0;
1705}
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718int ecryptfs_get_tfm_and_mutex_for_cipher_name(struct crypto_skcipher **tfm,
1719 struct mutex **tfm_mutex,
1720 char *cipher_name)
1721{
1722 struct ecryptfs_key_tfm *key_tfm;
1723 int rc = 0;
1724
1725 (*tfm) = NULL;
1726 (*tfm_mutex) = NULL;
1727
1728 mutex_lock(&key_tfm_list_mutex);
1729 if (!ecryptfs_tfm_exists(cipher_name, &key_tfm)) {
1730 rc = ecryptfs_add_new_key_tfm(&key_tfm, cipher_name, 0);
1731 if (rc) {
1732 printk(KERN_ERR "Error adding new key_tfm to list; "
1733 "rc = [%d]\n", rc);
1734 goto out;
1735 }
1736 }
1737 (*tfm) = key_tfm->key_tfm;
1738 (*tfm_mutex) = &key_tfm->key_tfm_mutex;
1739out:
1740 mutex_unlock(&key_tfm_list_mutex);
1741 return rc;
1742}
1743
1744
1745static unsigned char *portable_filename_chars = ("-.0123456789ABCD"
1746 "EFGHIJKLMNOPQRST"
1747 "UVWXYZabcdefghij"
1748 "klmnopqrstuvwxyz");
1749
1750
1751
1752static const unsigned char filename_rev_map[256] = {
1753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1754 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1755 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1759 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
1760 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1761 0x00, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
1762 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
1763 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
1764 0x23, 0x24, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
1765 0x00, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
1766 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
1767 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
1768 0x3D, 0x3E, 0x3F
1769};
1770
1771
1772
1773
1774
1775
1776
1777
1778static void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size,
1779 unsigned char *src, size_t src_size)
1780{
1781 size_t num_blocks;
1782 size_t block_num = 0;
1783 size_t dst_offset = 0;
1784 unsigned char last_block[3];
1785
1786 if (src_size == 0) {
1787 (*dst_size) = 0;
1788 goto out;
1789 }
1790 num_blocks = (src_size / 3);
1791 if ((src_size % 3) == 0) {
1792 memcpy(last_block, (&src[src_size - 3]), 3);
1793 } else {
1794 num_blocks++;
1795 last_block[2] = 0x00;
1796 switch (src_size % 3) {
1797 case 1:
1798 last_block[0] = src[src_size - 1];
1799 last_block[1] = 0x00;
1800 break;
1801 case 2:
1802 last_block[0] = src[src_size - 2];
1803 last_block[1] = src[src_size - 1];
1804 }
1805 }
1806 (*dst_size) = (num_blocks * 4);
1807 if (!dst)
1808 goto out;
1809 while (block_num < num_blocks) {
1810 unsigned char *src_block;
1811 unsigned char dst_block[4];
1812
1813 if (block_num == (num_blocks - 1))
1814 src_block = last_block;
1815 else
1816 src_block = &src[block_num * 3];
1817 dst_block[0] = ((src_block[0] >> 2) & 0x3F);
1818 dst_block[1] = (((src_block[0] << 4) & 0x30)
1819 | ((src_block[1] >> 4) & 0x0F));
1820 dst_block[2] = (((src_block[1] << 2) & 0x3C)
1821 | ((src_block[2] >> 6) & 0x03));
1822 dst_block[3] = (src_block[2] & 0x3F);
1823 dst[dst_offset++] = portable_filename_chars[dst_block[0]];
1824 dst[dst_offset++] = portable_filename_chars[dst_block[1]];
1825 dst[dst_offset++] = portable_filename_chars[dst_block[2]];
1826 dst[dst_offset++] = portable_filename_chars[dst_block[3]];
1827 block_num++;
1828 }
1829out:
1830 return;
1831}
1832
1833static size_t ecryptfs_max_decoded_size(size_t encoded_size)
1834{
1835
1836
1837
1838
1839
1840
1841 return ((encoded_size + 1) * 3) / 4;
1842}
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853static void
1854ecryptfs_decode_from_filename(unsigned char *dst, size_t *dst_size,
1855 const unsigned char *src, size_t src_size)
1856{
1857 u8 current_bit_offset = 0;
1858 size_t src_byte_offset = 0;
1859 size_t dst_byte_offset = 0;
1860
1861 if (!dst) {
1862 (*dst_size) = ecryptfs_max_decoded_size(src_size);
1863 goto out;
1864 }
1865 while (src_byte_offset < src_size) {
1866 unsigned char src_byte =
1867 filename_rev_map[(int)src[src_byte_offset]];
1868
1869 switch (current_bit_offset) {
1870 case 0:
1871 dst[dst_byte_offset] = (src_byte << 2);
1872 current_bit_offset = 6;
1873 break;
1874 case 6:
1875 dst[dst_byte_offset++] |= (src_byte >> 4);
1876 dst[dst_byte_offset] = ((src_byte & 0xF)
1877 << 4);
1878 current_bit_offset = 4;
1879 break;
1880 case 4:
1881 dst[dst_byte_offset++] |= (src_byte >> 2);
1882 dst[dst_byte_offset] = (src_byte << 6);
1883 current_bit_offset = 2;
1884 break;
1885 case 2:
1886 dst[dst_byte_offset++] |= (src_byte);
1887 current_bit_offset = 0;
1888 break;
1889 }
1890 src_byte_offset++;
1891 }
1892 (*dst_size) = dst_byte_offset;
1893out:
1894 return;
1895}
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912int ecryptfs_encrypt_and_encode_filename(
1913 char **encoded_name,
1914 size_t *encoded_name_size,
1915 struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
1916 const char *name, size_t name_size)
1917{
1918 size_t encoded_name_no_prefix_size;
1919 int rc = 0;
1920
1921 (*encoded_name) = NULL;
1922 (*encoded_name_size) = 0;
1923 if (mount_crypt_stat && (mount_crypt_stat->flags
1924 & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)) {
1925 struct ecryptfs_filename *filename;
1926
1927 filename = kzalloc(sizeof(*filename), GFP_KERNEL);
1928 if (!filename) {
1929 rc = -ENOMEM;
1930 goto out;
1931 }
1932 filename->filename = (char *)name;
1933 filename->filename_size = name_size;
1934 rc = ecryptfs_encrypt_filename(filename, mount_crypt_stat);
1935 if (rc) {
1936 printk(KERN_ERR "%s: Error attempting to encrypt "
1937 "filename; rc = [%d]\n", __func__, rc);
1938 kfree(filename);
1939 goto out;
1940 }
1941 ecryptfs_encode_for_filename(
1942 NULL, &encoded_name_no_prefix_size,
1943 filename->encrypted_filename,
1944 filename->encrypted_filename_size);
1945 if (mount_crypt_stat
1946 && (mount_crypt_stat->flags
1947 & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK))
1948 (*encoded_name_size) =
1949 (ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
1950 + encoded_name_no_prefix_size);
1951 else
1952 (*encoded_name_size) =
1953 (ECRYPTFS_FEK_ENCRYPTED_FILENAME_PREFIX_SIZE
1954 + encoded_name_no_prefix_size);
1955 (*encoded_name) = kmalloc((*encoded_name_size) + 1, GFP_KERNEL);
1956 if (!(*encoded_name)) {
1957 rc = -ENOMEM;
1958 kfree(filename->encrypted_filename);
1959 kfree(filename);
1960 goto out;
1961 }
1962 if (mount_crypt_stat
1963 && (mount_crypt_stat->flags
1964 & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)) {
1965 memcpy((*encoded_name),
1966 ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
1967 ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE);
1968 ecryptfs_encode_for_filename(
1969 ((*encoded_name)
1970 + ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE),
1971 &encoded_name_no_prefix_size,
1972 filename->encrypted_filename,
1973 filename->encrypted_filename_size);
1974 (*encoded_name_size) =
1975 (ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
1976 + encoded_name_no_prefix_size);
1977 (*encoded_name)[(*encoded_name_size)] = '\0';
1978 } else {
1979 rc = -EOPNOTSUPP;
1980 }
1981 if (rc) {
1982 printk(KERN_ERR "%s: Error attempting to encode "
1983 "encrypted filename; rc = [%d]\n", __func__,
1984 rc);
1985 kfree((*encoded_name));
1986 (*encoded_name) = NULL;
1987 (*encoded_name_size) = 0;
1988 }
1989 kfree(filename->encrypted_filename);
1990 kfree(filename);
1991 } else {
1992 rc = ecryptfs_copy_filename(encoded_name,
1993 encoded_name_size,
1994 name, name_size);
1995 }
1996out:
1997 return rc;
1998}
1999
2000static bool is_dot_dotdot(const char *name, size_t name_size)
2001{
2002 if (name_size == 1 && name[0] == '.')
2003 return true;
2004 else if (name_size == 2 && name[0] == '.' && name[1] == '.')
2005 return true;
2006
2007 return false;
2008}
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022int ecryptfs_decode_and_decrypt_filename(char **plaintext_name,
2023 size_t *plaintext_name_size,
2024 struct super_block *sb,
2025 const char *name, size_t name_size)
2026{
2027 struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
2028 &ecryptfs_superblock_to_private(sb)->mount_crypt_stat;
2029 char *decoded_name;
2030 size_t decoded_name_size;
2031 size_t packet_size;
2032 int rc = 0;
2033
2034 if ((mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) &&
2035 !(mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)) {
2036 if (is_dot_dotdot(name, name_size)) {
2037 rc = ecryptfs_copy_filename(plaintext_name,
2038 plaintext_name_size,
2039 name, name_size);
2040 goto out;
2041 }
2042
2043 if (name_size <= ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE ||
2044 strncmp(name, ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
2045 ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE)) {
2046 rc = -EINVAL;
2047 goto out;
2048 }
2049
2050 name += ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE;
2051 name_size -= ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE;
2052 ecryptfs_decode_from_filename(NULL, &decoded_name_size,
2053 name, name_size);
2054 decoded_name = kmalloc(decoded_name_size, GFP_KERNEL);
2055 if (!decoded_name) {
2056 rc = -ENOMEM;
2057 goto out;
2058 }
2059 ecryptfs_decode_from_filename(decoded_name, &decoded_name_size,
2060 name, name_size);
2061 rc = ecryptfs_parse_tag_70_packet(plaintext_name,
2062 plaintext_name_size,
2063 &packet_size,
2064 mount_crypt_stat,
2065 decoded_name,
2066 decoded_name_size);
2067 if (rc) {
2068 ecryptfs_printk(KERN_DEBUG,
2069 "%s: Could not parse tag 70 packet from filename\n",
2070 __func__);
2071 goto out_free;
2072 }
2073 } else {
2074 rc = ecryptfs_copy_filename(plaintext_name,
2075 plaintext_name_size,
2076 name, name_size);
2077 goto out;
2078 }
2079out_free:
2080 kfree(decoded_name);
2081out:
2082 return rc;
2083}
2084
2085#define ENC_NAME_MAX_BLOCKLEN_8_OR_16 143
2086
2087int ecryptfs_set_f_namelen(long *namelen, long lower_namelen,
2088 struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
2089{
2090 struct crypto_skcipher *tfm;
2091 struct mutex *tfm_mutex;
2092 size_t cipher_blocksize;
2093 int rc;
2094
2095 if (!(mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)) {
2096 (*namelen) = lower_namelen;
2097 return 0;
2098 }
2099
2100 rc = ecryptfs_get_tfm_and_mutex_for_cipher_name(&tfm, &tfm_mutex,
2101 mount_crypt_stat->global_default_fn_cipher_name);
2102 if (unlikely(rc)) {
2103 (*namelen) = 0;
2104 return rc;
2105 }
2106
2107 mutex_lock(tfm_mutex);
2108 cipher_blocksize = crypto_skcipher_blocksize(tfm);
2109 mutex_unlock(tfm_mutex);
2110
2111
2112 if (lower_namelen == NAME_MAX
2113 && (cipher_blocksize == 8 || cipher_blocksize == 16)) {
2114 (*namelen) = ENC_NAME_MAX_BLOCKLEN_8_OR_16;
2115 return 0;
2116 }
2117
2118
2119 (*namelen) = lower_namelen;
2120 (*namelen) -= ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE;
2121
2122 (*namelen) = ecryptfs_max_decoded_size(*namelen) - 3;
2123 (*namelen) -= ECRYPTFS_TAG_70_MAX_METADATA_SIZE;
2124 (*namelen) -= ECRYPTFS_FILENAME_MIN_RANDOM_PREPEND_BYTES;
2125
2126 (*namelen) -= cipher_blocksize - 1;
2127
2128 if ((*namelen) < 0)
2129 (*namelen) = 0;
2130
2131 return 0;
2132}
2133