1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * eCryptfs: Linux filesystem encryption layer 4 * 5 * Copyright (C) 1997-2004 Erez Zadok 6 * Copyright (C) 2001-2004 Stony Brook University 7 * Copyright (C) 2004-2007 International Business Machines Corp. 8 * Author(s): Michael A. Halcrow <mahalcro@us.ibm.com> 9 * Michael C. Thompsion <mcthomps@us.ibm.com> 10 */ 11 12 #include <linux/file.h> 13 #include <linux/vmalloc.h> 14 #include <linux/pagemap.h> 15 #include <linux/dcache.h> 16 #include <linux/namei.h> 17 #include <linux/mount.h> 18 #include <linux/fs_stack.h> 19 #include <linux/slab.h> 20 #include <linux/xattr.h> 21 #include <linux/posix_acl.h> 22 #include <linux/posix_acl_xattr.h> 23 #include <linux/fileattr.h> 24 #include <linux/unaligned.h> 25 #include "ecryptfs_kernel.h" 26 27 static int lock_parent(struct dentry *dentry, 28 struct dentry **lower_dentry, 29 struct inode **lower_dir) 30 { 31 struct dentry *lower_dir_dentry; 32 33 lower_dir_dentry = ecryptfs_dentry_to_lower(dentry->d_parent); 34 *lower_dir = d_inode(lower_dir_dentry); 35 *lower_dentry = ecryptfs_dentry_to_lower(dentry); 36 37 inode_lock_nested(*lower_dir, I_MUTEX_PARENT); 38 return (*lower_dentry)->d_parent == lower_dir_dentry ? 0 : -EINVAL; 39 } 40 41 static int ecryptfs_inode_test(struct inode *inode, void *lower_inode) 42 { 43 return ecryptfs_inode_to_lower(inode) == lower_inode; 44 } 45 46 static int ecryptfs_inode_set(struct inode *inode, void *opaque) 47 { 48 struct inode *lower_inode = opaque; 49 50 ecryptfs_set_inode_lower(inode, lower_inode); 51 fsstack_copy_attr_all(inode, lower_inode); 52 /* i_size will be overwritten for encrypted regular files */ 53 fsstack_copy_inode_size(inode, lower_inode); 54 inode->i_ino = lower_inode->i_ino; 55 inode->i_mapping->a_ops = &ecryptfs_aops; 56 57 if (S_ISLNK(inode->i_mode)) 58 inode->i_op = &ecryptfs_symlink_iops; 59 else if (S_ISDIR(inode->i_mode)) 60 inode->i_op = &ecryptfs_dir_iops; 61 else 62 inode->i_op = &ecryptfs_main_iops; 63 64 if (S_ISDIR(inode->i_mode)) 65 inode->i_fop = &ecryptfs_dir_fops; 66 else if (special_file(inode->i_mode)) 67 init_special_inode(inode, inode->i_mode, inode->i_rdev); 68 else 69 inode->i_fop = &ecryptfs_main_fops; 70 71 return 0; 72 } 73 74 static struct inode *__ecryptfs_get_inode(struct inode *lower_inode, 75 struct super_block *sb) 76 { 77 struct inode *inode; 78 79 if (lower_inode->i_sb != ecryptfs_superblock_to_lower(sb)) 80 return ERR_PTR(-EXDEV); 81 82 /* Reject dealing with casefold directories. */ 83 if (IS_CASEFOLDED(lower_inode)) { 84 pr_err_ratelimited("%s: Can't handle casefolded directory.\n", 85 __func__); 86 return ERR_PTR(-EREMOTE); 87 } 88 89 if (!igrab(lower_inode)) 90 return ERR_PTR(-ESTALE); 91 inode = iget5_locked(sb, (unsigned long)lower_inode, 92 ecryptfs_inode_test, ecryptfs_inode_set, 93 lower_inode); 94 if (!inode) { 95 iput(lower_inode); 96 return ERR_PTR(-EACCES); 97 } 98 if (!(inode_state_read_once(inode) & I_NEW)) 99 iput(lower_inode); 100 101 return inode; 102 } 103 104 struct inode *ecryptfs_get_inode(struct inode *lower_inode, 105 struct super_block *sb) 106 { 107 struct inode *inode = __ecryptfs_get_inode(lower_inode, sb); 108 109 if (!IS_ERR(inode) && (inode_state_read_once(inode) & I_NEW)) 110 unlock_new_inode(inode); 111 112 return inode; 113 } 114 115 /** 116 * ecryptfs_interpose 117 * @lower_dentry: Existing dentry in the lower filesystem 118 * @dentry: ecryptfs' dentry 119 * @sb: ecryptfs's super_block 120 * 121 * Interposes upper and lower dentries. 122 * 123 * Returns zero on success; non-zero otherwise 124 */ 125 static int ecryptfs_interpose(struct dentry *lower_dentry, 126 struct dentry *dentry, struct super_block *sb) 127 { 128 struct inode *inode = ecryptfs_get_inode(d_inode(lower_dentry), sb); 129 130 if (IS_ERR(inode)) 131 return PTR_ERR(inode); 132 d_instantiate(dentry, inode); 133 134 return 0; 135 } 136 137 static int ecryptfs_do_unlink(struct inode *dir, struct dentry *dentry, 138 struct inode *inode) 139 { 140 struct dentry *lower_dentry; 141 struct inode *lower_dir; 142 int rc; 143 144 rc = lock_parent(dentry, &lower_dentry, &lower_dir); 145 dget(lower_dentry); // don't even try to make the lower negative 146 if (!rc) { 147 if (d_unhashed(lower_dentry)) 148 rc = -EINVAL; 149 else 150 rc = vfs_unlink(&nop_mnt_idmap, lower_dir, lower_dentry, 151 NULL); 152 } 153 if (rc) { 154 printk(KERN_ERR "Error in vfs_unlink; rc = [%d]\n", rc); 155 goto out_unlock; 156 } 157 fsstack_copy_attr_times(dir, lower_dir); 158 set_nlink(inode, ecryptfs_inode_to_lower(inode)->i_nlink); 159 inode_set_ctime_to_ts(inode, inode_get_ctime(dir)); 160 out_unlock: 161 dput(lower_dentry); 162 inode_unlock(lower_dir); 163 if (!rc) 164 d_drop(dentry); 165 return rc; 166 } 167 168 /** 169 * ecryptfs_do_create 170 * @directory_inode: inode of the new file's dentry's parent in ecryptfs 171 * @ecryptfs_dentry: New file's dentry in ecryptfs 172 * @mode: The mode of the new file 173 * 174 * Creates the underlying file and the eCryptfs inode which will link to 175 * it. It will also update the eCryptfs directory inode to mimic the 176 * stat of the lower directory inode. 177 * 178 * Returns the new eCryptfs inode on success; an ERR_PTR on error condition 179 */ 180 static struct inode * 181 ecryptfs_do_create(struct inode *directory_inode, 182 struct dentry *ecryptfs_dentry, umode_t mode) 183 { 184 int rc; 185 struct dentry *lower_dentry; 186 struct inode *lower_dir; 187 struct inode *inode; 188 189 rc = lock_parent(ecryptfs_dentry, &lower_dentry, &lower_dir); 190 if (!rc) 191 rc = vfs_create(&nop_mnt_idmap, lower_dentry, mode, NULL); 192 if (rc) { 193 printk(KERN_ERR "%s: Failure to create dentry in lower fs; " 194 "rc = [%d]\n", __func__, rc); 195 inode = ERR_PTR(rc); 196 goto out_lock; 197 } 198 inode = __ecryptfs_get_inode(d_inode(lower_dentry), 199 directory_inode->i_sb); 200 if (IS_ERR(inode)) { 201 vfs_unlink(&nop_mnt_idmap, lower_dir, lower_dentry, NULL); 202 goto out_lock; 203 } 204 fsstack_copy_attr_times(directory_inode, lower_dir); 205 fsstack_copy_inode_size(directory_inode, lower_dir); 206 out_lock: 207 inode_unlock(lower_dir); 208 return inode; 209 } 210 211 /* 212 * ecryptfs_initialize_file 213 * 214 * Cause the file to be changed from a basic empty file to an ecryptfs 215 * file with a header and first data page. 216 * 217 * Returns zero on success 218 */ 219 int ecryptfs_initialize_file(struct dentry *ecryptfs_dentry, 220 struct inode *ecryptfs_inode) 221 { 222 struct ecryptfs_crypt_stat *crypt_stat = 223 &ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat; 224 int rc = 0; 225 226 if (S_ISDIR(ecryptfs_inode->i_mode)) { 227 ecryptfs_printk(KERN_DEBUG, "This is a directory\n"); 228 crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); 229 goto out; 230 } 231 ecryptfs_printk(KERN_DEBUG, "Initializing crypto context\n"); 232 rc = ecryptfs_new_file_context(ecryptfs_inode); 233 if (rc) { 234 ecryptfs_printk(KERN_ERR, "Error creating new file " 235 "context; rc = [%d]\n", rc); 236 goto out; 237 } 238 rc = ecryptfs_get_lower_file(ecryptfs_dentry, ecryptfs_inode); 239 if (rc) { 240 printk(KERN_ERR "%s: Error attempting to initialize " 241 "the lower file for the dentry with name " 242 "[%pd]; rc = [%d]\n", __func__, 243 ecryptfs_dentry, rc); 244 goto out; 245 } 246 rc = ecryptfs_write_metadata(ecryptfs_dentry, ecryptfs_inode); 247 if (rc) 248 printk(KERN_ERR "Error writing headers; rc = [%d]\n", rc); 249 ecryptfs_put_lower_file(ecryptfs_inode); 250 out: 251 return rc; 252 } 253 254 /* 255 * ecryptfs_create 256 * @mode: The mode of the new file. 257 * 258 * Creates a new file. 259 * 260 * Returns zero on success; non-zero on error condition 261 */ 262 static int 263 ecryptfs_create(struct mnt_idmap *idmap, 264 struct inode *directory_inode, struct dentry *ecryptfs_dentry, 265 umode_t mode, bool excl) 266 { 267 struct inode *ecryptfs_inode; 268 int rc; 269 270 ecryptfs_inode = ecryptfs_do_create(directory_inode, ecryptfs_dentry, 271 mode); 272 if (IS_ERR(ecryptfs_inode)) { 273 ecryptfs_printk(KERN_WARNING, "Failed to create file in" 274 "lower filesystem\n"); 275 rc = PTR_ERR(ecryptfs_inode); 276 goto out; 277 } 278 /* At this point, a file exists on "disk"; we need to make sure 279 * that this on disk file is prepared to be an ecryptfs file */ 280 rc = ecryptfs_initialize_file(ecryptfs_dentry, ecryptfs_inode); 281 if (rc) { 282 ecryptfs_do_unlink(directory_inode, ecryptfs_dentry, 283 ecryptfs_inode); 284 iget_failed(ecryptfs_inode); 285 goto out; 286 } 287 d_instantiate_new(ecryptfs_dentry, ecryptfs_inode); 288 out: 289 return rc; 290 } 291 292 static int ecryptfs_i_size_read(struct dentry *dentry, struct inode *inode) 293 { 294 struct ecryptfs_crypt_stat *crypt_stat; 295 int rc; 296 297 rc = ecryptfs_get_lower_file(dentry, inode); 298 if (rc) { 299 printk(KERN_ERR "%s: Error attempting to initialize " 300 "the lower file for the dentry with name " 301 "[%pd]; rc = [%d]\n", __func__, 302 dentry, rc); 303 return rc; 304 } 305 306 crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat; 307 /* TODO: lock for crypt_stat comparison */ 308 if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED)) 309 ecryptfs_set_default_sizes(crypt_stat); 310 311 rc = ecryptfs_read_and_validate_header_region(inode); 312 ecryptfs_put_lower_file(inode); 313 if (rc) { 314 rc = ecryptfs_read_and_validate_xattr_region(dentry, inode); 315 if (!rc) 316 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR; 317 } 318 319 /* Must return 0 to allow non-eCryptfs files to be looked up, too */ 320 return 0; 321 } 322 323 /* 324 * ecryptfs_lookup_interpose - Dentry interposition for a lookup 325 */ 326 static struct dentry *ecryptfs_lookup_interpose(struct dentry *dentry, 327 struct dentry *lower_dentry) 328 { 329 struct dentry *lower_parent = ecryptfs_dentry_to_lower(dentry->d_parent); 330 struct inode *inode, *lower_inode; 331 int rc = 0; 332 333 fsstack_copy_attr_atime(d_inode(dentry->d_parent), 334 d_inode(lower_parent)); 335 BUG_ON(!d_count(lower_dentry)); 336 337 ecryptfs_set_dentry_lower(dentry, lower_dentry); 338 339 /* 340 * negative dentry can go positive under us here - its parent is not 341 * locked. That's OK and that could happen just as we return from 342 * ecryptfs_lookup() anyway. Just need to be careful and fetch 343 * ->d_inode only once - it's not stable here. 344 */ 345 lower_inode = READ_ONCE(lower_dentry->d_inode); 346 347 if (!lower_inode) { 348 /* We want to add because we couldn't find in lower */ 349 d_add(dentry, NULL); 350 return NULL; 351 } 352 inode = __ecryptfs_get_inode(lower_inode, dentry->d_sb); 353 if (IS_ERR(inode)) { 354 printk(KERN_ERR "%s: Error interposing; rc = [%ld]\n", 355 __func__, PTR_ERR(inode)); 356 return ERR_CAST(inode); 357 } 358 if (S_ISREG(inode->i_mode)) { 359 rc = ecryptfs_i_size_read(dentry, inode); 360 if (rc) { 361 make_bad_inode(inode); 362 return ERR_PTR(rc); 363 } 364 } 365 366 if (inode_state_read_once(inode) & I_NEW) 367 unlock_new_inode(inode); 368 return d_splice_alias(inode, dentry); 369 } 370 371 /** 372 * ecryptfs_lookup 373 * @ecryptfs_dir_inode: The eCryptfs directory inode 374 * @ecryptfs_dentry: The eCryptfs dentry that we are looking up 375 * @flags: lookup flags 376 * 377 * Find a file on disk. If the file does not exist, then we'll add it to the 378 * dentry cache and continue on to read it from the disk. 379 */ 380 static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode, 381 struct dentry *ecryptfs_dentry, 382 unsigned int flags) 383 { 384 char *encrypted_and_encoded_name = NULL; 385 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 386 struct dentry *lower_dir_dentry, *lower_dentry; 387 struct qstr qname = QSTR_INIT(ecryptfs_dentry->d_name.name, 388 ecryptfs_dentry->d_name.len); 389 struct dentry *res; 390 int rc = 0; 391 392 lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent); 393 394 mount_crypt_stat = &ecryptfs_superblock_to_private( 395 ecryptfs_dentry->d_sb)->mount_crypt_stat; 396 if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) { 397 size_t len = qname.len; 398 rc = ecryptfs_encrypt_and_encode_filename( 399 &encrypted_and_encoded_name, &len, 400 mount_crypt_stat, qname.name, len); 401 if (rc) { 402 printk(KERN_ERR "%s: Error attempting to encrypt and encode " 403 "filename; rc = [%d]\n", __func__, rc); 404 return ERR_PTR(rc); 405 } 406 qname.name = encrypted_and_encoded_name; 407 qname.len = len; 408 } 409 410 lower_dentry = lookup_noperm_unlocked(&qname, lower_dir_dentry); 411 if (IS_ERR(lower_dentry)) { 412 ecryptfs_printk(KERN_DEBUG, "%s: lookup_noperm() returned " 413 "[%ld] on lower_dentry = [%s]\n", __func__, 414 PTR_ERR(lower_dentry), 415 qname.name); 416 res = ERR_CAST(lower_dentry); 417 } else { 418 res = ecryptfs_lookup_interpose(ecryptfs_dentry, lower_dentry); 419 } 420 kfree(encrypted_and_encoded_name); 421 return res; 422 } 423 424 static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir, 425 struct dentry *new_dentry) 426 { 427 struct dentry *lower_old_dentry; 428 struct dentry *lower_new_dentry; 429 struct inode *lower_dir; 430 u64 file_size_save; 431 int rc; 432 433 file_size_save = i_size_read(d_inode(old_dentry)); 434 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); 435 rc = lock_parent(new_dentry, &lower_new_dentry, &lower_dir); 436 if (!rc) 437 rc = vfs_link(lower_old_dentry, &nop_mnt_idmap, lower_dir, 438 lower_new_dentry, NULL); 439 if (rc || d_really_is_negative(lower_new_dentry)) 440 goto out_lock; 441 rc = ecryptfs_interpose(lower_new_dentry, new_dentry, dir->i_sb); 442 if (rc) 443 goto out_lock; 444 fsstack_copy_attr_times(dir, lower_dir); 445 fsstack_copy_inode_size(dir, lower_dir); 446 set_nlink(d_inode(old_dentry), 447 ecryptfs_inode_to_lower(d_inode(old_dentry))->i_nlink); 448 i_size_write(d_inode(new_dentry), file_size_save); 449 out_lock: 450 inode_unlock(lower_dir); 451 return rc; 452 } 453 454 static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry) 455 { 456 return ecryptfs_do_unlink(dir, dentry, d_inode(dentry)); 457 } 458 459 static int ecryptfs_symlink(struct mnt_idmap *idmap, 460 struct inode *dir, struct dentry *dentry, 461 const char *symname) 462 { 463 int rc; 464 struct dentry *lower_dentry; 465 struct inode *lower_dir; 466 char *encoded_symname; 467 size_t encoded_symlen; 468 struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL; 469 470 rc = lock_parent(dentry, &lower_dentry, &lower_dir); 471 if (rc) 472 goto out_lock; 473 mount_crypt_stat = &ecryptfs_superblock_to_private( 474 dir->i_sb)->mount_crypt_stat; 475 rc = ecryptfs_encrypt_and_encode_filename(&encoded_symname, 476 &encoded_symlen, 477 mount_crypt_stat, symname, 478 strlen(symname)); 479 if (rc) 480 goto out_lock; 481 rc = vfs_symlink(&nop_mnt_idmap, lower_dir, lower_dentry, 482 encoded_symname, NULL); 483 kfree(encoded_symname); 484 if (rc || d_really_is_negative(lower_dentry)) 485 goto out_lock; 486 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 487 if (rc) 488 goto out_lock; 489 fsstack_copy_attr_times(dir, lower_dir); 490 fsstack_copy_inode_size(dir, lower_dir); 491 out_lock: 492 inode_unlock(lower_dir); 493 if (d_really_is_negative(dentry)) 494 d_drop(dentry); 495 return rc; 496 } 497 498 static struct dentry *ecryptfs_mkdir(struct mnt_idmap *idmap, struct inode *dir, 499 struct dentry *dentry, umode_t mode) 500 { 501 int rc; 502 struct dentry *lower_dentry; 503 struct inode *lower_dir; 504 505 rc = lock_parent(dentry, &lower_dentry, &lower_dir); 506 if (rc) 507 goto out; 508 509 lower_dentry = vfs_mkdir(&nop_mnt_idmap, lower_dir, 510 lower_dentry, mode, NULL); 511 rc = PTR_ERR(lower_dentry); 512 if (IS_ERR(lower_dentry)) 513 goto out; 514 rc = 0; 515 if (d_unhashed(lower_dentry)) 516 goto out; 517 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 518 if (rc) 519 goto out; 520 fsstack_copy_attr_times(dir, lower_dir); 521 fsstack_copy_inode_size(dir, lower_dir); 522 set_nlink(dir, lower_dir->i_nlink); 523 out: 524 inode_unlock(lower_dir); 525 if (d_really_is_negative(dentry)) 526 d_drop(dentry); 527 return ERR_PTR(rc); 528 } 529 530 static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) 531 { 532 struct dentry *lower_dentry; 533 struct inode *lower_dir; 534 int rc; 535 536 rc = lock_parent(dentry, &lower_dentry, &lower_dir); 537 dget(lower_dentry); // don't even try to make the lower negative 538 if (!rc) { 539 if (d_unhashed(lower_dentry)) 540 rc = -EINVAL; 541 else 542 rc = vfs_rmdir(&nop_mnt_idmap, lower_dir, lower_dentry, NULL); 543 } 544 if (!rc) { 545 clear_nlink(d_inode(dentry)); 546 fsstack_copy_attr_times(dir, lower_dir); 547 set_nlink(dir, lower_dir->i_nlink); 548 } 549 dput(lower_dentry); 550 inode_unlock(lower_dir); 551 if (!rc) 552 d_drop(dentry); 553 return rc; 554 } 555 556 static int 557 ecryptfs_mknod(struct mnt_idmap *idmap, struct inode *dir, 558 struct dentry *dentry, umode_t mode, dev_t dev) 559 { 560 int rc; 561 struct dentry *lower_dentry; 562 struct inode *lower_dir; 563 564 rc = lock_parent(dentry, &lower_dentry, &lower_dir); 565 if (!rc) 566 rc = vfs_mknod(&nop_mnt_idmap, lower_dir, 567 lower_dentry, mode, dev, NULL); 568 if (rc || d_really_is_negative(lower_dentry)) 569 goto out; 570 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 571 if (rc) 572 goto out; 573 fsstack_copy_attr_times(dir, lower_dir); 574 fsstack_copy_inode_size(dir, lower_dir); 575 out: 576 inode_unlock(lower_dir); 577 if (d_really_is_negative(dentry)) 578 d_drop(dentry); 579 return rc; 580 } 581 582 static int 583 ecryptfs_rename(struct mnt_idmap *idmap, struct inode *old_dir, 584 struct dentry *old_dentry, struct inode *new_dir, 585 struct dentry *new_dentry, unsigned int flags) 586 { 587 int rc; 588 struct dentry *lower_old_dentry; 589 struct dentry *lower_new_dentry; 590 struct dentry *lower_old_dir_dentry; 591 struct dentry *lower_new_dir_dentry; 592 struct dentry *trap; 593 struct inode *target_inode; 594 struct renamedata rd = {}; 595 596 if (flags) 597 return -EINVAL; 598 599 lower_old_dir_dentry = ecryptfs_dentry_to_lower(old_dentry->d_parent); 600 lower_new_dir_dentry = ecryptfs_dentry_to_lower(new_dentry->d_parent); 601 602 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); 603 lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); 604 605 target_inode = d_inode(new_dentry); 606 607 trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry); 608 if (IS_ERR(trap)) 609 return PTR_ERR(trap); 610 dget(lower_new_dentry); 611 rc = -EINVAL; 612 if (lower_old_dentry->d_parent != lower_old_dir_dentry) 613 goto out_lock; 614 if (lower_new_dentry->d_parent != lower_new_dir_dentry) 615 goto out_lock; 616 if (d_unhashed(lower_old_dentry) || d_unhashed(lower_new_dentry)) 617 goto out_lock; 618 /* source should not be ancestor of target */ 619 if (trap == lower_old_dentry) 620 goto out_lock; 621 /* target should not be ancestor of source */ 622 if (trap == lower_new_dentry) { 623 rc = -ENOTEMPTY; 624 goto out_lock; 625 } 626 627 rd.mnt_idmap = &nop_mnt_idmap; 628 rd.old_parent = lower_old_dir_dentry; 629 rd.old_dentry = lower_old_dentry; 630 rd.new_parent = lower_new_dir_dentry; 631 rd.new_dentry = lower_new_dentry; 632 rc = vfs_rename(&rd); 633 if (rc) 634 goto out_lock; 635 if (target_inode) 636 fsstack_copy_attr_all(target_inode, 637 ecryptfs_inode_to_lower(target_inode)); 638 fsstack_copy_attr_all(new_dir, d_inode(lower_new_dir_dentry)); 639 if (new_dir != old_dir) 640 fsstack_copy_attr_all(old_dir, d_inode(lower_old_dir_dentry)); 641 out_lock: 642 dput(lower_new_dentry); 643 unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry); 644 return rc; 645 } 646 647 static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz) 648 { 649 DEFINE_DELAYED_CALL(done); 650 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); 651 const char *link; 652 char *buf; 653 int rc; 654 655 link = vfs_get_link(lower_dentry, &done); 656 if (IS_ERR(link)) 657 return ERR_CAST(link); 658 659 rc = ecryptfs_decode_and_decrypt_filename(&buf, bufsiz, dentry->d_sb, 660 link, strlen(link)); 661 do_delayed_call(&done); 662 if (rc) 663 return ERR_PTR(rc); 664 665 return buf; 666 } 667 668 static const char *ecryptfs_get_link(struct dentry *dentry, 669 struct inode *inode, 670 struct delayed_call *done) 671 { 672 size_t len; 673 char *buf; 674 675 if (!dentry) 676 return ERR_PTR(-ECHILD); 677 678 buf = ecryptfs_readlink_lower(dentry, &len); 679 if (IS_ERR(buf)) 680 return buf; 681 fsstack_copy_attr_atime(d_inode(dentry), 682 d_inode(ecryptfs_dentry_to_lower(dentry))); 683 buf[len] = '\0'; 684 set_delayed_call(done, kfree_link, buf); 685 return buf; 686 } 687 688 /** 689 * upper_size_to_lower_size 690 * @crypt_stat: Crypt_stat associated with file 691 * @upper_size: Size of the upper file 692 * 693 * Calculate the required size of the lower file based on the 694 * specified size of the upper file. This calculation is based on the 695 * number of headers in the underlying file and the extent size. 696 * 697 * Returns Calculated size of the lower file. 698 */ 699 static loff_t 700 upper_size_to_lower_size(struct ecryptfs_crypt_stat *crypt_stat, 701 loff_t upper_size) 702 { 703 loff_t lower_size; 704 705 lower_size = ecryptfs_lower_header_size(crypt_stat); 706 if (upper_size != 0) { 707 loff_t num_extents; 708 709 num_extents = upper_size >> crypt_stat->extent_shift; 710 if (upper_size & ~crypt_stat->extent_mask) 711 num_extents++; 712 lower_size += (num_extents * crypt_stat->extent_size); 713 } 714 return lower_size; 715 } 716 717 /** 718 * truncate_upper 719 * @dentry: The ecryptfs layer dentry 720 * @ia: Address of the ecryptfs inode's attributes 721 * @lower_ia: Address of the lower inode's attributes 722 * 723 * Function to handle truncations modifying the size of the file. Note 724 * that the file sizes are interpolated. When expanding, we are simply 725 * writing strings of 0's out. When truncating, we truncate the upper 726 * inode and update the lower_ia according to the page index 727 * interpolations. If ATTR_SIZE is set in lower_ia->ia_valid upon return, 728 * the caller must use lower_ia in a call to notify_change() to perform 729 * the truncation of the lower inode. 730 * 731 * Returns zero on success; non-zero otherwise 732 */ 733 static int truncate_upper(struct dentry *dentry, struct iattr *ia, 734 struct iattr *lower_ia) 735 { 736 int rc = 0; 737 struct inode *inode = d_inode(dentry); 738 struct ecryptfs_crypt_stat *crypt_stat; 739 loff_t i_size = i_size_read(inode); 740 loff_t lower_size_before_truncate; 741 loff_t lower_size_after_truncate; 742 743 if (unlikely((ia->ia_size == i_size))) { 744 lower_ia->ia_valid &= ~ATTR_SIZE; 745 return 0; 746 } 747 rc = ecryptfs_get_lower_file(dentry, inode); 748 if (rc) 749 return rc; 750 crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat; 751 /* Switch on growing or shrinking file */ 752 if (ia->ia_size > i_size) { 753 char zero[] = { 0x00 }; 754 755 lower_ia->ia_valid &= ~ATTR_SIZE; 756 /* Write a single 0 at the last position of the file; 757 * this triggers code that will fill in 0's throughout 758 * the intermediate portion of the previous end of the 759 * file and the new and of the file */ 760 rc = ecryptfs_write(inode, zero, 761 (ia->ia_size - 1), 1); 762 } else { /* ia->ia_size < i_size_read(inode) */ 763 /* We're chopping off all the pages down to the page 764 * in which ia->ia_size is located. Fill in the end of 765 * that page from (ia->ia_size & ~PAGE_MASK) to 766 * PAGE_SIZE with zeros. */ 767 size_t num_zeros = (PAGE_SIZE 768 - (ia->ia_size & ~PAGE_MASK)); 769 770 if (!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)) { 771 truncate_setsize(inode, ia->ia_size); 772 lower_ia->ia_size = ia->ia_size; 773 lower_ia->ia_valid |= ATTR_SIZE; 774 goto out; 775 } 776 if (num_zeros) { 777 char *zeros_virt; 778 779 zeros_virt = kzalloc(num_zeros, GFP_KERNEL); 780 if (!zeros_virt) { 781 rc = -ENOMEM; 782 goto out; 783 } 784 rc = ecryptfs_write(inode, zeros_virt, 785 ia->ia_size, num_zeros); 786 kfree(zeros_virt); 787 if (rc) { 788 printk(KERN_ERR "Error attempting to zero out " 789 "the remainder of the end page on " 790 "reducing truncate; rc = [%d]\n", rc); 791 goto out; 792 } 793 } 794 truncate_setsize(inode, ia->ia_size); 795 rc = ecryptfs_write_inode_size_to_metadata(inode); 796 if (rc) { 797 printk(KERN_ERR "Problem with " 798 "ecryptfs_write_inode_size_to_metadata; " 799 "rc = [%d]\n", rc); 800 goto out; 801 } 802 /* We are reducing the size of the ecryptfs file, and need to 803 * know if we need to reduce the size of the lower file. */ 804 lower_size_before_truncate = 805 upper_size_to_lower_size(crypt_stat, i_size); 806 lower_size_after_truncate = 807 upper_size_to_lower_size(crypt_stat, ia->ia_size); 808 if (lower_size_after_truncate < lower_size_before_truncate) { 809 lower_ia->ia_size = lower_size_after_truncate; 810 lower_ia->ia_valid |= ATTR_SIZE; 811 } else 812 lower_ia->ia_valid &= ~ATTR_SIZE; 813 } 814 out: 815 ecryptfs_put_lower_file(inode); 816 return rc; 817 } 818 819 static int ecryptfs_inode_newsize_ok(struct inode *inode, loff_t offset) 820 { 821 struct ecryptfs_crypt_stat *crypt_stat; 822 loff_t lower_oldsize, lower_newsize; 823 824 crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat; 825 lower_oldsize = upper_size_to_lower_size(crypt_stat, 826 i_size_read(inode)); 827 lower_newsize = upper_size_to_lower_size(crypt_stat, offset); 828 if (lower_newsize > lower_oldsize) { 829 /* 830 * The eCryptfs inode and the new *lower* size are mixed here 831 * because we may not have the lower i_mutex held and/or it may 832 * not be appropriate to call inode_newsize_ok() with inodes 833 * from other filesystems. 834 */ 835 return inode_newsize_ok(inode, lower_newsize); 836 } 837 838 return 0; 839 } 840 841 /** 842 * ecryptfs_truncate 843 * @dentry: The ecryptfs layer dentry 844 * @new_length: The length to expand the file to 845 * 846 * Simple function that handles the truncation of an eCryptfs inode and 847 * its corresponding lower inode. 848 * 849 * Returns zero on success; non-zero otherwise 850 */ 851 int ecryptfs_truncate(struct dentry *dentry, loff_t new_length) 852 { 853 struct iattr ia = { .ia_valid = ATTR_SIZE, .ia_size = new_length }; 854 struct iattr lower_ia = { .ia_valid = 0 }; 855 int rc; 856 857 rc = ecryptfs_inode_newsize_ok(d_inode(dentry), new_length); 858 if (rc) 859 return rc; 860 861 rc = truncate_upper(dentry, &ia, &lower_ia); 862 if (!rc && lower_ia.ia_valid & ATTR_SIZE) { 863 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); 864 865 inode_lock(d_inode(lower_dentry)); 866 rc = notify_change(&nop_mnt_idmap, lower_dentry, 867 &lower_ia, NULL); 868 inode_unlock(d_inode(lower_dentry)); 869 } 870 return rc; 871 } 872 873 static int 874 ecryptfs_permission(struct mnt_idmap *idmap, struct inode *inode, 875 int mask) 876 { 877 return inode_permission(&nop_mnt_idmap, 878 ecryptfs_inode_to_lower(inode), mask); 879 } 880 881 /** 882 * ecryptfs_setattr 883 * @idmap: idmap of the target mount 884 * @dentry: dentry handle to the inode to modify 885 * @ia: Structure with flags of what to change and values 886 * 887 * Updates the metadata of an inode. If the update is to the size 888 * i.e. truncation, then ecryptfs_truncate will handle the size modification 889 * of both the ecryptfs inode and the lower inode. 890 * 891 * All other metadata changes will be passed right to the lower filesystem, 892 * and we will just update our inode to look like the lower. 893 */ 894 static int ecryptfs_setattr(struct mnt_idmap *idmap, 895 struct dentry *dentry, struct iattr *ia) 896 { 897 int rc = 0; 898 struct dentry *lower_dentry; 899 struct iattr lower_ia; 900 struct inode *inode; 901 struct inode *lower_inode; 902 struct ecryptfs_crypt_stat *crypt_stat; 903 904 crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat; 905 if (!(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED)) 906 ecryptfs_init_crypt_stat(crypt_stat); 907 inode = d_inode(dentry); 908 lower_inode = ecryptfs_inode_to_lower(inode); 909 lower_dentry = ecryptfs_dentry_to_lower(dentry); 910 mutex_lock(&crypt_stat->cs_mutex); 911 if (d_is_dir(dentry)) 912 crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); 913 else if (d_is_reg(dentry) 914 && (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED) 915 || !(crypt_stat->flags & ECRYPTFS_KEY_VALID))) { 916 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 917 918 mount_crypt_stat = &ecryptfs_superblock_to_private( 919 dentry->d_sb)->mount_crypt_stat; 920 rc = ecryptfs_get_lower_file(dentry, inode); 921 if (rc) { 922 mutex_unlock(&crypt_stat->cs_mutex); 923 goto out; 924 } 925 rc = ecryptfs_read_metadata(dentry); 926 ecryptfs_put_lower_file(inode); 927 if (rc) { 928 if (!(mount_crypt_stat->flags 929 & ECRYPTFS_PLAINTEXT_PASSTHROUGH_ENABLED)) { 930 rc = -EIO; 931 printk(KERN_WARNING "Either the lower file " 932 "is not in a valid eCryptfs format, " 933 "or the key could not be retrieved. " 934 "Plaintext passthrough mode is not " 935 "enabled; returning -EIO\n"); 936 mutex_unlock(&crypt_stat->cs_mutex); 937 goto out; 938 } 939 rc = 0; 940 crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED 941 | ECRYPTFS_ENCRYPTED); 942 } 943 } 944 mutex_unlock(&crypt_stat->cs_mutex); 945 946 rc = setattr_prepare(&nop_mnt_idmap, dentry, ia); 947 if (rc) 948 goto out; 949 if (ia->ia_valid & ATTR_SIZE) { 950 rc = ecryptfs_inode_newsize_ok(inode, ia->ia_size); 951 if (rc) 952 goto out; 953 } 954 955 memcpy(&lower_ia, ia, sizeof(lower_ia)); 956 if (ia->ia_valid & ATTR_FILE) 957 lower_ia.ia_file = ecryptfs_file_to_lower(ia->ia_file); 958 if (ia->ia_valid & ATTR_SIZE) { 959 rc = truncate_upper(dentry, ia, &lower_ia); 960 if (rc < 0) 961 goto out; 962 } 963 964 /* 965 * mode change is for clearing setuid/setgid bits. Allow lower fs 966 * to interpret this in its own way. 967 */ 968 if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) 969 lower_ia.ia_valid &= ~ATTR_MODE; 970 971 inode_lock(d_inode(lower_dentry)); 972 rc = notify_change(&nop_mnt_idmap, lower_dentry, &lower_ia, NULL); 973 inode_unlock(d_inode(lower_dentry)); 974 out: 975 fsstack_copy_attr_all(inode, lower_inode); 976 return rc; 977 } 978 979 static int ecryptfs_getattr_link(struct mnt_idmap *idmap, 980 const struct path *path, struct kstat *stat, 981 u32 request_mask, unsigned int flags) 982 { 983 struct dentry *dentry = path->dentry; 984 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 985 int rc = 0; 986 987 mount_crypt_stat = &ecryptfs_superblock_to_private( 988 dentry->d_sb)->mount_crypt_stat; 989 generic_fillattr(&nop_mnt_idmap, request_mask, d_inode(dentry), stat); 990 if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) { 991 char *target; 992 size_t targetsiz; 993 994 target = ecryptfs_readlink_lower(dentry, &targetsiz); 995 if (!IS_ERR(target)) { 996 kfree(target); 997 stat->size = targetsiz; 998 } else { 999 rc = PTR_ERR(target); 1000 } 1001 } 1002 return rc; 1003 } 1004 1005 static int ecryptfs_getattr(struct mnt_idmap *idmap, 1006 const struct path *path, struct kstat *stat, 1007 u32 request_mask, unsigned int flags) 1008 { 1009 struct dentry *dentry = path->dentry; 1010 struct kstat lower_stat; 1011 struct path lower_path = ecryptfs_lower_path(dentry); 1012 int rc; 1013 1014 rc = vfs_getattr_nosec(&lower_path, &lower_stat, request_mask, flags); 1015 if (!rc) { 1016 fsstack_copy_attr_all(d_inode(dentry), 1017 ecryptfs_inode_to_lower(d_inode(dentry))); 1018 generic_fillattr(&nop_mnt_idmap, request_mask, 1019 d_inode(dentry), stat); 1020 stat->blocks = lower_stat.blocks; 1021 } 1022 return rc; 1023 } 1024 1025 int 1026 ecryptfs_setxattr(struct dentry *dentry, struct inode *inode, 1027 const char *name, const void *value, 1028 size_t size, int flags) 1029 { 1030 int rc; 1031 struct dentry *lower_dentry; 1032 struct inode *lower_inode; 1033 1034 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1035 lower_inode = d_inode(lower_dentry); 1036 if (!(lower_inode->i_opflags & IOP_XATTR)) { 1037 rc = -EOPNOTSUPP; 1038 goto out; 1039 } 1040 inode_lock(lower_inode); 1041 rc = __vfs_setxattr_locked(&nop_mnt_idmap, lower_dentry, name, value, size, flags, NULL); 1042 inode_unlock(lower_inode); 1043 if (!rc && inode) 1044 fsstack_copy_attr_all(inode, lower_inode); 1045 out: 1046 return rc; 1047 } 1048 1049 ssize_t 1050 ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, 1051 const char *name, void *value, size_t size) 1052 { 1053 int rc; 1054 1055 if (!(lower_inode->i_opflags & IOP_XATTR)) { 1056 rc = -EOPNOTSUPP; 1057 goto out; 1058 } 1059 inode_lock(lower_inode); 1060 rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size); 1061 inode_unlock(lower_inode); 1062 out: 1063 return rc; 1064 } 1065 1066 static ssize_t 1067 ecryptfs_getxattr(struct dentry *dentry, struct inode *inode, 1068 const char *name, void *value, size_t size) 1069 { 1070 return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), 1071 ecryptfs_inode_to_lower(inode), 1072 name, value, size); 1073 } 1074 1075 static ssize_t 1076 ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size) 1077 { 1078 int rc = 0; 1079 struct dentry *lower_dentry; 1080 1081 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1082 if (!d_inode(lower_dentry)->i_op->listxattr) { 1083 rc = -EOPNOTSUPP; 1084 goto out; 1085 } 1086 inode_lock(d_inode(lower_dentry)); 1087 rc = d_inode(lower_dentry)->i_op->listxattr(lower_dentry, list, size); 1088 inode_unlock(d_inode(lower_dentry)); 1089 out: 1090 return rc; 1091 } 1092 1093 static int ecryptfs_removexattr(struct dentry *dentry, struct inode *inode, 1094 const char *name) 1095 { 1096 int rc; 1097 struct dentry *lower_dentry; 1098 struct inode *lower_inode; 1099 1100 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1101 lower_inode = ecryptfs_inode_to_lower(inode); 1102 if (!(lower_inode->i_opflags & IOP_XATTR)) { 1103 rc = -EOPNOTSUPP; 1104 goto out; 1105 } 1106 inode_lock(lower_inode); 1107 rc = __vfs_removexattr(&nop_mnt_idmap, lower_dentry, name); 1108 inode_unlock(lower_inode); 1109 out: 1110 return rc; 1111 } 1112 1113 static int ecryptfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa) 1114 { 1115 return vfs_fileattr_get(ecryptfs_dentry_to_lower(dentry), fa); 1116 } 1117 1118 static int ecryptfs_fileattr_set(struct mnt_idmap *idmap, 1119 struct dentry *dentry, struct file_kattr *fa) 1120 { 1121 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); 1122 int rc; 1123 1124 rc = vfs_fileattr_set(&nop_mnt_idmap, lower_dentry, fa); 1125 fsstack_copy_attr_all(d_inode(dentry), d_inode(lower_dentry)); 1126 1127 return rc; 1128 } 1129 1130 static struct posix_acl *ecryptfs_get_acl(struct mnt_idmap *idmap, 1131 struct dentry *dentry, int type) 1132 { 1133 return vfs_get_acl(idmap, ecryptfs_dentry_to_lower(dentry), 1134 posix_acl_xattr_name(type)); 1135 } 1136 1137 static int ecryptfs_set_acl(struct mnt_idmap *idmap, 1138 struct dentry *dentry, struct posix_acl *acl, 1139 int type) 1140 { 1141 int rc; 1142 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); 1143 struct inode *lower_inode = d_inode(lower_dentry); 1144 1145 rc = vfs_set_acl(&nop_mnt_idmap, lower_dentry, 1146 posix_acl_xattr_name(type), acl); 1147 if (!rc) 1148 fsstack_copy_attr_all(d_inode(dentry), lower_inode); 1149 return rc; 1150 } 1151 1152 const struct inode_operations ecryptfs_symlink_iops = { 1153 .get_link = ecryptfs_get_link, 1154 .permission = ecryptfs_permission, 1155 .setattr = ecryptfs_setattr, 1156 .getattr = ecryptfs_getattr_link, 1157 .listxattr = ecryptfs_listxattr, 1158 }; 1159 1160 const struct inode_operations ecryptfs_dir_iops = { 1161 .create = ecryptfs_create, 1162 .lookup = ecryptfs_lookup, 1163 .link = ecryptfs_link, 1164 .unlink = ecryptfs_unlink, 1165 .symlink = ecryptfs_symlink, 1166 .mkdir = ecryptfs_mkdir, 1167 .rmdir = ecryptfs_rmdir, 1168 .mknod = ecryptfs_mknod, 1169 .rename = ecryptfs_rename, 1170 .permission = ecryptfs_permission, 1171 .setattr = ecryptfs_setattr, 1172 .listxattr = ecryptfs_listxattr, 1173 .fileattr_get = ecryptfs_fileattr_get, 1174 .fileattr_set = ecryptfs_fileattr_set, 1175 .get_acl = ecryptfs_get_acl, 1176 .set_acl = ecryptfs_set_acl, 1177 }; 1178 1179 const struct inode_operations ecryptfs_main_iops = { 1180 .permission = ecryptfs_permission, 1181 .setattr = ecryptfs_setattr, 1182 .getattr = ecryptfs_getattr, 1183 .listxattr = ecryptfs_listxattr, 1184 .fileattr_get = ecryptfs_fileattr_get, 1185 .fileattr_set = ecryptfs_fileattr_set, 1186 .get_acl = ecryptfs_get_acl, 1187 .set_acl = ecryptfs_set_acl, 1188 }; 1189 1190 static int ecryptfs_xattr_get(const struct xattr_handler *handler, 1191 struct dentry *dentry, struct inode *inode, 1192 const char *name, void *buffer, size_t size) 1193 { 1194 return ecryptfs_getxattr(dentry, inode, name, buffer, size); 1195 } 1196 1197 static int ecryptfs_xattr_set(const struct xattr_handler *handler, 1198 struct mnt_idmap *idmap, 1199 struct dentry *dentry, struct inode *inode, 1200 const char *name, const void *value, size_t size, 1201 int flags) 1202 { 1203 if (value) 1204 return ecryptfs_setxattr(dentry, inode, name, value, size, flags); 1205 else { 1206 BUG_ON(flags != XATTR_REPLACE); 1207 return ecryptfs_removexattr(dentry, inode, name); 1208 } 1209 } 1210 1211 static const struct xattr_handler ecryptfs_xattr_handler = { 1212 .prefix = "", /* match anything */ 1213 .get = ecryptfs_xattr_get, 1214 .set = ecryptfs_xattr_set, 1215 }; 1216 1217 const struct xattr_handler * const ecryptfs_xattr_handlers[] = { 1218 &ecryptfs_xattr_handler, 1219 NULL 1220 }; 1221