crypto.c (05db67a4f2c14dab5bcaa46c7d4e9237bd11b37c) | crypto.c (18d1dbf1d401e8f9d74cf1cf799fdb19cff150c6) |
---|---|
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 <mahalcro@us.ibm.com> 8 * Michael C. Thompson <mcthomps@us.ibm.com> --- 105 unchanged lines hidden (view full) --- 114 goto out; 115 } 116 crypt_stat->hash_tfm = desc.tfm; 117 } 118 rc = crypto_hash_init(&desc); 119 if (rc) { 120 printk(KERN_ERR 121 "%s: Error initializing crypto hash; rc = [%d]\n", | 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 <mahalcro@us.ibm.com> 8 * Michael C. Thompson <mcthomps@us.ibm.com> --- 105 unchanged lines hidden (view full) --- 114 goto out; 115 } 116 crypt_stat->hash_tfm = desc.tfm; 117 } 118 rc = crypto_hash_init(&desc); 119 if (rc) { 120 printk(KERN_ERR 121 "%s: Error initializing crypto hash; rc = [%d]\n", |
122 __FUNCTION__, rc); | 122 __func__, rc); |
123 goto out; 124 } 125 rc = crypto_hash_update(&desc, &sg, len); 126 if (rc) { 127 printk(KERN_ERR 128 "%s: Error updating crypto hash; rc = [%d]\n", | 123 goto out; 124 } 125 rc = crypto_hash_update(&desc, &sg, len); 126 if (rc) { 127 printk(KERN_ERR 128 "%s: Error updating crypto hash; rc = [%d]\n", |
129 __FUNCTION__, rc); | 129 __func__, rc); |
130 goto out; 131 } 132 rc = crypto_hash_final(&desc, dst); 133 if (rc) { 134 printk(KERN_ERR 135 "%s: Error finalizing crypto hash; rc = [%d]\n", | 130 goto out; 131 } 132 rc = crypto_hash_final(&desc, dst); 133 if (rc) { 134 printk(KERN_ERR 135 "%s: Error finalizing crypto hash; rc = [%d]\n", |
136 __FUNCTION__, rc); | 136 __func__, rc); |
137 goto out; 138 } 139out: 140 mutex_unlock(&crypt_stat->cs_hash_tfm_mutex); 141 return rc; 142} 143 144static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name, --- 287 unchanged lines hidden (view full) --- 432 } 433 rc = ecryptfs_encrypt_page_offset(crypt_stat, enc_extent_page, 0, 434 page, (extent_offset 435 * crypt_stat->extent_size), 436 crypt_stat->extent_size, extent_iv); 437 if (rc < 0) { 438 printk(KERN_ERR "%s: Error attempting to encrypt page with " 439 "page->index = [%ld], extent_offset = [%ld]; " | 137 goto out; 138 } 139out: 140 mutex_unlock(&crypt_stat->cs_hash_tfm_mutex); 141 return rc; 142} 143 144static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name, --- 287 unchanged lines hidden (view full) --- 432 } 433 rc = ecryptfs_encrypt_page_offset(crypt_stat, enc_extent_page, 0, 434 page, (extent_offset 435 * crypt_stat->extent_size), 436 crypt_stat->extent_size, extent_iv); 437 if (rc < 0) { 438 printk(KERN_ERR "%s: Error attempting to encrypt page with " 439 "page->index = [%ld], extent_offset = [%ld]; " |
440 "rc = [%d]\n", __FUNCTION__, page->index, extent_offset, | 440 "rc = [%d]\n", __func__, page->index, extent_offset, |
441 rc); 442 goto out; 443 } 444 rc = 0; 445 if (unlikely(ecryptfs_verbosity > 0)) { 446 ecryptfs_printk(KERN_DEBUG, "Encrypt extent [0x%.16x]; " 447 "rc = [%d]\n", (extent_base + extent_offset), 448 rc); --- 33 unchanged lines hidden (view full) --- 482 ecryptfs_inode = page->mapping->host; 483 crypt_stat = 484 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 485 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 486 rc = ecryptfs_write_lower_page_segment(ecryptfs_inode, page, 487 0, PAGE_CACHE_SIZE); 488 if (rc) 489 printk(KERN_ERR "%s: Error attempting to copy " | 441 rc); 442 goto out; 443 } 444 rc = 0; 445 if (unlikely(ecryptfs_verbosity > 0)) { 446 ecryptfs_printk(KERN_DEBUG, "Encrypt extent [0x%.16x]; " 447 "rc = [%d]\n", (extent_base + extent_offset), 448 rc); --- 33 unchanged lines hidden (view full) --- 482 ecryptfs_inode = page->mapping->host; 483 crypt_stat = 484 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 485 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 486 rc = ecryptfs_write_lower_page_segment(ecryptfs_inode, page, 487 0, PAGE_CACHE_SIZE); 488 if (rc) 489 printk(KERN_ERR "%s: Error attempting to copy " |
490 "page at index [%ld]\n", __FUNCTION__, | 490 "page at index [%ld]\n", __func__, |
491 page->index); 492 goto out; 493 } 494 enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); 495 if (!enc_extent_virt) { 496 rc = -ENOMEM; 497 ecryptfs_printk(KERN_ERR, "Error allocating memory for " 498 "encrypted extent\n"); --- 4 unchanged lines hidden (view full) --- 503 extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); 504 extent_offset++) { 505 loff_t offset; 506 507 rc = ecryptfs_encrypt_extent(enc_extent_page, crypt_stat, page, 508 extent_offset); 509 if (rc) { 510 printk(KERN_ERR "%s: Error encrypting extent; " | 491 page->index); 492 goto out; 493 } 494 enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); 495 if (!enc_extent_virt) { 496 rc = -ENOMEM; 497 ecryptfs_printk(KERN_ERR, "Error allocating memory for " 498 "encrypted extent\n"); --- 4 unchanged lines hidden (view full) --- 503 extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size); 504 extent_offset++) { 505 loff_t offset; 506 507 rc = ecryptfs_encrypt_extent(enc_extent_page, crypt_stat, page, 508 extent_offset); 509 if (rc) { 510 printk(KERN_ERR "%s: Error encrypting extent; " |
511 "rc = [%d]\n", __FUNCTION__, rc); | 511 "rc = [%d]\n", __func__, rc); |
512 goto out; 513 } 514 ecryptfs_lower_offset_for_extent( 515 &offset, ((((loff_t)page->index) 516 * (PAGE_CACHE_SIZE 517 / crypt_stat->extent_size)) 518 + extent_offset), crypt_stat); 519 rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, --- 44 unchanged lines hidden (view full) --- 564 rc = ecryptfs_decrypt_page_offset(crypt_stat, page, 565 (extent_offset 566 * crypt_stat->extent_size), 567 enc_extent_page, 0, 568 crypt_stat->extent_size, extent_iv); 569 if (rc < 0) { 570 printk(KERN_ERR "%s: Error attempting to decrypt to page with " 571 "page->index = [%ld], extent_offset = [%ld]; " | 512 goto out; 513 } 514 ecryptfs_lower_offset_for_extent( 515 &offset, ((((loff_t)page->index) 516 * (PAGE_CACHE_SIZE 517 / crypt_stat->extent_size)) 518 + extent_offset), crypt_stat); 519 rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, --- 44 unchanged lines hidden (view full) --- 564 rc = ecryptfs_decrypt_page_offset(crypt_stat, page, 565 (extent_offset 566 * crypt_stat->extent_size), 567 enc_extent_page, 0, 568 crypt_stat->extent_size, extent_iv); 569 if (rc < 0) { 570 printk(KERN_ERR "%s: Error attempting to decrypt to page with " 571 "page->index = [%ld], extent_offset = [%ld]; " |
572 "rc = [%d]\n", __FUNCTION__, page->index, extent_offset, | 572 "rc = [%d]\n", __func__, page->index, extent_offset, |
573 rc); 574 goto out; 575 } 576 rc = 0; 577 if (unlikely(ecryptfs_verbosity > 0)) { 578 ecryptfs_printk(KERN_DEBUG, "Decrypt extent [0x%.16x]; " 579 "rc = [%d]\n", (extent_base + extent_offset), 580 rc); --- 36 unchanged lines hidden (view full) --- 617 crypt_stat = 618 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 619 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 620 rc = ecryptfs_read_lower_page_segment(page, page->index, 0, 621 PAGE_CACHE_SIZE, 622 ecryptfs_inode); 623 if (rc) 624 printk(KERN_ERR "%s: Error attempting to copy " | 573 rc); 574 goto out; 575 } 576 rc = 0; 577 if (unlikely(ecryptfs_verbosity > 0)) { 578 ecryptfs_printk(KERN_DEBUG, "Decrypt extent [0x%.16x]; " 579 "rc = [%d]\n", (extent_base + extent_offset), 580 rc); --- 36 unchanged lines hidden (view full) --- 617 crypt_stat = 618 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 619 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 620 rc = ecryptfs_read_lower_page_segment(page, page->index, 0, 621 PAGE_CACHE_SIZE, 622 ecryptfs_inode); 623 if (rc) 624 printk(KERN_ERR "%s: Error attempting to copy " |
625 "page at index [%ld]\n", __FUNCTION__, | 625 "page at index [%ld]\n", __func__, |
626 page->index); 627 goto out; 628 } 629 enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); 630 if (!enc_extent_virt) { 631 rc = -ENOMEM; 632 ecryptfs_printk(KERN_ERR, "Error allocating memory for " 633 "encrypted extent\n"); --- 17 unchanged lines hidden (view full) --- 651 "to read lower page; rc = [%d]" 652 "\n", rc); 653 goto out; 654 } 655 rc = ecryptfs_decrypt_extent(page, crypt_stat, enc_extent_page, 656 extent_offset); 657 if (rc) { 658 printk(KERN_ERR "%s: Error encrypting extent; " | 626 page->index); 627 goto out; 628 } 629 enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER); 630 if (!enc_extent_virt) { 631 rc = -ENOMEM; 632 ecryptfs_printk(KERN_ERR, "Error allocating memory for " 633 "encrypted extent\n"); --- 17 unchanged lines hidden (view full) --- 651 "to read lower page; rc = [%d]" 652 "\n", rc); 653 goto out; 654 } 655 rc = ecryptfs_decrypt_extent(page, crypt_stat, enc_extent_page, 656 extent_offset); 657 if (rc) { 658 printk(KERN_ERR "%s: Error encrypting extent; " |
659 "rc = [%d]\n", __FUNCTION__, rc); | 659 "rc = [%d]\n", __func__, rc); |
660 goto out; 661 } 662 } 663out: 664 kfree(enc_extent_virt); 665 return rc; 666} 667 --- 542 unchanged lines hidden (view full) --- 1210 struct ecryptfs_crypt_stat *crypt_stat = 1211 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 1212 int rc; 1213 1214 rc = ecryptfs_read_lower(data, 0, crypt_stat->extent_size, 1215 ecryptfs_inode); 1216 if (rc) { 1217 printk(KERN_ERR "%s: Error reading header region; rc = [%d]\n", | 660 goto out; 661 } 662 } 663out: 664 kfree(enc_extent_virt); 665 return rc; 666} 667 --- 542 unchanged lines hidden (view full) --- 1210 struct ecryptfs_crypt_stat *crypt_stat = 1211 &(ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat); 1212 int rc; 1213 1214 rc = ecryptfs_read_lower(data, 0, crypt_stat->extent_size, 1215 ecryptfs_inode); 1216 if (rc) { 1217 printk(KERN_ERR "%s: Error reading header region; rc = [%d]\n", |
1218 __FUNCTION__, rc); | 1218 __func__, rc); |
1219 goto out; 1220 } 1221 if (!contains_ecryptfs_marker(data + ECRYPTFS_FILE_SIZE_BYTES)) { 1222 rc = -EINVAL; 1223 ecryptfs_printk(KERN_DEBUG, "Valid marker not found\n"); 1224 } 1225out: 1226 return rc; --- 87 unchanged lines hidden (view full) --- 1314 char *virt) 1315{ 1316 int rc; 1317 1318 rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode, virt, 1319 0, crypt_stat->num_header_bytes_at_front); 1320 if (rc) 1321 printk(KERN_ERR "%s: Error attempting to write header " | 1219 goto out; 1220 } 1221 if (!contains_ecryptfs_marker(data + ECRYPTFS_FILE_SIZE_BYTES)) { 1222 rc = -EINVAL; 1223 ecryptfs_printk(KERN_DEBUG, "Valid marker not found\n"); 1224 } 1225out: 1226 return rc; --- 87 unchanged lines hidden (view full) --- 1314 char *virt) 1315{ 1316 int rc; 1317 1318 rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode, virt, 1319 0, crypt_stat->num_header_bytes_at_front); 1320 if (rc) 1321 printk(KERN_ERR "%s: Error attempting to write header " |
1322 "information to lower file; rc = [%d]\n", __FUNCTION__, | 1322 "information to lower file; rc = [%d]\n", __func__, |
1323 rc); 1324 return rc; 1325} 1326 1327static int 1328ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry, 1329 struct ecryptfs_crypt_stat *crypt_stat, 1330 char *page_virt, size_t size) --- 28 unchanged lines hidden (view full) --- 1359 if (likely(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 1360 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) { 1361 printk(KERN_ERR "Key is invalid; bailing out\n"); 1362 rc = -EINVAL; 1363 goto out; 1364 } 1365 } else { 1366 printk(KERN_WARNING "%s: Encrypted flag not set\n", | 1323 rc); 1324 return rc; 1325} 1326 1327static int 1328ecryptfs_write_metadata_to_xattr(struct dentry *ecryptfs_dentry, 1329 struct ecryptfs_crypt_stat *crypt_stat, 1330 char *page_virt, size_t size) --- 28 unchanged lines hidden (view full) --- 1359 if (likely(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 1360 if (!(crypt_stat->flags & ECRYPTFS_KEY_VALID)) { 1361 printk(KERN_ERR "Key is invalid; bailing out\n"); 1362 rc = -EINVAL; 1363 goto out; 1364 } 1365 } else { 1366 printk(KERN_WARNING "%s: Encrypted flag not set\n", |
1367 __FUNCTION__); | 1367 __func__); |
1368 rc = -EINVAL; 1369 goto out; 1370 } 1371 /* Released in this function */ 1372 virt = kzalloc(crypt_stat->num_header_bytes_at_front, GFP_KERNEL); 1373 if (!virt) { | 1368 rc = -EINVAL; 1369 goto out; 1370 } 1371 /* Released in this function */ 1372 virt = kzalloc(crypt_stat->num_header_bytes_at_front, GFP_KERNEL); 1373 if (!virt) { |
1374 printk(KERN_ERR "%s: Out of memory\n", __FUNCTION__); | 1374 printk(KERN_ERR "%s: Out of memory\n", __func__); |
1375 rc = -ENOMEM; 1376 goto out; 1377 } 1378 rc = ecryptfs_write_headers_virt(virt, &size, crypt_stat, 1379 ecryptfs_dentry); 1380 if (unlikely(rc)) { 1381 printk(KERN_ERR "%s: Error whilst writing headers; rc = [%d]\n", | 1375 rc = -ENOMEM; 1376 goto out; 1377 } 1378 rc = ecryptfs_write_headers_virt(virt, &size, crypt_stat, 1379 ecryptfs_dentry); 1380 if (unlikely(rc)) { 1381 printk(KERN_ERR "%s: Error whilst writing headers; rc = [%d]\n", |
1382 __FUNCTION__, rc); | 1382 __func__, rc); |
1383 goto out_free; 1384 } 1385 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) 1386 rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry, 1387 crypt_stat, virt, size); 1388 else 1389 rc = ecryptfs_write_metadata_to_contents(crypt_stat, 1390 ecryptfs_dentry, virt); 1391 if (rc) { 1392 printk(KERN_ERR "%s: Error writing metadata out to lower file; " | 1383 goto out_free; 1384 } 1385 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) 1386 rc = ecryptfs_write_metadata_to_xattr(ecryptfs_dentry, 1387 crypt_stat, virt, size); 1388 else 1389 rc = ecryptfs_write_metadata_to_contents(crypt_stat, 1390 ecryptfs_dentry, virt); 1391 if (rc) { 1392 printk(KERN_ERR "%s: Error writing metadata out to lower file; " |
1393 "rc = [%d]\n", __FUNCTION__, rc); | 1393 "rc = [%d]\n", __func__, rc); |
1394 goto out_free; 1395 } 1396out_free: 1397 memset(virt, 0, crypt_stat->num_header_bytes_at_front); 1398 kfree(virt); 1399out: 1400 return rc; 1401} --- 177 unchanged lines hidden (view full) --- 1579 1580 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat, 1581 mount_crypt_stat); 1582 /* Read the first page from the underlying file */ 1583 page_virt = kmem_cache_alloc(ecryptfs_header_cache_1, GFP_USER); 1584 if (!page_virt) { 1585 rc = -ENOMEM; 1586 printk(KERN_ERR "%s: Unable to allocate page_virt\n", | 1394 goto out_free; 1395 } 1396out_free: 1397 memset(virt, 0, crypt_stat->num_header_bytes_at_front); 1398 kfree(virt); 1399out: 1400 return rc; 1401} --- 177 unchanged lines hidden (view full) --- 1579 1580 ecryptfs_copy_mount_wide_flags_to_inode_flags(crypt_stat, 1581 mount_crypt_stat); 1582 /* Read the first page from the underlying file */ 1583 page_virt = kmem_cache_alloc(ecryptfs_header_cache_1, GFP_USER); 1584 if (!page_virt) { 1585 rc = -ENOMEM; 1586 printk(KERN_ERR "%s: Unable to allocate page_virt\n", |
1587 __FUNCTION__); | 1587 __func__); |
1588 goto out; 1589 } 1590 rc = ecryptfs_read_lower(page_virt, 0, crypt_stat->extent_size, 1591 ecryptfs_inode); 1592 if (!rc) 1593 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat, 1594 ecryptfs_dentry, 1595 ECRYPTFS_VALIDATE_HEADER_SIZE); --- 319 unchanged lines hidden --- | 1588 goto out; 1589 } 1590 rc = ecryptfs_read_lower(page_virt, 0, crypt_stat->extent_size, 1591 ecryptfs_inode); 1592 if (!rc) 1593 rc = ecryptfs_read_headers_virt(page_virt, crypt_stat, 1594 ecryptfs_dentry, 1595 ECRYPTFS_VALIDATE_HEADER_SIZE); --- 319 unchanged lines hidden --- |