Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/fs/ecryptfs/crypto.c
15109 views
1
/**
2
* eCryptfs: Linux filesystem encryption layer
3
*
4
* Copyright (C) 1997-2004 Erez Zadok
5
* Copyright (C) 2001-2004 Stony Brook University
6
* Copyright (C) 2004-2007 International Business Machines Corp.
7
* Author(s): Michael A. Halcrow <[email protected]>
8
* Michael C. Thompson <[email protected]>
9
*
10
* This program is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU General Public License as
12
* published by the Free Software Foundation; either version 2 of the
13
* License, or (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful, but
16
* WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
* General Public License for more details.
19
*
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23
* 02111-1307, USA.
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 <linux/slab.h>
37
#include <asm/unaligned.h>
38
#include "ecryptfs_kernel.h"
39
40
static int
41
ecryptfs_decrypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
42
struct page *dst_page, int dst_offset,
43
struct page *src_page, int src_offset, int size,
44
unsigned char *iv);
45
static int
46
ecryptfs_encrypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
47
struct page *dst_page, int dst_offset,
48
struct page *src_page, int src_offset, int size,
49
unsigned char *iv);
50
51
/**
52
* ecryptfs_to_hex
53
* @dst: Buffer to take hex character representation of contents of
54
* src; must be at least of size (src_size * 2)
55
* @src: Buffer to be converted to a hex string respresentation
56
* @src_size: number of bytes to convert
57
*/
58
void ecryptfs_to_hex(char *dst, char *src, size_t src_size)
59
{
60
int x;
61
62
for (x = 0; x < src_size; x++)
63
sprintf(&dst[x * 2], "%.2x", (unsigned char)src[x]);
64
}
65
66
/**
67
* ecryptfs_from_hex
68
* @dst: Buffer to take the bytes from src hex; must be at least of
69
* size (src_size / 2)
70
* @src: Buffer to be converted from a hex string respresentation to raw value
71
* @dst_size: size of dst buffer, or number of hex characters pairs to convert
72
*/
73
void ecryptfs_from_hex(char *dst, char *src, int dst_size)
74
{
75
int x;
76
char tmp[3] = { 0, };
77
78
for (x = 0; x < dst_size; x++) {
79
tmp[0] = src[x * 2];
80
tmp[1] = src[x * 2 + 1];
81
dst[x] = (unsigned char)simple_strtol(tmp, NULL, 16);
82
}
83
}
84
85
/**
86
* ecryptfs_calculate_md5 - calculates the md5 of @src
87
* @dst: Pointer to 16 bytes of allocated memory
88
* @crypt_stat: Pointer to crypt_stat struct for the current inode
89
* @src: Data to be md5'd
90
* @len: Length of @src
91
*
92
* Uses the allocated crypto context that crypt_stat references to
93
* generate the MD5 sum of the contents of src.
94
*/
95
static int ecryptfs_calculate_md5(char *dst,
96
struct ecryptfs_crypt_stat *crypt_stat,
97
char *src, int len)
98
{
99
struct scatterlist sg;
100
struct hash_desc desc = {
101
.tfm = crypt_stat->hash_tfm,
102
.flags = CRYPTO_TFM_REQ_MAY_SLEEP
103
};
104
int rc = 0;
105
106
mutex_lock(&crypt_stat->cs_hash_tfm_mutex);
107
sg_init_one(&sg, (u8 *)src, len);
108
if (!desc.tfm) {
109
desc.tfm = crypto_alloc_hash(ECRYPTFS_DEFAULT_HASH, 0,
110
CRYPTO_ALG_ASYNC);
111
if (IS_ERR(desc.tfm)) {
112
rc = PTR_ERR(desc.tfm);
113
ecryptfs_printk(KERN_ERR, "Error attempting to "
114
"allocate crypto context; rc = [%d]\n",
115
rc);
116
goto out;
117
}
118
crypt_stat->hash_tfm = desc.tfm;
119
}
120
rc = crypto_hash_init(&desc);
121
if (rc) {
122
printk(KERN_ERR
123
"%s: Error initializing crypto hash; rc = [%d]\n",
124
__func__, rc);
125
goto out;
126
}
127
rc = crypto_hash_update(&desc, &sg, len);
128
if (rc) {
129
printk(KERN_ERR
130
"%s: Error updating crypto hash; rc = [%d]\n",
131
__func__, rc);
132
goto out;
133
}
134
rc = crypto_hash_final(&desc, dst);
135
if (rc) {
136
printk(KERN_ERR
137
"%s: Error finalizing crypto hash; rc = [%d]\n",
138
__func__, rc);
139
goto out;
140
}
141
out:
142
mutex_unlock(&crypt_stat->cs_hash_tfm_mutex);
143
return rc;
144
}
145
146
static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name,
147
char *cipher_name,
148
char *chaining_modifier)
149
{
150
int cipher_name_len = strlen(cipher_name);
151
int chaining_modifier_len = strlen(chaining_modifier);
152
int algified_name_len;
153
int rc;
154
155
algified_name_len = (chaining_modifier_len + cipher_name_len + 3);
156
(*algified_name) = kmalloc(algified_name_len, GFP_KERNEL);
157
if (!(*algified_name)) {
158
rc = -ENOMEM;
159
goto out;
160
}
161
snprintf((*algified_name), algified_name_len, "%s(%s)",
162
chaining_modifier, cipher_name);
163
rc = 0;
164
out:
165
return rc;
166
}
167
168
/**
169
* ecryptfs_derive_iv
170
* @iv: destination for the derived iv vale
171
* @crypt_stat: Pointer to crypt_stat struct for the current inode
172
* @offset: Offset of the extent whose IV we are to derive
173
*
174
* Generate the initialization vector from the given root IV and page
175
* offset.
176
*
177
* Returns zero on success; non-zero on error.
178
*/
179
int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
180
loff_t offset)
181
{
182
int rc = 0;
183
char dst[MD5_DIGEST_SIZE];
184
char src[ECRYPTFS_MAX_IV_BYTES + 16];
185
186
if (unlikely(ecryptfs_verbosity > 0)) {
187
ecryptfs_printk(KERN_DEBUG, "root iv:\n");
188
ecryptfs_dump_hex(crypt_stat->root_iv, crypt_stat->iv_bytes);
189
}
190
/* TODO: It is probably secure to just cast the least
191
* significant bits of the root IV into an unsigned long and
192
* add the offset to that rather than go through all this
193
* hashing business. -Halcrow */
194
memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes);
195
memset((src + crypt_stat->iv_bytes), 0, 16);
196
snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
197
if (unlikely(ecryptfs_verbosity > 0)) {
198
ecryptfs_printk(KERN_DEBUG, "source:\n");
199
ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));
200
}
201
rc = ecryptfs_calculate_md5(dst, crypt_stat, src,
202
(crypt_stat->iv_bytes + 16));
203
if (rc) {
204
ecryptfs_printk(KERN_WARNING, "Error attempting to compute "
205
"MD5 while generating IV for a page\n");
206
goto out;
207
}
208
memcpy(iv, dst, crypt_stat->iv_bytes);
209
if (unlikely(ecryptfs_verbosity > 0)) {
210
ecryptfs_printk(KERN_DEBUG, "derived iv:\n");
211
ecryptfs_dump_hex(iv, crypt_stat->iv_bytes);
212
}
213
out:
214
return rc;
215
}
216
217
/**
218
* ecryptfs_init_crypt_stat
219
* @crypt_stat: Pointer to the crypt_stat struct to initialize.
220
*
221
* Initialize the crypt_stat structure.
222
*/
223
void
224
ecryptfs_init_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
225
{
226
memset((void *)crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
227
INIT_LIST_HEAD(&crypt_stat->keysig_list);
228
mutex_init(&crypt_stat->keysig_list_mutex);
229
mutex_init(&crypt_stat->cs_mutex);
230
mutex_init(&crypt_stat->cs_tfm_mutex);
231
mutex_init(&crypt_stat->cs_hash_tfm_mutex);
232
crypt_stat->flags |= ECRYPTFS_STRUCT_INITIALIZED;
233
}
234
235
/**
236
* ecryptfs_destroy_crypt_stat
237
* @crypt_stat: Pointer to the crypt_stat struct to initialize.
238
*
239
* Releases all memory associated with a crypt_stat struct.
240
*/
241
void ecryptfs_destroy_crypt_stat(struct ecryptfs_crypt_stat *crypt_stat)
242
{
243
struct ecryptfs_key_sig *key_sig, *key_sig_tmp;
244
245
if (crypt_stat->tfm)
246
crypto_free_blkcipher(crypt_stat->tfm);
247
if (crypt_stat->hash_tfm)
248
crypto_free_hash(crypt_stat->hash_tfm);
249
list_for_each_entry_safe(key_sig, key_sig_tmp,
250
&crypt_stat->keysig_list, crypt_stat_list) {
251
list_del(&key_sig->crypt_stat_list);
252
kmem_cache_free(ecryptfs_key_sig_cache, key_sig);
253
}
254
memset(crypt_stat, 0, sizeof(struct ecryptfs_crypt_stat));
255
}
256
257
void 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
if (auth_tok->global_auth_tok_key
270
&& !(auth_tok->flags & ECRYPTFS_AUTH_TOK_INVALID))
271
key_put(auth_tok->global_auth_tok_key);
272
kmem_cache_free(ecryptfs_global_auth_tok_cache, auth_tok);
273
}
274
mutex_unlock(&mount_crypt_stat->global_auth_tok_list_mutex);
275
memset(mount_crypt_stat, 0, sizeof(struct ecryptfs_mount_crypt_stat));
276
}
277
278
/**
279
* virt_to_scatterlist
280
* @addr: Virtual address
281
* @size: Size of data; should be an even multiple of the block size
282
* @sg: Pointer to scatterlist array; set to NULL to obtain only
283
* the number of scatterlist structs required in array
284
* @sg_size: Max array size
285
*
286
* Fills in a scatterlist array with page references for a passed
287
* virtual address.
288
*
289
* Returns the number of scatterlist structs in array used
290
*/
291
int virt_to_scatterlist(const void *addr, int size, struct scatterlist *sg,
292
int sg_size)
293
{
294
int i = 0;
295
struct page *pg;
296
int offset;
297
int remainder_of_page;
298
299
sg_init_table(sg, sg_size);
300
301
while (size > 0 && i < sg_size) {
302
pg = virt_to_page(addr);
303
offset = offset_in_page(addr);
304
if (sg)
305
sg_set_page(&sg[i], pg, 0, offset);
306
remainder_of_page = PAGE_CACHE_SIZE - offset;
307
if (size >= remainder_of_page) {
308
if (sg)
309
sg[i].length = remainder_of_page;
310
addr += remainder_of_page;
311
size -= remainder_of_page;
312
} else {
313
if (sg)
314
sg[i].length = size;
315
addr += size;
316
size = 0;
317
}
318
i++;
319
}
320
if (size > 0)
321
return -ENOMEM;
322
return i;
323
}
324
325
/**
326
* encrypt_scatterlist
327
* @crypt_stat: Pointer to the crypt_stat struct to initialize.
328
* @dest_sg: Destination of encrypted data
329
* @src_sg: Data to be encrypted
330
* @size: Length of data to be encrypted
331
* @iv: iv to use during encryption
332
*
333
* Returns the number of bytes encrypted; negative value on error
334
*/
335
static int encrypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
336
struct scatterlist *dest_sg,
337
struct scatterlist *src_sg, int size,
338
unsigned char *iv)
339
{
340
struct blkcipher_desc desc = {
341
.tfm = crypt_stat->tfm,
342
.info = iv,
343
.flags = CRYPTO_TFM_REQ_MAY_SLEEP
344
};
345
int rc = 0;
346
347
BUG_ON(!crypt_stat || !crypt_stat->tfm
348
|| !(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED));
349
if (unlikely(ecryptfs_verbosity > 0)) {
350
ecryptfs_printk(KERN_DEBUG, "Key size [%zd]; key:\n",
351
crypt_stat->key_size);
352
ecryptfs_dump_hex(crypt_stat->key,
353
crypt_stat->key_size);
354
}
355
/* Consider doing this once, when the file is opened */
356
mutex_lock(&crypt_stat->cs_tfm_mutex);
357
if (!(crypt_stat->flags & ECRYPTFS_KEY_SET)) {
358
rc = crypto_blkcipher_setkey(crypt_stat->tfm, crypt_stat->key,
359
crypt_stat->key_size);
360
crypt_stat->flags |= ECRYPTFS_KEY_SET;
361
}
362
if (rc) {
363
ecryptfs_printk(KERN_ERR, "Error setting key; rc = [%d]\n",
364
rc);
365
mutex_unlock(&crypt_stat->cs_tfm_mutex);
366
rc = -EINVAL;
367
goto out;
368
}
369
ecryptfs_printk(KERN_DEBUG, "Encrypting [%d] bytes.\n", size);
370
crypto_blkcipher_encrypt_iv(&desc, dest_sg, src_sg, size);
371
mutex_unlock(&crypt_stat->cs_tfm_mutex);
372
out:
373
return rc;
374
}
375
376
/**
377
* ecryptfs_lower_offset_for_extent
378
*
379
* Convert an eCryptfs page index into a lower byte offset
380
*/
381
static void ecryptfs_lower_offset_for_extent(loff_t *offset, loff_t extent_num,
382
struct ecryptfs_crypt_stat *crypt_stat)
383
{
384
(*offset) = ecryptfs_lower_header_size(crypt_stat)
385
+ (crypt_stat->extent_size * extent_num);
386
}
387
388
/**
389
* ecryptfs_encrypt_extent
390
* @enc_extent_page: Allocated page into which to encrypt the data in
391
* @page
392
* @crypt_stat: crypt_stat containing cryptographic context for the
393
* encryption operation
394
* @page: Page containing plaintext data extent to encrypt
395
* @extent_offset: Page extent offset for use in generating IV
396
*
397
* Encrypts one extent of data.
398
*
399
* Return zero on success; non-zero otherwise
400
*/
401
static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
402
struct ecryptfs_crypt_stat *crypt_stat,
403
struct page *page,
404
unsigned long extent_offset)
405
{
406
loff_t extent_base;
407
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
408
int rc;
409
410
extent_base = (((loff_t)page->index)
411
* (PAGE_CACHE_SIZE / crypt_stat->extent_size));
412
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
413
(extent_base + extent_offset));
414
if (rc) {
415
ecryptfs_printk(KERN_ERR, "Error attempting to derive IV for "
416
"extent [0x%.16llx]; rc = [%d]\n",
417
(unsigned long long)(extent_base + extent_offset), 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", __func__, 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%.16llx]; "
445
"rc = [%d]\n",
446
(unsigned long long)(extent_base + extent_offset), 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
}
451
out:
452
return rc;
453
}
454
455
/**
456
* ecryptfs_encrypt_page
457
* @page: Page mapped from the eCryptfs inode for the file; contains
458
* decrypted content that needs to be encrypted (to a temporary
459
* page; not in place) and written out to the lower file
460
*
461
* Encrypt an eCryptfs page. This is done on a per-extent basis. Note
462
* that eCryptfs pages may straddle the lower pages -- for instance,
463
* if the file was created on a machine with an 8K page size
464
* (resulting in an 8K header), and then the file is copied onto a
465
* host with a 32K page size, then when reading page 0 of the eCryptfs
466
* file, 24K of page 0 of the lower file will be read and decrypted,
467
* and then 8K of page 1 of the lower file will be read and decrypted.
468
*
469
* Returns zero on success; negative on error
470
*/
471
int ecryptfs_encrypt_page(struct page *page)
472
{
473
struct inode *ecryptfs_inode;
474
struct ecryptfs_crypt_stat *crypt_stat;
475
char *enc_extent_virt;
476
struct page *enc_extent_page = NULL;
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
BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
484
enc_extent_page = alloc_page(GFP_USER);
485
if (!enc_extent_page) {
486
rc = -ENOMEM;
487
ecryptfs_printk(KERN_ERR, "Error allocating memory for "
488
"encrypted extent\n");
489
goto out;
490
}
491
enc_extent_virt = kmap(enc_extent_page);
492
for (extent_offset = 0;
493
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
494
extent_offset++) {
495
loff_t offset;
496
497
rc = ecryptfs_encrypt_extent(enc_extent_page, crypt_stat, page,
498
extent_offset);
499
if (rc) {
500
printk(KERN_ERR "%s: Error encrypting extent; "
501
"rc = [%d]\n", __func__, rc);
502
goto out;
503
}
504
ecryptfs_lower_offset_for_extent(
505
&offset, ((((loff_t)page->index)
506
* (PAGE_CACHE_SIZE
507
/ crypt_stat->extent_size))
508
+ extent_offset), crypt_stat);
509
rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt,
510
offset, crypt_stat->extent_size);
511
if (rc < 0) {
512
ecryptfs_printk(KERN_ERR, "Error attempting "
513
"to write lower page; rc = [%d]"
514
"\n", rc);
515
goto out;
516
}
517
}
518
rc = 0;
519
out:
520
if (enc_extent_page) {
521
kunmap(enc_extent_page);
522
__free_page(enc_extent_page);
523
}
524
return rc;
525
}
526
527
static int ecryptfs_decrypt_extent(struct page *page,
528
struct ecryptfs_crypt_stat *crypt_stat,
529
struct page *enc_extent_page,
530
unsigned long extent_offset)
531
{
532
loff_t extent_base;
533
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
534
int rc;
535
536
extent_base = (((loff_t)page->index)
537
* (PAGE_CACHE_SIZE / crypt_stat->extent_size));
538
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
539
(extent_base + extent_offset));
540
if (rc) {
541
ecryptfs_printk(KERN_ERR, "Error attempting to derive IV for "
542
"extent [0x%.16llx]; rc = [%d]\n",
543
(unsigned long long)(extent_base + extent_offset), rc);
544
goto out;
545
}
546
if (unlikely(ecryptfs_verbosity > 0)) {
547
ecryptfs_printk(KERN_DEBUG, "Decrypting extent "
548
"with iv:\n");
549
ecryptfs_dump_hex(extent_iv, crypt_stat->iv_bytes);
550
ecryptfs_printk(KERN_DEBUG, "First 8 bytes before "
551
"decryption:\n");
552
ecryptfs_dump_hex((char *)
553
(page_address(enc_extent_page)
554
+ (extent_offset * crypt_stat->extent_size)),
555
8);
556
}
557
rc = ecryptfs_decrypt_page_offset(crypt_stat, page,
558
(extent_offset
559
* crypt_stat->extent_size),
560
enc_extent_page, 0,
561
crypt_stat->extent_size, extent_iv);
562
if (rc < 0) {
563
printk(KERN_ERR "%s: Error attempting to decrypt to page with "
564
"page->index = [%ld], extent_offset = [%ld]; "
565
"rc = [%d]\n", __func__, page->index, extent_offset,
566
rc);
567
goto out;
568
}
569
rc = 0;
570
if (unlikely(ecryptfs_verbosity > 0)) {
571
ecryptfs_printk(KERN_DEBUG, "Decrypt extent [0x%.16llx]; "
572
"rc = [%d]\n",
573
(unsigned long long)(extent_base + extent_offset), rc);
574
ecryptfs_printk(KERN_DEBUG, "First 8 bytes after "
575
"decryption:\n");
576
ecryptfs_dump_hex((char *)(page_address(page)
577
+ (extent_offset
578
* crypt_stat->extent_size)), 8);
579
}
580
out:
581
return rc;
582
}
583
584
/**
585
* ecryptfs_decrypt_page
586
* @page: Page mapped from the eCryptfs inode for the file; data read
587
* and decrypted from the lower file will be written into this
588
* page
589
*
590
* Decrypt an eCryptfs page. This is done on a per-extent basis. Note
591
* that eCryptfs pages may straddle the lower pages -- for instance,
592
* if the file was created on a machine with an 8K page size
593
* (resulting in an 8K header), and then the file is copied onto a
594
* host with a 32K page size, then when reading page 0 of the eCryptfs
595
* file, 24K of page 0 of the lower file will be read and decrypted,
596
* and then 8K of page 1 of the lower file will be read and decrypted.
597
*
598
* Returns zero on success; negative on error
599
*/
600
int ecryptfs_decrypt_page(struct page *page)
601
{
602
struct inode *ecryptfs_inode;
603
struct ecryptfs_crypt_stat *crypt_stat;
604
char *enc_extent_virt;
605
struct page *enc_extent_page = NULL;
606
unsigned long extent_offset;
607
int rc = 0;
608
609
ecryptfs_inode = page->mapping->host;
610
crypt_stat =
611
&(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat);
612
BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED));
613
enc_extent_page = alloc_page(GFP_USER);
614
if (!enc_extent_page) {
615
rc = -ENOMEM;
616
ecryptfs_printk(KERN_ERR, "Error allocating memory for "
617
"encrypted extent\n");
618
goto out;
619
}
620
enc_extent_virt = kmap(enc_extent_page);
621
for (extent_offset = 0;
622
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
623
extent_offset++) {
624
loff_t offset;
625
626
ecryptfs_lower_offset_for_extent(
627
&offset, ((page->index * (PAGE_CACHE_SIZE
628
/ crypt_stat->extent_size))
629
+ extent_offset), crypt_stat);
630
rc = ecryptfs_read_lower(enc_extent_virt, offset,
631
crypt_stat->extent_size,
632
ecryptfs_inode);
633
if (rc < 0) {
634
ecryptfs_printk(KERN_ERR, "Error attempting "
635
"to read lower page; rc = [%d]"
636
"\n", rc);
637
goto out;
638
}
639
rc = ecryptfs_decrypt_extent(page, crypt_stat, enc_extent_page,
640
extent_offset);
641
if (rc) {
642
printk(KERN_ERR "%s: Error encrypting extent; "
643
"rc = [%d]\n", __func__, rc);
644
goto out;
645
}
646
}
647
out:
648
if (enc_extent_page) {
649
kunmap(enc_extent_page);
650
__free_page(enc_extent_page);
651
}
652
return rc;
653
}
654
655
/**
656
* decrypt_scatterlist
657
* @crypt_stat: Cryptographic context
658
* @dest_sg: The destination scatterlist to decrypt into
659
* @src_sg: The source scatterlist to decrypt from
660
* @size: The number of bytes to decrypt
661
* @iv: The initialization vector to use for the decryption
662
*
663
* Returns the number of bytes decrypted; negative value on error
664
*/
665
static int decrypt_scatterlist(struct ecryptfs_crypt_stat *crypt_stat,
666
struct scatterlist *dest_sg,
667
struct scatterlist *src_sg, int size,
668
unsigned char *iv)
669
{
670
struct blkcipher_desc desc = {
671
.tfm = crypt_stat->tfm,
672
.info = iv,
673
.flags = CRYPTO_TFM_REQ_MAY_SLEEP
674
};
675
int rc = 0;
676
677
/* Consider doing this once, when the file is opened */
678
mutex_lock(&crypt_stat->cs_tfm_mutex);
679
rc = crypto_blkcipher_setkey(crypt_stat->tfm, crypt_stat->key,
680
crypt_stat->key_size);
681
if (rc) {
682
ecryptfs_printk(KERN_ERR, "Error setting key; rc = [%d]\n",
683
rc);
684
mutex_unlock(&crypt_stat->cs_tfm_mutex);
685
rc = -EINVAL;
686
goto out;
687
}
688
ecryptfs_printk(KERN_DEBUG, "Decrypting [%d] bytes.\n", size);
689
rc = crypto_blkcipher_decrypt_iv(&desc, dest_sg, src_sg, size);
690
mutex_unlock(&crypt_stat->cs_tfm_mutex);
691
if (rc) {
692
ecryptfs_printk(KERN_ERR, "Error decrypting; rc = [%d]\n",
693
rc);
694
goto out;
695
}
696
rc = size;
697
out:
698
return rc;
699
}
700
701
/**
702
* ecryptfs_encrypt_page_offset
703
* @crypt_stat: The cryptographic context
704
* @dst_page: The page to encrypt into
705
* @dst_offset: The offset in the page to encrypt into
706
* @src_page: The page to encrypt from
707
* @src_offset: The offset in the page to encrypt from
708
* @size: The number of bytes to encrypt
709
* @iv: The initialization vector to use for the encryption
710
*
711
* Returns the number of bytes encrypted
712
*/
713
static int
714
ecryptfs_encrypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
715
struct page *dst_page, int dst_offset,
716
struct page *src_page, int src_offset, int size,
717
unsigned char *iv)
718
{
719
struct scatterlist src_sg, dst_sg;
720
721
sg_init_table(&src_sg, 1);
722
sg_init_table(&dst_sg, 1);
723
724
sg_set_page(&src_sg, src_page, size, src_offset);
725
sg_set_page(&dst_sg, dst_page, size, dst_offset);
726
return encrypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv);
727
}
728
729
/**
730
* ecryptfs_decrypt_page_offset
731
* @crypt_stat: The cryptographic context
732
* @dst_page: The page to decrypt into
733
* @dst_offset: The offset in the page to decrypt into
734
* @src_page: The page to decrypt from
735
* @src_offset: The offset in the page to decrypt from
736
* @size: The number of bytes to decrypt
737
* @iv: The initialization vector to use for the decryption
738
*
739
* Returns the number of bytes decrypted
740
*/
741
static int
742
ecryptfs_decrypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
743
struct page *dst_page, int dst_offset,
744
struct page *src_page, int src_offset, int size,
745
unsigned char *iv)
746
{
747
struct scatterlist src_sg, dst_sg;
748
749
sg_init_table(&src_sg, 1);
750
sg_set_page(&src_sg, src_page, size, src_offset);
751
752
sg_init_table(&dst_sg, 1);
753
sg_set_page(&dst_sg, dst_page, size, dst_offset);
754
755
return decrypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv);
756
}
757
758
#define ECRYPTFS_MAX_SCATTERLIST_LEN 4
759
760
/**
761
* ecryptfs_init_crypt_ctx
762
* @crypt_stat: Uninitialized crypt stats structure
763
*
764
* Initialize the crypto context.
765
*
766
* TODO: Performance: Keep a cache of initialized cipher contexts;
767
* only init if needed
768
*/
769
int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
770
{
771
char *full_alg_name;
772
int rc = -EINVAL;
773
774
if (!crypt_stat->cipher) {
775
ecryptfs_printk(KERN_ERR, "No cipher specified\n");
776
goto out;
777
}
778
ecryptfs_printk(KERN_DEBUG,
779
"Initializing cipher [%s]; strlen = [%d]; "
780
"key_size_bits = [%zd]\n",
781
crypt_stat->cipher, (int)strlen(crypt_stat->cipher),
782
crypt_stat->key_size << 3);
783
if (crypt_stat->tfm) {
784
rc = 0;
785
goto out;
786
}
787
mutex_lock(&crypt_stat->cs_tfm_mutex);
788
rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name,
789
crypt_stat->cipher, "cbc");
790
if (rc)
791
goto out_unlock;
792
crypt_stat->tfm = crypto_alloc_blkcipher(full_alg_name, 0,
793
CRYPTO_ALG_ASYNC);
794
kfree(full_alg_name);
795
if (IS_ERR(crypt_stat->tfm)) {
796
rc = PTR_ERR(crypt_stat->tfm);
797
crypt_stat->tfm = NULL;
798
ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
799
"Error initializing cipher [%s]\n",
800
crypt_stat->cipher);
801
goto out_unlock;
802
}
803
crypto_blkcipher_set_flags(crypt_stat->tfm, CRYPTO_TFM_REQ_WEAK_KEY);
804
rc = 0;
805
out_unlock:
806
mutex_unlock(&crypt_stat->cs_tfm_mutex);
807
out:
808
return rc;
809
}
810
811
static void set_extent_mask_and_shift(struct ecryptfs_crypt_stat *crypt_stat)
812
{
813
int extent_size_tmp;
814
815
crypt_stat->extent_mask = 0xFFFFFFFF;
816
crypt_stat->extent_shift = 0;
817
if (crypt_stat->extent_size == 0)
818
return;
819
extent_size_tmp = crypt_stat->extent_size;
820
while ((extent_size_tmp & 0x01) == 0) {
821
extent_size_tmp >>= 1;
822
crypt_stat->extent_mask <<= 1;
823
crypt_stat->extent_shift++;
824
}
825
}
826
827
void ecryptfs_set_default_sizes(struct ecryptfs_crypt_stat *crypt_stat)
828
{
829
/* Default values; may be overwritten as we are parsing the
830
* packets. */
831
crypt_stat->extent_size = ECRYPTFS_DEFAULT_EXTENT_SIZE;
832
set_extent_mask_and_shift(crypt_stat);
833
crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES;
834
if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
835
crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
836
else {
837
if (PAGE_CACHE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)
838
crypt_stat->metadata_size =
839
ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
840
else
841
crypt_stat->metadata_size = PAGE_CACHE_SIZE;
842
}
843
}
844
845
/**
846
* ecryptfs_compute_root_iv
847
* @crypt_stats
848
*
849
* On error, sets the root IV to all 0's.
850
*/
851
int ecryptfs_compute_root_iv(struct ecryptfs_crypt_stat *crypt_stat)
852
{
853
int rc = 0;
854
char dst[MD5_DIGEST_SIZE];
855
856
BUG_ON(crypt_stat->iv_bytes > MD5_DIGEST_SIZE);
857
BUG_ON(crypt_stat->iv_bytes <= 0);
858
if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
859
rc = -EINVAL;
860
ecryptfs_printk(KERN_WARNING, "Session key not valid; "
861
"cannot generate root IV\n");
862
goto out;
863
}
864
rc = ecryptfs_calculate_md5(dst, crypt_stat, crypt_stat->key,
865
crypt_stat->key_size);
866
if (rc) {
867
ecryptfs_printk(KERN_WARNING, "Error attempting to compute "
868
"MD5 while generating root IV\n");
869
goto out;
870
}
871
memcpy(crypt_stat->root_iv, dst, crypt_stat->iv_bytes);
872
out:
873
if (rc) {
874
memset(crypt_stat->root_iv, 0, crypt_stat->iv_bytes);
875
crypt_stat->flags |= ECRYPTFS_SECURITY_WARNING;
876
}
877
return rc;
878
}
879
880
static void ecryptfs_generate_new_key(struct ecryptfs_crypt_stat *crypt_stat)
881
{
882
get_random_bytes(crypt_stat->key, crypt_stat->key_size);
883
crypt_stat->flags |= ECRYPTFS_KEY_VALID;
884
ecryptfs_compute_root_iv(crypt_stat);
885
if (unlikely(ecryptfs_verbosity > 0)) {
886
ecryptfs_printk(KERN_DEBUG, "Generated new session key:\n");
887
ecryptfs_dump_hex(crypt_stat->key,
888
crypt_stat->key_size);
889
}
890
}
891
892
/**
893
* ecryptfs_copy_mount_wide_flags_to_inode_flags
894
* @crypt_stat: The inode's cryptographic context
895
* @mount_crypt_stat: The mount point's cryptographic context
896
*
897
* This function propagates the mount-wide flags to individual inode
898
* flags.
899
*/
900
static void ecryptfs_copy_mount_wide_flags_to_inode_flags(
901
struct ecryptfs_crypt_stat *crypt_stat,
902
struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
903
{
904
if (mount_crypt_stat->flags & ECRYPTFS_XATTR_METADATA_ENABLED)
905
crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
906
if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
907
crypt_stat->flags |= ECRYPTFS_VIEW_AS_ENCRYPTED;
908
if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
909
crypt_stat->flags |= ECRYPTFS_ENCRYPT_FILENAMES;
910
if (mount_crypt_stat->flags
911
& ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)
912
crypt_stat->flags |= ECRYPTFS_ENCFN_USE_MOUNT_FNEK;
913
else if (mount_crypt_stat->flags
914
& ECRYPTFS_GLOBAL_ENCFN_USE_FEK)
915
crypt_stat->flags |= ECRYPTFS_ENCFN_USE_FEK;
916
}
917
}
918
919
static int ecryptfs_copy_mount_wide_sigs_to_inode_sigs(
920
struct ecryptfs_crypt_stat *crypt_stat,
921
struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
922
{
923
struct ecryptfs_global_auth_tok *global_auth_tok;
924
int rc = 0;
925
926
mutex_lock(&crypt_stat->keysig_list_mutex);
927
mutex_lock(&mount_crypt_stat->global_auth_tok_list_mutex);
928
929
list_for_each_entry(global_auth_tok,
930
&mount_crypt_stat->global_auth_tok_list,
931
mount_crypt_stat_list) {
932
if (global_auth_tok->flags & ECRYPTFS_AUTH_TOK_FNEK)
933
continue;
934
rc = ecryptfs_add_keysig(crypt_stat, global_auth_tok->sig);
935
if (rc) {
936
printk(KERN_ERR "Error adding keysig; rc = [%d]\n", rc);
937
goto out;
938
}
939
}
940
941
out:
942
mutex_unlock(&mount_crypt_stat->global_auth_tok_list_mutex);
943
mutex_unlock(&crypt_stat->keysig_list_mutex);
944
return rc;
945
}
946
947
/**
948
* ecryptfs_set_default_crypt_stat_vals
949
* @crypt_stat: The inode's cryptographic context
950
* @mount_crypt_stat: The mount point's cryptographic context
951
*
952
* Default values in the event that policy does not override them.
953
*/
954
static void ecryptfs_set_default_crypt_stat_vals(
955
struct ecryptfs_crypt_stat *crypt_stat,
956
struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
957
{
958
ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
959
mount_crypt_stat);
960
ecryptfs_set_default_sizes(crypt_stat);
961
strcpy(crypt_stat->cipher, ECRYPTFS_DEFAULT_CIPHER);
962
crypt_stat->key_size = ECRYPTFS_DEFAULT_KEY_BYTES;
963
crypt_stat->flags &= ~(ECRYPTFS_KEY_VALID);
964
crypt_stat->file_version = ECRYPTFS_FILE_VERSION;
965
crypt_stat->mount_crypt_stat = mount_crypt_stat;
966
}
967
968
/**
969
* ecryptfs_new_file_context
970
* @ecryptfs_dentry: The eCryptfs dentry
971
*
972
* If the crypto context for the file has not yet been established,
973
* this is where we do that. Establishing a new crypto context
974
* involves the following decisions:
975
* - What cipher to use?
976
* - What set of authentication tokens to use?
977
* Here we just worry about getting enough information into the
978
* authentication tokens so that we know that they are available.
979
* We associate the available authentication tokens with the new file
980
* via the set of signatures in the crypt_stat struct. Later, when
981
* the headers are actually written out, we may again defer to
982
* userspace to perform the encryption of the session key; for the
983
* foreseeable future, this will be the case with public key packets.
984
*
985
* Returns zero on success; non-zero otherwise
986
*/
987
int ecryptfs_new_file_context(struct dentry *ecryptfs_dentry)
988
{
989
struct ecryptfs_crypt_stat *crypt_stat =
990
&ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->crypt_stat;
991
struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
992
&ecryptfs_superblock_to_private(
993
ecryptfs_dentry->d_sb)->mount_crypt_stat;
994
int cipher_name_len;
995
int rc = 0;
996
997
ecryptfs_set_default_crypt_stat_vals(crypt_stat, mount_crypt_stat);
998
crypt_stat->flags |= (ECRYPTFS_ENCRYPTED | ECRYPTFS_KEY_VALID);
999
ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
1000
mount_crypt_stat);
1001
rc = ecryptfs_copy_mount_wide_sigs_to_inode_sigs(crypt_stat,
1002
mount_crypt_stat);
1003
if (rc) {
1004
printk(KERN_ERR "Error attempting to copy mount-wide key sigs "
1005
"to the inode key sigs; rc = [%d]\n", rc);
1006
goto out;
1007
}
1008
cipher_name_len =
1009
strlen(mount_crypt_stat->global_default_cipher_name);
1010
memcpy(crypt_stat->cipher,
1011
mount_crypt_stat->global_default_cipher_name,
1012
cipher_name_len);
1013
crypt_stat->cipher[cipher_name_len] = '\0';
1014
crypt_stat->key_size =
1015
mount_crypt_stat->global_default_cipher_key_size;
1016
ecryptfs_generate_new_key(crypt_stat);
1017
rc = ecryptfs_init_crypt_ctx(crypt_stat);
1018
if (rc)
1019
ecryptfs_printk(KERN_ERR, "Error initializing cryptographic "
1020
"context for cipher [%s]: rc = [%d]\n",
1021
crypt_stat->cipher, rc);
1022
out:
1023
return rc;
1024
}
1025
1026
/**
1027
* ecryptfs_validate_marker - check for the ecryptfs marker
1028
* @data: The data block in which to check
1029
*
1030
* Returns zero if marker found; -EINVAL if not found
1031
*/
1032
static int ecryptfs_validate_marker(char *data)
1033
{
1034
u32 m_1, m_2;
1035
1036
m_1 = get_unaligned_be32(data);
1037
m_2 = get_unaligned_be32(data + 4);
1038
if ((m_1 ^ MAGIC_ECRYPTFS_MARKER) == m_2)
1039
return 0;
1040
ecryptfs_printk(KERN_DEBUG, "m_1 = [0x%.8x]; m_2 = [0x%.8x]; "
1041
"MAGIC_ECRYPTFS_MARKER = [0x%.8x]\n", m_1, m_2,
1042
MAGIC_ECRYPTFS_MARKER);
1043
ecryptfs_printk(KERN_DEBUG, "(m_1 ^ MAGIC_ECRYPTFS_MARKER) = "
1044
"[0x%.8x]\n", (m_1 ^ MAGIC_ECRYPTFS_MARKER));
1045
return -EINVAL;
1046
}
1047
1048
struct ecryptfs_flag_map_elem {
1049
u32 file_flag;
1050
u32 local_flag;
1051
};
1052
1053
/* Add support for additional flags by adding elements here. */
1054
static struct ecryptfs_flag_map_elem ecryptfs_flag_map[] = {
1055
{0x00000001, ECRYPTFS_ENABLE_HMAC},
1056
{0x00000002, ECRYPTFS_ENCRYPTED},
1057
{0x00000004, ECRYPTFS_METADATA_IN_XATTR},
1058
{0x00000008, ECRYPTFS_ENCRYPT_FILENAMES}
1059
};
1060
1061
/**
1062
* ecryptfs_process_flags
1063
* @crypt_stat: The cryptographic context
1064
* @page_virt: Source data to be parsed
1065
* @bytes_read: Updated with the number of bytes read
1066
*
1067
* Returns zero on success; non-zero if the flag set is invalid
1068
*/
1069
static 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
flags = get_unaligned_be32(page_virt);
1077
for (i = 0; i < ((sizeof(ecryptfs_flag_map)
1078
/ sizeof(struct ecryptfs_flag_map_elem))); i++)
1079
if (flags & ecryptfs_flag_map[i].file_flag) {
1080
crypt_stat->flags |= ecryptfs_flag_map[i].local_flag;
1081
} else
1082
crypt_stat->flags &= ~(ecryptfs_flag_map[i].local_flag);
1083
/* Version is in top 8 bits of the 32-bit flag vector */
1084
crypt_stat->file_version = ((flags >> 24) & 0xFF);
1085
(*bytes_read) = 4;
1086
return rc;
1087
}
1088
1089
/**
1090
* write_ecryptfs_marker
1091
* @page_virt: The pointer to in a page to begin writing the marker
1092
* @written: Number of bytes written
1093
*
1094
* Marker = 0x3c81b7f5
1095
*/
1096
static void write_ecryptfs_marker(char *page_virt, size_t *written)
1097
{
1098
u32 m_1, m_2;
1099
1100
get_random_bytes(&m_1, (MAGIC_ECRYPTFS_MARKER_SIZE_BYTES / 2));
1101
m_2 = (m_1 ^ MAGIC_ECRYPTFS_MARKER);
1102
put_unaligned_be32(m_1, page_virt);
1103
page_virt += (MAGIC_ECRYPTFS_MARKER_SIZE_BYTES / 2);
1104
put_unaligned_be32(m_2, page_virt);
1105
(*written) = MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
1106
}
1107
1108
void ecryptfs_write_crypt_stat_flags(char *page_virt,
1109
struct ecryptfs_crypt_stat *crypt_stat,
1110
size_t *written)
1111
{
1112
u32 flags = 0;
1113
int i;
1114
1115
for (i = 0; i < ((sizeof(ecryptfs_flag_map)
1116
/ sizeof(struct ecryptfs_flag_map_elem))); i++)
1117
if (crypt_stat->flags & ecryptfs_flag_map[i].local_flag)
1118
flags |= ecryptfs_flag_map[i].file_flag;
1119
/* Version is in top 8 bits of the 32-bit flag vector */
1120
flags |= ((((u8)crypt_stat->file_version) << 24) & 0xFF000000);
1121
put_unaligned_be32(flags, page_virt);
1122
(*written) = 4;
1123
}
1124
1125
struct ecryptfs_cipher_code_str_map_elem {
1126
char cipher_str[16];
1127
u8 cipher_code;
1128
};
1129
1130
/* Add support for additional ciphers by adding elements here. The
1131
* cipher_code is whatever OpenPGP applicatoins use to identify the
1132
* ciphers. List in order of probability. */
1133
static struct ecryptfs_cipher_code_str_map_elem
1134
ecryptfs_cipher_code_str_map[] = {
1135
{"aes",RFC2440_CIPHER_AES_128 },
1136
{"blowfish", RFC2440_CIPHER_BLOWFISH},
1137
{"des3_ede", RFC2440_CIPHER_DES3_EDE},
1138
{"cast5", RFC2440_CIPHER_CAST_5},
1139
{"twofish", RFC2440_CIPHER_TWOFISH},
1140
{"cast6", RFC2440_CIPHER_CAST_6},
1141
{"aes", RFC2440_CIPHER_AES_192},
1142
{"aes", RFC2440_CIPHER_AES_256}
1143
};
1144
1145
/**
1146
* ecryptfs_code_for_cipher_string
1147
* @cipher_name: The string alias for the cipher
1148
* @key_bytes: Length of key in bytes; used for AES code selection
1149
*
1150
* Returns zero on no match, or the cipher code on match
1151
*/
1152
u8 ecryptfs_code_for_cipher_string(char *cipher_name, size_t key_bytes)
1153
{
1154
int i;
1155
u8 code = 0;
1156
struct ecryptfs_cipher_code_str_map_elem *map =
1157
ecryptfs_cipher_code_str_map;
1158
1159
if (strcmp(cipher_name, "aes") == 0) {
1160
switch (key_bytes) {
1161
case 16:
1162
code = RFC2440_CIPHER_AES_128;
1163
break;
1164
case 24:
1165
code = RFC2440_CIPHER_AES_192;
1166
break;
1167
case 32:
1168
code = RFC2440_CIPHER_AES_256;
1169
}
1170
} else {
1171
for (i = 0; i < ARRAY_SIZE(ecryptfs_cipher_code_str_map); i++)
1172
if (strcmp(cipher_name, map[i].cipher_str) == 0) {
1173
code = map[i].cipher_code;
1174
break;
1175
}
1176
}
1177
return code;
1178
}
1179
1180
/**
1181
* ecryptfs_cipher_code_to_string
1182
* @str: Destination to write out the cipher name
1183
* @cipher_code: The code to convert to cipher name string
1184
*
1185
* Returns zero on success
1186
*/
1187
int ecryptfs_cipher_code_to_string(char *str, u8 cipher_code)
1188
{
1189
int rc = 0;
1190
int i;
1191
1192
str[0] = '\0';
1193
for (i = 0; i < ARRAY_SIZE(ecryptfs_cipher_code_str_map); i++)
1194
if (cipher_code == ecryptfs_cipher_code_str_map[i].cipher_code)
1195
strcpy(str, ecryptfs_cipher_code_str_map[i].cipher_str);
1196
if (str[0] == '\0') {
1197
ecryptfs_printk(KERN_WARNING, "Cipher code not recognized: "
1198
"[%d]\n", cipher_code);
1199
rc = -EINVAL;
1200
}
1201
return rc;
1202
}
1203
1204
int ecryptfs_read_and_validate_header_region(struct inode *inode)
1205
{
1206
u8 file_size[ECRYPTFS_SIZE_AND_MARKER_BYTES];
1207
u8 *marker = file_size + ECRYPTFS_FILE_SIZE_BYTES;
1208
int rc;
1209
1210
rc = ecryptfs_read_lower(file_size, 0, ECRYPTFS_SIZE_AND_MARKER_BYTES,
1211
inode);
1212
if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
1213
return rc >= 0 ? -EINVAL : rc;
1214
rc = ecryptfs_validate_marker(marker);
1215
if (!rc)
1216
ecryptfs_i_size_init(file_size, inode);
1217
return rc;
1218
}
1219
1220
void
1221
ecryptfs_write_header_metadata(char *virt,
1222
struct ecryptfs_crypt_stat *crypt_stat,
1223
size_t *written)
1224
{
1225
u32 header_extent_size;
1226
u16 num_header_extents_at_front;
1227
1228
header_extent_size = (u32)crypt_stat->extent_size;
1229
num_header_extents_at_front =
1230
(u16)(crypt_stat->metadata_size / crypt_stat->extent_size);
1231
put_unaligned_be32(header_extent_size, virt);
1232
virt += 4;
1233
put_unaligned_be16(num_header_extents_at_front, virt);
1234
(*written) = 6;
1235
}
1236
1237
struct kmem_cache *ecryptfs_header_cache;
1238
1239
/**
1240
* ecryptfs_write_headers_virt
1241
* @page_virt: The virtual address to write the headers to
1242
* @max: The size of memory allocated at page_virt
1243
* @size: Set to the number of bytes written by this function
1244
* @crypt_stat: The cryptographic context
1245
* @ecryptfs_dentry: The eCryptfs dentry
1246
*
1247
* Format version: 1
1248
*
1249
* Header Extent:
1250
* Octets 0-7: Unencrypted file size (big-endian)
1251
* Octets 8-15: eCryptfs special marker
1252
* Octets 16-19: Flags
1253
* Octet 16: File format version number (between 0 and 255)
1254
* Octets 17-18: Reserved
1255
* Octet 19: Bit 1 (lsb): Reserved
1256
* Bit 2: Encrypted?
1257
* Bits 3-8: Reserved
1258
* Octets 20-23: Header extent size (big-endian)
1259
* Octets 24-25: Number of header extents at front of file
1260
* (big-endian)
1261
* Octet 26: Begin RFC 2440 authentication token packet set
1262
* Data Extent 0:
1263
* Lower data (CBC encrypted)
1264
* Data Extent 1:
1265
* Lower data (CBC encrypted)
1266
* ...
1267
*
1268
* Returns zero on success
1269
*/
1270
static int ecryptfs_write_headers_virt(char *page_virt, size_t max,
1271
size_t *size,
1272
struct ecryptfs_crypt_stat *crypt_stat,
1273
struct dentry *ecryptfs_dentry)
1274
{
1275
int rc;
1276
size_t written;
1277
size_t offset;
1278
1279
offset = ECRYPTFS_FILE_SIZE_BYTES;
1280
write_ecryptfs_marker((page_virt + offset), &written);
1281
offset += written;
1282
ecryptfs_write_crypt_stat_flags((page_virt + offset), crypt_stat,
1283
&written);
1284
offset += written;
1285
ecryptfs_write_header_metadata((page_virt + offset), crypt_stat,
1286
&written);
1287
offset += written;
1288
rc = ecryptfs_generate_key_packet_set((page_virt + offset), crypt_stat,
1289
ecryptfs_dentry, &written,
1290
max - offset);
1291
if (rc)
1292
ecryptfs_printk(KERN_WARNING, "Error generating key packet "
1293
"set; rc = [%d]\n", rc);
1294
if (size) {
1295
offset += written;
1296
*size = offset;
1297
}
1298
return rc;
1299
}
1300
1301
static int
1302
ecryptfs_write_metadata_to_contents(struct dentry *ecryptfs_dentry,
1303
char *virt, size_t virt_len)
1304
{
1305
int rc;
1306
1307
rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode, virt,
1308
0, virt_len);
1309
if (rc < 0)
1310
printk(KERN_ERR "%s: Error attempting to write header "
1311
"information to lower file; rc = [%d]\n", __func__, rc);
1312
else
1313
rc = 0;
1314
return rc;
1315
}
1316
1317
static int
1318
ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry,
1319
char *page_virt, size_t size)
1320
{
1321
int rc;
1322
1323
rc = ecryptfs_setxattr(ecryptfs_dentry, ECRYPTFS_XATTR_NAME, page_virt,
1324
size, 0);
1325
return rc;
1326
}
1327
1328
static unsigned long ecryptfs_get_zeroed_pages(gfp_t gfp_mask,
1329
unsigned int order)
1330
{
1331
struct page *page;
1332
1333
page = alloc_pages(gfp_mask | __GFP_ZERO, order);
1334
if (page)
1335
return (unsigned long) page_address(page);
1336
return 0;
1337
}
1338
1339
/**
1340
* ecryptfs_write_metadata
1341
* @ecryptfs_dentry: The eCryptfs dentry
1342
*
1343
* Write the file headers out. This will likely involve a userspace
1344
* callout, in which the session key is encrypted with one or more
1345
* public keys and/or the passphrase necessary to do the encryption is
1346
* retrieved via a prompt. Exactly what happens at this point should
1347
* be policy-dependent.
1348
*
1349
* Returns zero on success; non-zero on error
1350
*/
1351
int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry)
1352
{
1353
struct ecryptfs_crypt_stat *crypt_stat =
1354
&ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->crypt_stat;
1355
unsigned int order;
1356
char *virt;
1357
size_t virt_len;
1358
size_t size = 0;
1359
int rc = 0;
1360
1361
if (likely(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) {
1362
if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) {
1363
printk(KERN_ERR "Key is invalid; bailing out\n");
1364
rc = -EINVAL;
1365
goto out;
1366
}
1367
} else {
1368
printk(KERN_WARNING "%s: Encrypted flag not set\n",
1369
__func__);
1370
rc = -EINVAL;
1371
goto out;
1372
}
1373
virt_len = crypt_stat->metadata_size;
1374
order = get_order(virt_len);
1375
/* Released in this function */
1376
virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order);
1377
if (!virt) {
1378
printk(KERN_ERR "%s: Out of memory\n", __func__);
1379
rc = -ENOMEM;
1380
goto out;
1381
}
1382
/* Zeroed page ensures the in-header unencrypted i_size is set to 0 */
1383
rc = ecryptfs_write_headers_virt(virt, virt_len, &size, crypt_stat,
1384
ecryptfs_dentry);
1385
if (unlikely(rc)) {
1386
printk(KERN_ERR "%s: Error whilst writing headers; rc = [%d]\n",
1387
__func__, rc);
1388
goto out_free;
1389
}
1390
if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1391
rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry, virt,
1392
size);
1393
else
1394
rc = ecryptfs_write_metadata_to_contents(ecryptfs_dentry, virt,
1395
virt_len);
1396
if (rc) {
1397
printk(KERN_ERR "%s: Error writing metadata out to lower file; "
1398
"rc = [%d]\n", __func__, rc);
1399
goto out_free;
1400
}
1401
out_free:
1402
free_pages((unsigned long)virt, order);
1403
out:
1404
return rc;
1405
}
1406
1407
#define ECRYPTFS_DONT_VALIDATE_HEADER_SIZE 0
1408
#define ECRYPTFS_VALIDATE_HEADER_SIZE 1
1409
static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,
1410
char *virt, int *bytes_read,
1411
int validate_header_size)
1412
{
1413
int rc = 0;
1414
u32 header_extent_size;
1415
u16 num_header_extents_at_front;
1416
1417
header_extent_size = get_unaligned_be32(virt);
1418
virt += sizeof(__be32);
1419
num_header_extents_at_front = get_unaligned_be16(virt);
1420
crypt_stat->metadata_size = (((size_t)num_header_extents_at_front
1421
* (size_t)header_extent_size));
1422
(*bytes_read) = (sizeof(__be32) + sizeof(__be16));
1423
if ((validate_header_size == ECRYPTFS_VALIDATE_HEADER_SIZE)
1424
&& (crypt_stat->metadata_size
1425
< ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)) {
1426
rc = -EINVAL;
1427
printk(KERN_WARNING "Invalid header size: [%zd]\n",
1428
crypt_stat->metadata_size);
1429
}
1430
return rc;
1431
}
1432
1433
/**
1434
* set_default_header_data
1435
* @crypt_stat: The cryptographic context
1436
*
1437
* For version 0 file format; this function is only for backwards
1438
* compatibility for files created with the prior versions of
1439
* eCryptfs.
1440
*/
1441
static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
1442
{
1443
crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
1444
}
1445
1446
void ecryptfs_i_size_init(const char *page_virt, struct inode *inode)
1447
{
1448
struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
1449
struct ecryptfs_crypt_stat *crypt_stat;
1450
u64 file_size;
1451
1452
crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
1453
mount_crypt_stat =
1454
&ecryptfs_superblock_to_private(inode->i_sb)->mount_crypt_stat;
1455
if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
1456
file_size = i_size_read(ecryptfs_inode_to_lower(inode));
1457
if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
1458
file_size += crypt_stat->metadata_size;
1459
} else
1460
file_size = get_unaligned_be64(page_virt);
1461
i_size_write(inode, (loff_t)file_size);
1462
crypt_stat->flags |= ECRYPTFS_I_SIZE_INITIALIZED;
1463
}
1464
1465
/**
1466
* ecryptfs_read_headers_virt
1467
* @page_virt: The virtual address into which to read the headers
1468
* @crypt_stat: The cryptographic context
1469
* @ecryptfs_dentry: The eCryptfs dentry
1470
* @validate_header_size: Whether to validate the header size while reading
1471
*
1472
* Read/parse the header data. The header format is detailed in the
1473
* comment block for the ecryptfs_write_headers_virt() function.
1474
*
1475
* Returns zero on success
1476
*/
1477
static int ecryptfs_read_headers_virt(char *page_virt,
1478
struct ecryptfs_crypt_stat *crypt_stat,
1479
struct dentry *ecryptfs_dentry,
1480
int validate_header_size)
1481
{
1482
int rc = 0;
1483
int offset;
1484
int bytes_read;
1485
1486
ecryptfs_set_default_sizes(crypt_stat);
1487
crypt_stat->mount_crypt_stat = &ecryptfs_superblock_to_private(
1488
ecryptfs_dentry->d_sb)->mount_crypt_stat;
1489
offset = ECRYPTFS_FILE_SIZE_BYTES;
1490
rc = ecryptfs_validate_marker(page_virt + offset);
1491
if (rc)
1492
goto out;
1493
if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
1494
ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
1495
offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
1496
rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
1497
&bytes_read);
1498
if (rc) {
1499
ecryptfs_printk(KERN_WARNING, "Error processing flags\n");
1500
goto out;
1501
}
1502
if (crypt_stat->file_version > ECRYPTFS_SUPPORTED_FILE_VERSION) {
1503
ecryptfs_printk(KERN_WARNING, "File version is [%d]; only "
1504
"file version [%d] is supported by this "
1505
"version of eCryptfs\n",
1506
crypt_stat->file_version,
1507
ECRYPTFS_SUPPORTED_FILE_VERSION);
1508
rc = -EINVAL;
1509
goto out;
1510
}
1511
offset += bytes_read;
1512
if (crypt_stat->file_version >= 1) {
1513
rc = parse_header_metadata(crypt_stat, (page_virt + offset),
1514
&bytes_read, validate_header_size);
1515
if (rc) {
1516
ecryptfs_printk(KERN_WARNING, "Error reading header "
1517
"metadata; rc = [%d]\n", rc);
1518
}
1519
offset += bytes_read;
1520
} else
1521
set_default_header_data(crypt_stat);
1522
rc = ecryptfs_parse_packet_set(crypt_stat, (page_virt + offset),
1523
ecryptfs_dentry);
1524
out:
1525
return rc;
1526
}
1527
1528
/**
1529
* ecryptfs_read_xattr_region
1530
* @page_virt: The vitual address into which to read the xattr data
1531
* @ecryptfs_inode: The eCryptfs inode
1532
*
1533
* Attempts to read the crypto metadata from the extended attribute
1534
* region of the lower file.
1535
*
1536
* Returns zero on success; non-zero on error
1537
*/
1538
int ecryptfs_read_xattr_region(char *page_virt, struct inode *ecryptfs_inode)
1539
{
1540
struct dentry *lower_dentry =
1541
ecryptfs_inode_to_private(ecryptfs_inode)->lower_file->f_dentry;
1542
ssize_t size;
1543
int rc = 0;
1544
1545
size = ecryptfs_getxattr_lower(lower_dentry, ECRYPTFS_XATTR_NAME,
1546
page_virt, ECRYPTFS_DEFAULT_EXTENT_SIZE);
1547
if (size < 0) {
1548
if (unlikely(ecryptfs_verbosity > 0))
1549
printk(KERN_INFO "Error attempting to read the [%s] "
1550
"xattr from the lower file; return value = "
1551
"[%zd]\n", ECRYPTFS_XATTR_NAME, size);
1552
rc = -EINVAL;
1553
goto out;
1554
}
1555
out:
1556
return rc;
1557
}
1558
1559
int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry,
1560
struct inode *inode)
1561
{
1562
u8 file_size[ECRYPTFS_SIZE_AND_MARKER_BYTES];
1563
u8 *marker = file_size + ECRYPTFS_FILE_SIZE_BYTES;
1564
int rc;
1565
1566
rc = ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry),
1567
ECRYPTFS_XATTR_NAME, file_size,
1568
ECRYPTFS_SIZE_AND_MARKER_BYTES);
1569
if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
1570
return rc >= 0 ? -EINVAL : rc;
1571
rc = ecryptfs_validate_marker(marker);
1572
if (!rc)
1573
ecryptfs_i_size_init(file_size, inode);
1574
return rc;
1575
}
1576
1577
/**
1578
* ecryptfs_read_metadata
1579
*
1580
* Common entry point for reading file metadata. From here, we could
1581
* retrieve the header information from the header region of the file,
1582
* the xattr region of the file, or some other repostory that is
1583
* stored separately from the file itself. The current implementation
1584
* supports retrieving the metadata information from the file contents
1585
* and from the xattr region.
1586
*
1587
* Returns zero if valid headers found and parsed; non-zero otherwise
1588
*/
1589
int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
1590
{
1591
int rc = 0;
1592
char *page_virt = NULL;
1593
struct inode *ecryptfs_inode = ecryptfs_dentry->d_inode;
1594
struct ecryptfs_crypt_stat *crypt_stat =
1595
&ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
1596
struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
1597
&ecryptfs_superblock_to_private(
1598
ecryptfs_dentry->d_sb)->mount_crypt_stat;
1599
1600
ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat,
1601
mount_crypt_stat);
1602
/* Read the first page from the underlying file */
1603
page_virt = kmem_cache_alloc(ecryptfs_header_cache, GFP_USER);
1604
if (!page_virt) {
1605
rc = -ENOMEM;
1606
printk(KERN_ERR "%s: Unable to allocate page_virt\n",
1607
__func__);
1608
goto out;
1609
}
1610
rc = ecryptfs_read_lower(page_virt, 0, crypt_stat->extent_size,
1611
ecryptfs_inode);
1612
if (rc >= 0)
1613
rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1614
ecryptfs_dentry,
1615
ECRYPTFS_VALIDATE_HEADER_SIZE);
1616
if (rc) {
1617
memset(page_virt, 0, PAGE_CACHE_SIZE);
1618
rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);
1619
if (rc) {
1620
printk(KERN_DEBUG "Valid eCryptfs headers not found in "
1621
"file header region or xattr region\n");
1622
rc = -EINVAL;
1623
goto out;
1624
}
1625
rc = ecryptfs_read_headers_virt(page_virt, crypt_stat,
1626
ecryptfs_dentry,
1627
ECRYPTFS_DONT_VALIDATE_HEADER_SIZE);
1628
if (rc) {
1629
printk(KERN_DEBUG "Valid eCryptfs headers not found in "
1630
"file xattr region either\n");
1631
rc = -EINVAL;
1632
}
1633
if (crypt_stat->mount_crypt_stat->flags
1634
& ECRYPTFS_XATTR_METADATA_ENABLED) {
1635
crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
1636
} else {
1637
printk(KERN_WARNING "Attempt to access file with "
1638
"crypto metadata only in the extended attribute "
1639
"region, but eCryptfs was mounted without "
1640
"xattr support enabled. eCryptfs will not treat "
1641
"this like an encrypted file.\n");
1642
rc = -EINVAL;
1643
}
1644
}
1645
out:
1646
if (page_virt) {
1647
memset(page_virt, 0, PAGE_CACHE_SIZE);
1648
kmem_cache_free(ecryptfs_header_cache, page_virt);
1649
}
1650
return rc;
1651
}
1652
1653
/**
1654
* ecryptfs_encrypt_filename - encrypt filename
1655
*
1656
* CBC-encrypts the filename. We do not want to encrypt the same
1657
* filename with the same key and IV, which may happen with hard
1658
* links, so we prepend random bits to each filename.
1659
*
1660
* Returns zero on success; non-zero otherwise
1661
*/
1662
static int
1663
ecryptfs_encrypt_filename(struct ecryptfs_filename *filename,
1664
struct ecryptfs_crypt_stat *crypt_stat,
1665
struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
1666
{
1667
int rc = 0;
1668
1669
filename->encrypted_filename = NULL;
1670
filename->encrypted_filename_size = 0;
1671
if ((crypt_stat && (crypt_stat->flags & ECRYPTFS_ENCFN_USE_MOUNT_FNEK))
1672
|| (mount_crypt_stat && (mount_crypt_stat->flags
1673
& ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK))) {
1674
size_t packet_size;
1675
size_t remaining_bytes;
1676
1677
rc = ecryptfs_write_tag_70_packet(
1678
NULL, NULL,
1679
&filename->encrypted_filename_size,
1680
mount_crypt_stat, NULL,
1681
filename->filename_size);
1682
if (rc) {
1683
printk(KERN_ERR "%s: Error attempting to get packet "
1684
"size for tag 72; rc = [%d]\n", __func__,
1685
rc);
1686
filename->encrypted_filename_size = 0;
1687
goto out;
1688
}
1689
filename->encrypted_filename =
1690
kmalloc(filename->encrypted_filename_size, GFP_KERNEL);
1691
if (!filename->encrypted_filename) {
1692
printk(KERN_ERR "%s: Out of memory whilst attempting "
1693
"to kmalloc [%zd] bytes\n", __func__,
1694
filename->encrypted_filename_size);
1695
rc = -ENOMEM;
1696
goto out;
1697
}
1698
remaining_bytes = filename->encrypted_filename_size;
1699
rc = ecryptfs_write_tag_70_packet(filename->encrypted_filename,
1700
&remaining_bytes,
1701
&packet_size,
1702
mount_crypt_stat,
1703
filename->filename,
1704
filename->filename_size);
1705
if (rc) {
1706
printk(KERN_ERR "%s: Error attempting to generate "
1707
"tag 70 packet; rc = [%d]\n", __func__,
1708
rc);
1709
kfree(filename->encrypted_filename);
1710
filename->encrypted_filename = NULL;
1711
filename->encrypted_filename_size = 0;
1712
goto out;
1713
}
1714
filename->encrypted_filename_size = packet_size;
1715
} else {
1716
printk(KERN_ERR "%s: No support for requested filename "
1717
"encryption method in this release\n", __func__);
1718
rc = -EOPNOTSUPP;
1719
goto out;
1720
}
1721
out:
1722
return rc;
1723
}
1724
1725
static int ecryptfs_copy_filename(char **copied_name, size_t *copied_name_size,
1726
const char *name, size_t name_size)
1727
{
1728
int rc = 0;
1729
1730
(*copied_name) = kmalloc((name_size + 1), GFP_KERNEL);
1731
if (!(*copied_name)) {
1732
rc = -ENOMEM;
1733
goto out;
1734
}
1735
memcpy((void *)(*copied_name), (void *)name, name_size);
1736
(*copied_name)[(name_size)] = '\0'; /* Only for convenience
1737
* in printing out the
1738
* string in debug
1739
* messages */
1740
(*copied_name_size) = name_size;
1741
out:
1742
return rc;
1743
}
1744
1745
/**
1746
* ecryptfs_process_key_cipher - Perform key cipher initialization.
1747
* @key_tfm: Crypto context for key material, set by this function
1748
* @cipher_name: Name of the cipher
1749
* @key_size: Size of the key in bytes
1750
*
1751
* Returns zero on success. Any crypto_tfm structs allocated here
1752
* should be released by other functions, such as on a superblock put
1753
* event, regardless of whether this function succeeds for fails.
1754
*/
1755
static int
1756
ecryptfs_process_key_cipher(struct crypto_blkcipher **key_tfm,
1757
char *cipher_name, size_t *key_size)
1758
{
1759
char dummy_key[ECRYPTFS_MAX_KEY_BYTES];
1760
char *full_alg_name = NULL;
1761
int rc;
1762
1763
*key_tfm = NULL;
1764
if (*key_size > ECRYPTFS_MAX_KEY_BYTES) {
1765
rc = -EINVAL;
1766
printk(KERN_ERR "Requested key size is [%zd] bytes; maximum "
1767
"allowable is [%d]\n", *key_size, ECRYPTFS_MAX_KEY_BYTES);
1768
goto out;
1769
}
1770
rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name, cipher_name,
1771
"ecb");
1772
if (rc)
1773
goto out;
1774
*key_tfm = crypto_alloc_blkcipher(full_alg_name, 0, CRYPTO_ALG_ASYNC);
1775
if (IS_ERR(*key_tfm)) {
1776
rc = PTR_ERR(*key_tfm);
1777
printk(KERN_ERR "Unable to allocate crypto cipher with name "
1778
"[%s]; rc = [%d]\n", full_alg_name, rc);
1779
goto out;
1780
}
1781
crypto_blkcipher_set_flags(*key_tfm, CRYPTO_TFM_REQ_WEAK_KEY);
1782
if (*key_size == 0) {
1783
struct blkcipher_alg *alg = crypto_blkcipher_alg(*key_tfm);
1784
1785
*key_size = alg->max_keysize;
1786
}
1787
get_random_bytes(dummy_key, *key_size);
1788
rc = crypto_blkcipher_setkey(*key_tfm, dummy_key, *key_size);
1789
if (rc) {
1790
printk(KERN_ERR "Error attempting to set key of size [%zd] for "
1791
"cipher [%s]; rc = [%d]\n", *key_size, full_alg_name,
1792
rc);
1793
rc = -EINVAL;
1794
goto out;
1795
}
1796
out:
1797
kfree(full_alg_name);
1798
return rc;
1799
}
1800
1801
struct kmem_cache *ecryptfs_key_tfm_cache;
1802
static struct list_head key_tfm_list;
1803
struct mutex key_tfm_list_mutex;
1804
1805
int __init ecryptfs_init_crypto(void)
1806
{
1807
mutex_init(&key_tfm_list_mutex);
1808
INIT_LIST_HEAD(&key_tfm_list);
1809
return 0;
1810
}
1811
1812
/**
1813
* ecryptfs_destroy_crypto - free all cached key_tfms on key_tfm_list
1814
*
1815
* Called only at module unload time
1816
*/
1817
int ecryptfs_destroy_crypto(void)
1818
{
1819
struct ecryptfs_key_tfm *key_tfm, *key_tfm_tmp;
1820
1821
mutex_lock(&key_tfm_list_mutex);
1822
list_for_each_entry_safe(key_tfm, key_tfm_tmp, &key_tfm_list,
1823
key_tfm_list) {
1824
list_del(&key_tfm->key_tfm_list);
1825
if (key_tfm->key_tfm)
1826
crypto_free_blkcipher(key_tfm->key_tfm);
1827
kmem_cache_free(ecryptfs_key_tfm_cache, key_tfm);
1828
}
1829
mutex_unlock(&key_tfm_list_mutex);
1830
return 0;
1831
}
1832
1833
int
1834
ecryptfs_add_new_key_tfm(struct ecryptfs_key_tfm **key_tfm, char *cipher_name,
1835
size_t key_size)
1836
{
1837
struct ecryptfs_key_tfm *tmp_tfm;
1838
int rc = 0;
1839
1840
BUG_ON(!mutex_is_locked(&key_tfm_list_mutex));
1841
1842
tmp_tfm = kmem_cache_alloc(ecryptfs_key_tfm_cache, GFP_KERNEL);
1843
if (key_tfm != NULL)
1844
(*key_tfm) = tmp_tfm;
1845
if (!tmp_tfm) {
1846
rc = -ENOMEM;
1847
printk(KERN_ERR "Error attempting to allocate from "
1848
"ecryptfs_key_tfm_cache\n");
1849
goto out;
1850
}
1851
mutex_init(&tmp_tfm->key_tfm_mutex);
1852
strncpy(tmp_tfm->cipher_name, cipher_name,
1853
ECRYPTFS_MAX_CIPHER_NAME_SIZE);
1854
tmp_tfm->cipher_name[ECRYPTFS_MAX_CIPHER_NAME_SIZE] = '\0';
1855
tmp_tfm->key_size = key_size;
1856
rc = ecryptfs_process_key_cipher(&tmp_tfm->key_tfm,
1857
tmp_tfm->cipher_name,
1858
&tmp_tfm->key_size);
1859
if (rc) {
1860
printk(KERN_ERR "Error attempting to initialize key TFM "
1861
"cipher with name = [%s]; rc = [%d]\n",
1862
tmp_tfm->cipher_name, rc);
1863
kmem_cache_free(ecryptfs_key_tfm_cache, tmp_tfm);
1864
if (key_tfm != NULL)
1865
(*key_tfm) = NULL;
1866
goto out;
1867
}
1868
list_add(&tmp_tfm->key_tfm_list, &key_tfm_list);
1869
out:
1870
return rc;
1871
}
1872
1873
/**
1874
* ecryptfs_tfm_exists - Search for existing tfm for cipher_name.
1875
* @cipher_name: the name of the cipher to search for
1876
* @key_tfm: set to corresponding tfm if found
1877
*
1878
* Searches for cached key_tfm matching @cipher_name
1879
* Must be called with &key_tfm_list_mutex held
1880
* Returns 1 if found, with @key_tfm set
1881
* Returns 0 if not found, with @key_tfm set to NULL
1882
*/
1883
int ecryptfs_tfm_exists(char *cipher_name, struct ecryptfs_key_tfm **key_tfm)
1884
{
1885
struct ecryptfs_key_tfm *tmp_key_tfm;
1886
1887
BUG_ON(!mutex_is_locked(&key_tfm_list_mutex));
1888
1889
list_for_each_entry(tmp_key_tfm, &key_tfm_list, key_tfm_list) {
1890
if (strcmp(tmp_key_tfm->cipher_name, cipher_name) == 0) {
1891
if (key_tfm)
1892
(*key_tfm) = tmp_key_tfm;
1893
return 1;
1894
}
1895
}
1896
if (key_tfm)
1897
(*key_tfm) = NULL;
1898
return 0;
1899
}
1900
1901
/**
1902
* ecryptfs_get_tfm_and_mutex_for_cipher_name
1903
*
1904
* @tfm: set to cached tfm found, or new tfm created
1905
* @tfm_mutex: set to mutex for cached tfm found, or new tfm created
1906
* @cipher_name: the name of the cipher to search for and/or add
1907
*
1908
* Sets pointers to @tfm & @tfm_mutex matching @cipher_name.
1909
* Searches for cached item first, and creates new if not found.
1910
* Returns 0 on success, non-zero if adding new cipher failed
1911
*/
1912
int ecryptfs_get_tfm_and_mutex_for_cipher_name(struct crypto_blkcipher **tfm,
1913
struct mutex **tfm_mutex,
1914
char *cipher_name)
1915
{
1916
struct ecryptfs_key_tfm *key_tfm;
1917
int rc = 0;
1918
1919
(*tfm) = NULL;
1920
(*tfm_mutex) = NULL;
1921
1922
mutex_lock(&key_tfm_list_mutex);
1923
if (!ecryptfs_tfm_exists(cipher_name, &key_tfm)) {
1924
rc = ecryptfs_add_new_key_tfm(&key_tfm, cipher_name, 0);
1925
if (rc) {
1926
printk(KERN_ERR "Error adding new key_tfm to list; "
1927
"rc = [%d]\n", rc);
1928
goto out;
1929
}
1930
}
1931
(*tfm) = key_tfm->key_tfm;
1932
(*tfm_mutex) = &key_tfm->key_tfm_mutex;
1933
out:
1934
mutex_unlock(&key_tfm_list_mutex);
1935
return rc;
1936
}
1937
1938
/* 64 characters forming a 6-bit target field */
1939
static unsigned char *portable_filename_chars = ("-.0123456789ABCD"
1940
"EFGHIJKLMNOPQRST"
1941
"UVWXYZabcdefghij"
1942
"klmnopqrstuvwxyz");
1943
1944
/* We could either offset on every reverse map or just pad some 0x00's
1945
* at the front here */
1946
static const unsigned char filename_rev_map[] = {
1947
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 7 */
1948
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 15 */
1949
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 23 */
1950
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 31 */
1951
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 39 */
1952
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, /* 47 */
1953
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, /* 55 */
1954
0x0A, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 63 */
1955
0x00, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, /* 71 */
1956
0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, /* 79 */
1957
0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, /* 87 */
1958
0x23, 0x24, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, /* 95 */
1959
0x00, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, /* 103 */
1960
0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, /* 111 */
1961
0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, /* 119 */
1962
0x3D, 0x3E, 0x3F
1963
};
1964
1965
/**
1966
* ecryptfs_encode_for_filename
1967
* @dst: Destination location for encoded filename
1968
* @dst_size: Size of the encoded filename in bytes
1969
* @src: Source location for the filename to encode
1970
* @src_size: Size of the source in bytes
1971
*/
1972
void ecryptfs_encode_for_filename(unsigned char *dst, size_t *dst_size,
1973
unsigned char *src, size_t src_size)
1974
{
1975
size_t num_blocks;
1976
size_t block_num = 0;
1977
size_t dst_offset = 0;
1978
unsigned char last_block[3];
1979
1980
if (src_size == 0) {
1981
(*dst_size) = 0;
1982
goto out;
1983
}
1984
num_blocks = (src_size / 3);
1985
if ((src_size % 3) == 0) {
1986
memcpy(last_block, (&src[src_size - 3]), 3);
1987
} else {
1988
num_blocks++;
1989
last_block[2] = 0x00;
1990
switch (src_size % 3) {
1991
case 1:
1992
last_block[0] = src[src_size - 1];
1993
last_block[1] = 0x00;
1994
break;
1995
case 2:
1996
last_block[0] = src[src_size - 2];
1997
last_block[1] = src[src_size - 1];
1998
}
1999
}
2000
(*dst_size) = (num_blocks * 4);
2001
if (!dst)
2002
goto out;
2003
while (block_num < num_blocks) {
2004
unsigned char *src_block;
2005
unsigned char dst_block[4];
2006
2007
if (block_num == (num_blocks - 1))
2008
src_block = last_block;
2009
else
2010
src_block = &src[block_num * 3];
2011
dst_block[0] = ((src_block[0] >> 2) & 0x3F);
2012
dst_block[1] = (((src_block[0] << 4) & 0x30)
2013
| ((src_block[1] >> 4) & 0x0F));
2014
dst_block[2] = (((src_block[1] << 2) & 0x3C)
2015
| ((src_block[2] >> 6) & 0x03));
2016
dst_block[3] = (src_block[2] & 0x3F);
2017
dst[dst_offset++] = portable_filename_chars[dst_block[0]];
2018
dst[dst_offset++] = portable_filename_chars[dst_block[1]];
2019
dst[dst_offset++] = portable_filename_chars[dst_block[2]];
2020
dst[dst_offset++] = portable_filename_chars[dst_block[3]];
2021
block_num++;
2022
}
2023
out:
2024
return;
2025
}
2026
2027
/**
2028
* ecryptfs_decode_from_filename
2029
* @dst: If NULL, this function only sets @dst_size and returns. If
2030
* non-NULL, this function decodes the encoded octets in @src
2031
* into the memory that @dst points to.
2032
* @dst_size: Set to the size of the decoded string.
2033
* @src: The encoded set of octets to decode.
2034
* @src_size: The size of the encoded set of octets to decode.
2035
*/
2036
static void
2037
ecryptfs_decode_from_filename(unsigned char *dst, size_t *dst_size,
2038
const unsigned char *src, size_t src_size)
2039
{
2040
u8 current_bit_offset = 0;
2041
size_t src_byte_offset = 0;
2042
size_t dst_byte_offset = 0;
2043
2044
if (dst == NULL) {
2045
/* Not exact; conservatively long. Every block of 4
2046
* encoded characters decodes into a block of 3
2047
* decoded characters. This segment of code provides
2048
* the caller with the maximum amount of allocated
2049
* space that @dst will need to point to in a
2050
* subsequent call. */
2051
(*dst_size) = (((src_size + 1) * 3) / 4);
2052
goto out;
2053
}
2054
while (src_byte_offset < src_size) {
2055
unsigned char src_byte =
2056
filename_rev_map[(int)src[src_byte_offset]];
2057
2058
switch (current_bit_offset) {
2059
case 0:
2060
dst[dst_byte_offset] = (src_byte << 2);
2061
current_bit_offset = 6;
2062
break;
2063
case 6:
2064
dst[dst_byte_offset++] |= (src_byte >> 4);
2065
dst[dst_byte_offset] = ((src_byte & 0xF)
2066
<< 4);
2067
current_bit_offset = 4;
2068
break;
2069
case 4:
2070
dst[dst_byte_offset++] |= (src_byte >> 2);
2071
dst[dst_byte_offset] = (src_byte << 6);
2072
current_bit_offset = 2;
2073
break;
2074
case 2:
2075
dst[dst_byte_offset++] |= (src_byte);
2076
dst[dst_byte_offset] = 0;
2077
current_bit_offset = 0;
2078
break;
2079
}
2080
src_byte_offset++;
2081
}
2082
(*dst_size) = dst_byte_offset;
2083
out:
2084
return;
2085
}
2086
2087
/**
2088
* ecryptfs_encrypt_and_encode_filename - converts a plaintext file name to cipher text
2089
* @crypt_stat: The crypt_stat struct associated with the file anem to encode
2090
* @name: The plaintext name
2091
* @length: The length of the plaintext
2092
* @encoded_name: The encypted name
2093
*
2094
* Encrypts and encodes a filename into something that constitutes a
2095
* valid filename for a filesystem, with printable characters.
2096
*
2097
* We assume that we have a properly initialized crypto context,
2098
* pointed to by crypt_stat->tfm.
2099
*
2100
* Returns zero on success; non-zero on otherwise
2101
*/
2102
int ecryptfs_encrypt_and_encode_filename(
2103
char **encoded_name,
2104
size_t *encoded_name_size,
2105
struct ecryptfs_crypt_stat *crypt_stat,
2106
struct ecryptfs_mount_crypt_stat *mount_crypt_stat,
2107
const char *name, size_t name_size)
2108
{
2109
size_t encoded_name_no_prefix_size;
2110
int rc = 0;
2111
2112
(*encoded_name) = NULL;
2113
(*encoded_name_size) = 0;
2114
if ((crypt_stat && (crypt_stat->flags & ECRYPTFS_ENCRYPT_FILENAMES))
2115
|| (mount_crypt_stat && (mount_crypt_stat->flags
2116
& ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES))) {
2117
struct ecryptfs_filename *filename;
2118
2119
filename = kzalloc(sizeof(*filename), GFP_KERNEL);
2120
if (!filename) {
2121
printk(KERN_ERR "%s: Out of memory whilst attempting "
2122
"to kzalloc [%zd] bytes\n", __func__,
2123
sizeof(*filename));
2124
rc = -ENOMEM;
2125
goto out;
2126
}
2127
filename->filename = (char *)name;
2128
filename->filename_size = name_size;
2129
rc = ecryptfs_encrypt_filename(filename, crypt_stat,
2130
mount_crypt_stat);
2131
if (rc) {
2132
printk(KERN_ERR "%s: Error attempting to encrypt "
2133
"filename; rc = [%d]\n", __func__, rc);
2134
kfree(filename);
2135
goto out;
2136
}
2137
ecryptfs_encode_for_filename(
2138
NULL, &encoded_name_no_prefix_size,
2139
filename->encrypted_filename,
2140
filename->encrypted_filename_size);
2141
if ((crypt_stat && (crypt_stat->flags
2142
& ECRYPTFS_ENCFN_USE_MOUNT_FNEK))
2143
|| (mount_crypt_stat
2144
&& (mount_crypt_stat->flags
2145
& ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)))
2146
(*encoded_name_size) =
2147
(ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
2148
+ encoded_name_no_prefix_size);
2149
else
2150
(*encoded_name_size) =
2151
(ECRYPTFS_FEK_ENCRYPTED_FILENAME_PREFIX_SIZE
2152
+ encoded_name_no_prefix_size);
2153
(*encoded_name) = kmalloc((*encoded_name_size) + 1, GFP_KERNEL);
2154
if (!(*encoded_name)) {
2155
printk(KERN_ERR "%s: Out of memory whilst attempting "
2156
"to kzalloc [%zd] bytes\n", __func__,
2157
(*encoded_name_size));
2158
rc = -ENOMEM;
2159
kfree(filename->encrypted_filename);
2160
kfree(filename);
2161
goto out;
2162
}
2163
if ((crypt_stat && (crypt_stat->flags
2164
& ECRYPTFS_ENCFN_USE_MOUNT_FNEK))
2165
|| (mount_crypt_stat
2166
&& (mount_crypt_stat->flags
2167
& ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK))) {
2168
memcpy((*encoded_name),
2169
ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
2170
ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE);
2171
ecryptfs_encode_for_filename(
2172
((*encoded_name)
2173
+ ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE),
2174
&encoded_name_no_prefix_size,
2175
filename->encrypted_filename,
2176
filename->encrypted_filename_size);
2177
(*encoded_name_size) =
2178
(ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
2179
+ encoded_name_no_prefix_size);
2180
(*encoded_name)[(*encoded_name_size)] = '\0';
2181
} else {
2182
rc = -EOPNOTSUPP;
2183
}
2184
if (rc) {
2185
printk(KERN_ERR "%s: Error attempting to encode "
2186
"encrypted filename; rc = [%d]\n", __func__,
2187
rc);
2188
kfree((*encoded_name));
2189
(*encoded_name) = NULL;
2190
(*encoded_name_size) = 0;
2191
}
2192
kfree(filename->encrypted_filename);
2193
kfree(filename);
2194
} else {
2195
rc = ecryptfs_copy_filename(encoded_name,
2196
encoded_name_size,
2197
name, name_size);
2198
}
2199
out:
2200
return rc;
2201
}
2202
2203
/**
2204
* ecryptfs_decode_and_decrypt_filename - converts the encoded cipher text name to decoded plaintext
2205
* @plaintext_name: The plaintext name
2206
* @plaintext_name_size: The plaintext name size
2207
* @ecryptfs_dir_dentry: eCryptfs directory dentry
2208
* @name: The filename in cipher text
2209
* @name_size: The cipher text name size
2210
*
2211
* Decrypts and decodes the filename.
2212
*
2213
* Returns zero on error; non-zero otherwise
2214
*/
2215
int ecryptfs_decode_and_decrypt_filename(char **plaintext_name,
2216
size_t *plaintext_name_size,
2217
struct dentry *ecryptfs_dir_dentry,
2218
const char *name, size_t name_size)
2219
{
2220
struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
2221
&ecryptfs_superblock_to_private(
2222
ecryptfs_dir_dentry->d_sb)->mount_crypt_stat;
2223
char *decoded_name;
2224
size_t decoded_name_size;
2225
size_t packet_size;
2226
int rc = 0;
2227
2228
if ((mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES)
2229
&& !(mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
2230
&& (name_size > ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE)
2231
&& (strncmp(name, ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
2232
ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE) == 0)) {
2233
const char *orig_name = name;
2234
size_t orig_name_size = name_size;
2235
2236
name += ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE;
2237
name_size -= ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE;
2238
ecryptfs_decode_from_filename(NULL, &decoded_name_size,
2239
name, name_size);
2240
decoded_name = kmalloc(decoded_name_size, GFP_KERNEL);
2241
if (!decoded_name) {
2242
printk(KERN_ERR "%s: Out of memory whilst attempting "
2243
"to kmalloc [%zd] bytes\n", __func__,
2244
decoded_name_size);
2245
rc = -ENOMEM;
2246
goto out;
2247
}
2248
ecryptfs_decode_from_filename(decoded_name, &decoded_name_size,
2249
name, name_size);
2250
rc = ecryptfs_parse_tag_70_packet(plaintext_name,
2251
plaintext_name_size,
2252
&packet_size,
2253
mount_crypt_stat,
2254
decoded_name,
2255
decoded_name_size);
2256
if (rc) {
2257
printk(KERN_INFO "%s: Could not parse tag 70 packet "
2258
"from filename; copying through filename "
2259
"as-is\n", __func__);
2260
rc = ecryptfs_copy_filename(plaintext_name,
2261
plaintext_name_size,
2262
orig_name, orig_name_size);
2263
goto out_free;
2264
}
2265
} else {
2266
rc = ecryptfs_copy_filename(plaintext_name,
2267
plaintext_name_size,
2268
name, name_size);
2269
goto out;
2270
}
2271
out_free:
2272
kfree(decoded_name);
2273
out:
2274
return rc;
2275
}
2276
2277