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