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