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 <asm/unaligned.h> 22#include "ecryptfs_kernel.h" 23 24static struct dentry *lock_parent(struct dentry *dentry) 25{ 26 struct dentry *dir; 27 28 dir = dget_parent(dentry); 29 inode_lock_nested(d_inode(dir), I_MUTEX_PARENT); 30 return dir; 31} 32 33static void unlock_dir(struct dentry *dir) 34{ 35 inode_unlock(d_inode(dir)); 36 dput(dir); 37} 38 39static int ecryptfs_inode_test(struct inode *inode, void *lower_inode) 40{ 41 return ecryptfs_inode_to_lower(inode) == lower_inode; 42} 43 44static int ecryptfs_inode_set(struct inode *inode, void *opaque) 45{ 46 struct inode *lower_inode = opaque; 47 48 ecryptfs_set_inode_lower(inode, lower_inode); 49 fsstack_copy_attr_all(inode, lower_inode); 50 /* i_size will be overwritten for encrypted regular files */ 51 fsstack_copy_inode_size(inode, lower_inode); 52 inode->i_ino = lower_inode->i_ino; 53 inode->i_mapping->a_ops = &ecryptfs_aops; 54 55 if (S_ISLNK(inode->i_mode)) 56 inode->i_op = &ecryptfs_symlink_iops; 57 else if (S_ISDIR(inode->i_mode)) 58 inode->i_op = &ecryptfs_dir_iops; 59 else 60 inode->i_op = &ecryptfs_main_iops; 61 62 if (S_ISDIR(inode->i_mode)) 63 inode->i_fop = &ecryptfs_dir_fops; 64 else if (special_file(inode->i_mode)) 65 init_special_inode(inode, inode->i_mode, inode->i_rdev); 66 else 67 inode->i_fop = &ecryptfs_main_fops; 68 69 return 0; 70} 71 72static struct inode *__ecryptfs_get_inode(struct inode *lower_inode, 73 struct super_block *sb) 74{ 75 struct inode *inode; 76 77 if (lower_inode->i_sb != ecryptfs_superblock_to_lower(sb)) 78 return ERR_PTR(-EXDEV); 79 80 /* Reject dealing with casefold directories. */ 81 if (IS_CASEFOLDED(lower_inode)) { 82 pr_err_ratelimited("%s: Can't handle casefolded directory.\n", 83 __func__); 84 return ERR_PTR(-EREMOTE); 85 } 86 87 if (!igrab(lower_inode)) 88 return ERR_PTR(-ESTALE); 89 inode = iget5_locked(sb, (unsigned long)lower_inode, 90 ecryptfs_inode_test, ecryptfs_inode_set, 91 lower_inode); 92 if (!inode) { 93 iput(lower_inode); 94 return ERR_PTR(-EACCES); 95 } 96 if (!(inode->i_state & I_NEW)) 97 iput(lower_inode); 98 99 return inode; 100} 101 102struct inode *ecryptfs_get_inode(struct inode *lower_inode, 103 struct super_block *sb) 104{ 105 struct inode *inode = __ecryptfs_get_inode(lower_inode, sb); 106 107 if (!IS_ERR(inode) && (inode->i_state & I_NEW)) 108 unlock_new_inode(inode); 109 110 return inode; 111} 112 113/** 114 * ecryptfs_interpose 115 * @lower_dentry: Existing dentry in the lower filesystem 116 * @dentry: ecryptfs' dentry 117 * @sb: ecryptfs's super_block 118 * 119 * Interposes upper and lower dentries. 120 * 121 * Returns zero on success; non-zero otherwise 122 */ 123static int ecryptfs_interpose(struct dentry *lower_dentry, 124 struct dentry *dentry, struct super_block *sb) 125{ 126 struct inode *inode = ecryptfs_get_inode(d_inode(lower_dentry), sb); 127 128 if (IS_ERR(inode)) 129 return PTR_ERR(inode); 130 d_instantiate(dentry, inode); 131 132 return 0; 133} 134 135static int ecryptfs_do_unlink(struct inode *dir, struct dentry *dentry, 136 struct inode *inode) 137{ 138 struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry); 139 struct dentry *lower_dir_dentry; 140 struct inode *lower_dir_inode; 141 int rc; 142 143 lower_dir_dentry = ecryptfs_dentry_to_lower(dentry->d_parent); 144 lower_dir_inode = d_inode(lower_dir_dentry); 145 inode_lock_nested(lower_dir_inode, I_MUTEX_PARENT); 146 dget(lower_dentry); // don't even try to make the lower negative 147 if (lower_dentry->d_parent != lower_dir_dentry) 148 rc = -EINVAL; 149 else if (d_unhashed(lower_dentry)) 150 rc = -EINVAL; 151 else 152 rc = vfs_unlink(lower_dir_inode, lower_dentry, NULL); 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_inode); 158 set_nlink(inode, ecryptfs_inode_to_lower(inode)->i_nlink); 159 inode->i_ctime = dir->i_ctime; 160out_unlock: 161 dput(lower_dentry); 162 inode_unlock(lower_dir_inode); 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 */ 180static struct inode * 181ecryptfs_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 dentry *lower_dir_dentry; 187 struct inode *inode; 188 189 lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry); 190 lower_dir_dentry = lock_parent(lower_dentry); 191 rc = vfs_create(d_inode(lower_dir_dentry), lower_dentry, mode, true); 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(d_inode(lower_dir_dentry), lower_dentry, NULL); 202 goto out_lock; 203 } 204 fsstack_copy_attr_times(directory_inode, d_inode(lower_dir_dentry)); 205 fsstack_copy_inode_size(directory_inode, d_inode(lower_dir_dentry)); 206out_lock: 207 unlock_dir(lower_dir_dentry); 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 */ 219int 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); 250out: 251 return rc; 252} 253 254/** 255 * ecryptfs_create 256 * @dir: The inode of the directory in which to create the file. 257 * @dentry: The eCryptfs dentry 258 * @mode: The mode of the new file. 259 * 260 * Creates a new file. 261 * 262 * Returns zero on success; non-zero on error condition 263 */ 264static int 265ecryptfs_create(struct inode *directory_inode, struct dentry *ecryptfs_dentry, 266 umode_t mode, bool excl) 267{ 268 struct inode *ecryptfs_inode; 269 int rc; 270 271 ecryptfs_inode = ecryptfs_do_create(directory_inode, ecryptfs_dentry, 272 mode); 273 if (IS_ERR(ecryptfs_inode)) { 274 ecryptfs_printk(KERN_WARNING, "Failed to create file in" 275 "lower filesystem\n"); 276 rc = PTR_ERR(ecryptfs_inode); 277 goto out; 278 } 279 /* At this point, a file exists on "disk"; we need to make sure 280 * that this on disk file is prepared to be an ecryptfs file */ 281 rc = ecryptfs_initialize_file(ecryptfs_dentry, ecryptfs_inode); 282 if (rc) { 283 ecryptfs_do_unlink(directory_inode, ecryptfs_dentry, 284 ecryptfs_inode); 285 iget_failed(ecryptfs_inode); 286 goto out; 287 } 288 d_instantiate_new(ecryptfs_dentry, ecryptfs_inode); 289out: 290 return rc; 291} 292 293static int ecryptfs_i_size_read(struct dentry *dentry, struct inode *inode) 294{ 295 struct ecryptfs_crypt_stat *crypt_stat; 296 int rc; 297 298 rc = ecryptfs_get_lower_file(dentry, inode); 299 if (rc) { 300 printk(KERN_ERR "%s: Error attempting to initialize " 301 "the lower file for the dentry with name " 302 "[%pd]; rc = [%d]\n", __func__, 303 dentry, rc); 304 return rc; 305 } 306 307 crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat; 308 /* TODO: lock for crypt_stat comparison */ 309 if (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED)) 310 ecryptfs_set_default_sizes(crypt_stat); 311 312 rc = ecryptfs_read_and_validate_header_region(inode); 313 ecryptfs_put_lower_file(inode); 314 if (rc) { 315 rc = ecryptfs_read_and_validate_xattr_region(dentry, inode); 316 if (!rc) 317 crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR; 318 } 319 320 /* Must return 0 to allow non-eCryptfs files to be looked up, too */ 321 return 0; 322} 323 324/** 325 * ecryptfs_lookup_interpose - Dentry interposition for a lookup 326 */ 327static struct dentry *ecryptfs_lookup_interpose(struct dentry *dentry, 328 struct dentry *lower_dentry) 329{ 330 struct path *path = ecryptfs_dentry_to_lower_path(dentry->d_parent); 331 struct inode *inode, *lower_inode; 332 struct ecryptfs_dentry_info *dentry_info; 333 int rc = 0; 334 335 dentry_info = kmem_cache_alloc(ecryptfs_dentry_info_cache, GFP_KERNEL); 336 if (!dentry_info) { 337 dput(lower_dentry); 338 return ERR_PTR(-ENOMEM); 339 } 340 341 fsstack_copy_attr_atime(d_inode(dentry->d_parent), 342 d_inode(path->dentry)); 343 BUG_ON(!d_count(lower_dentry)); 344 345 ecryptfs_set_dentry_private(dentry, dentry_info); 346 dentry_info->lower_path.mnt = mntget(path->mnt); 347 dentry_info->lower_path.dentry = lower_dentry; 348 349 /* 350 * negative dentry can go positive under us here - its parent is not 351 * locked. That's OK and that could happen just as we return from 352 * ecryptfs_lookup() anyway. Just need to be careful and fetch 353 * ->d_inode only once - it's not stable here. 354 */ 355 lower_inode = READ_ONCE(lower_dentry->d_inode); 356 357 if (!lower_inode) { 358 /* We want to add because we couldn't find in lower */ 359 d_add(dentry, NULL); 360 return NULL; 361 } 362 inode = __ecryptfs_get_inode(lower_inode, dentry->d_sb); 363 if (IS_ERR(inode)) { 364 printk(KERN_ERR "%s: Error interposing; rc = [%ld]\n", 365 __func__, PTR_ERR(inode)); 366 return ERR_CAST(inode); 367 } 368 if (S_ISREG(inode->i_mode)) { 369 rc = ecryptfs_i_size_read(dentry, inode); 370 if (rc) { 371 make_bad_inode(inode); 372 return ERR_PTR(rc); 373 } 374 } 375 376 if (inode->i_state & I_NEW) 377 unlock_new_inode(inode); 378 return d_splice_alias(inode, dentry); 379} 380 381/** 382 * ecryptfs_lookup 383 * @ecryptfs_dir_inode: The eCryptfs directory inode 384 * @ecryptfs_dentry: The eCryptfs dentry that we are looking up 385 * @flags: lookup flags 386 * 387 * Find a file on disk. If the file does not exist, then we'll add it to the 388 * dentry cache and continue on to read it from the disk. 389 */ 390static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode, 391 struct dentry *ecryptfs_dentry, 392 unsigned int flags) 393{ 394 char *encrypted_and_encoded_name = NULL; 395 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 396 struct dentry *lower_dir_dentry, *lower_dentry; 397 const char *name = ecryptfs_dentry->d_name.name; 398 size_t len = ecryptfs_dentry->d_name.len; 399 struct dentry *res; 400 int rc = 0; 401 402 lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent); 403 404 mount_crypt_stat = &ecryptfs_superblock_to_private( 405 ecryptfs_dentry->d_sb)->mount_crypt_stat; 406 if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) { 407 rc = ecryptfs_encrypt_and_encode_filename( 408 &encrypted_and_encoded_name, &len, 409 mount_crypt_stat, name, len); 410 if (rc) { 411 printk(KERN_ERR "%s: Error attempting to encrypt and encode " 412 "filename; rc = [%d]\n", __func__, rc); 413 return ERR_PTR(rc); 414 } 415 name = encrypted_and_encoded_name; 416 } 417 418 lower_dentry = lookup_one_len_unlocked(name, lower_dir_dentry, len); 419 if (IS_ERR(lower_dentry)) { 420 ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned " 421 "[%ld] on lower_dentry = [%s]\n", __func__, 422 PTR_ERR(lower_dentry), 423 name); 424 res = ERR_CAST(lower_dentry); 425 } else { 426 res = ecryptfs_lookup_interpose(ecryptfs_dentry, lower_dentry); 427 } 428 kfree(encrypted_and_encoded_name); 429 return res; 430} 431 432static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir, 433 struct dentry *new_dentry) 434{ 435 struct dentry *lower_old_dentry; 436 struct dentry *lower_new_dentry; 437 struct dentry *lower_dir_dentry; 438 u64 file_size_save; 439 int rc; 440 441 file_size_save = i_size_read(d_inode(old_dentry)); 442 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); 443 lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); 444 dget(lower_old_dentry); 445 dget(lower_new_dentry); 446 lower_dir_dentry = lock_parent(lower_new_dentry); 447 rc = vfs_link(lower_old_dentry, d_inode(lower_dir_dentry), 448 lower_new_dentry, NULL); 449 if (rc || d_really_is_negative(lower_new_dentry)) 450 goto out_lock; 451 rc = ecryptfs_interpose(lower_new_dentry, new_dentry, dir->i_sb); 452 if (rc) 453 goto out_lock; 454 fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry)); 455 fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry)); 456 set_nlink(d_inode(old_dentry), 457 ecryptfs_inode_to_lower(d_inode(old_dentry))->i_nlink); 458 i_size_write(d_inode(new_dentry), file_size_save); 459out_lock: 460 unlock_dir(lower_dir_dentry); 461 dput(lower_new_dentry); 462 dput(lower_old_dentry); 463 return rc; 464} 465 466static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry) 467{ 468 return ecryptfs_do_unlink(dir, dentry, d_inode(dentry)); 469} 470 471static int ecryptfs_symlink(struct inode *dir, struct dentry *dentry, 472 const char *symname) 473{ 474 int rc; 475 struct dentry *lower_dentry; 476 struct dentry *lower_dir_dentry; 477 char *encoded_symname; 478 size_t encoded_symlen; 479 struct ecryptfs_mount_crypt_stat *mount_crypt_stat = NULL; 480 481 lower_dentry = ecryptfs_dentry_to_lower(dentry); 482 dget(lower_dentry); 483 lower_dir_dentry = lock_parent(lower_dentry); 484 mount_crypt_stat = &ecryptfs_superblock_to_private( 485 dir->i_sb)->mount_crypt_stat; 486 rc = ecryptfs_encrypt_and_encode_filename(&encoded_symname, 487 &encoded_symlen, 488 mount_crypt_stat, symname, 489 strlen(symname)); 490 if (rc) 491 goto out_lock; 492 rc = vfs_symlink(d_inode(lower_dir_dentry), lower_dentry, 493 encoded_symname); 494 kfree(encoded_symname); 495 if (rc || d_really_is_negative(lower_dentry)) 496 goto out_lock; 497 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 498 if (rc) 499 goto out_lock; 500 fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry)); 501 fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry)); 502out_lock: 503 unlock_dir(lower_dir_dentry); 504 dput(lower_dentry); 505 if (d_really_is_negative(dentry)) 506 d_drop(dentry); 507 return rc; 508} 509 510static int ecryptfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) 511{ 512 int rc; 513 struct dentry *lower_dentry; 514 struct dentry *lower_dir_dentry; 515 516 lower_dentry = ecryptfs_dentry_to_lower(dentry); 517 lower_dir_dentry = lock_parent(lower_dentry); 518 rc = vfs_mkdir(d_inode(lower_dir_dentry), lower_dentry, mode); 519 if (rc || d_really_is_negative(lower_dentry)) 520 goto out; 521 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 522 if (rc) 523 goto out; 524 fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry)); 525 fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry)); 526 set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink); 527out: 528 unlock_dir(lower_dir_dentry); 529 if (d_really_is_negative(dentry)) 530 d_drop(dentry); 531 return rc; 532} 533 534static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) 535{ 536 struct dentry *lower_dentry; 537 struct dentry *lower_dir_dentry; 538 struct inode *lower_dir_inode; 539 int rc; 540 541 lower_dentry = ecryptfs_dentry_to_lower(dentry); 542 lower_dir_dentry = ecryptfs_dentry_to_lower(dentry->d_parent); 543 lower_dir_inode = d_inode(lower_dir_dentry); 544 545 inode_lock_nested(lower_dir_inode, I_MUTEX_PARENT); 546 dget(lower_dentry); // don't even try to make the lower negative 547 if (lower_dentry->d_parent != lower_dir_dentry) 548 rc = -EINVAL; 549 else if (d_unhashed(lower_dentry)) 550 rc = -EINVAL; 551 else 552 rc = vfs_rmdir(lower_dir_inode, lower_dentry); 553 if (!rc) { 554 clear_nlink(d_inode(dentry)); 555 fsstack_copy_attr_times(dir, lower_dir_inode); 556 set_nlink(dir, lower_dir_inode->i_nlink); 557 } 558 dput(lower_dentry); 559 inode_unlock(lower_dir_inode); 560 if (!rc) 561 d_drop(dentry); 562 return rc; 563} 564 565static int 566ecryptfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev) 567{ 568 int rc; 569 struct dentry *lower_dentry; 570 struct dentry *lower_dir_dentry; 571 572 lower_dentry = ecryptfs_dentry_to_lower(dentry); 573 lower_dir_dentry = lock_parent(lower_dentry); 574 rc = vfs_mknod(d_inode(lower_dir_dentry), lower_dentry, mode, dev); 575 if (rc || d_really_is_negative(lower_dentry)) 576 goto out; 577 rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb); 578 if (rc) 579 goto out; 580 fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry)); 581 fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry)); 582out: 583 unlock_dir(lower_dir_dentry); 584 if (d_really_is_negative(dentry)) 585 d_drop(dentry); 586 return rc; 587} 588 589static int 590ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry, 591 struct inode *new_dir, struct dentry *new_dentry, 592 unsigned int flags) 593{ 594 int rc; 595 struct dentry *lower_old_dentry; 596 struct dentry *lower_new_dentry; 597 struct dentry *lower_old_dir_dentry; 598 struct dentry *lower_new_dir_dentry; 599 struct dentry *trap; 600 struct inode *target_inode; 601 602 if (flags) 603 return -EINVAL; 604 605 lower_old_dir_dentry = ecryptfs_dentry_to_lower(old_dentry->d_parent); 606 lower_new_dir_dentry = ecryptfs_dentry_to_lower(new_dentry->d_parent); 607 608 lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); 609 lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); 610 611 target_inode = d_inode(new_dentry); 612 613 trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry); 614 dget(lower_new_dentry); 615 rc = -EINVAL; 616 if (lower_old_dentry->d_parent != lower_old_dir_dentry) 617 goto out_lock; 618 if (lower_new_dentry->d_parent != lower_new_dir_dentry) 619 goto out_lock; 620 if (d_unhashed(lower_old_dentry) || d_unhashed(lower_new_dentry)) 621 goto out_lock; 622 /* source should not be ancestor of target */ 623 if (trap == lower_old_dentry) 624 goto out_lock; 625 /* target should not be ancestor of source */ 626 if (trap == lower_new_dentry) { 627 rc = -ENOTEMPTY; 628 goto out_lock; 629 } 630 rc = vfs_rename(d_inode(lower_old_dir_dentry), lower_old_dentry, 631 d_inode(lower_new_dir_dentry), lower_new_dentry, 632 NULL, 0); 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)); 641out_lock: 642 dput(lower_new_dentry); 643 unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry); 644 return rc; 645} 646 647static 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 668static 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 */ 699static loff_t 700upper_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 */ 733static 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 } 814out: 815 ecryptfs_put_lower_file(inode); 816 return rc; 817} 818 819static 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 */ 851int 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(lower_dentry, &lower_ia, NULL); 867 inode_unlock(d_inode(lower_dentry)); 868 } 869 return rc; 870} 871 872static int 873ecryptfs_permission(struct inode *inode, int mask) 874{ 875 return inode_permission(ecryptfs_inode_to_lower(inode), mask); 876} 877 878/** 879 * ecryptfs_setattr 880 * @dentry: dentry handle to the inode to modify 881 * @ia: Structure with flags of what to change and values 882 * 883 * Updates the metadata of an inode. If the update is to the size 884 * i.e. truncation, then ecryptfs_truncate will handle the size modification 885 * of both the ecryptfs inode and the lower inode. 886 * 887 * All other metadata changes will be passed right to the lower filesystem, 888 * and we will just update our inode to look like the lower. 889 */ 890static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia) 891{ 892 int rc = 0; 893 struct dentry *lower_dentry; 894 struct iattr lower_ia; 895 struct inode *inode; 896 struct inode *lower_inode; 897 struct ecryptfs_crypt_stat *crypt_stat; 898 899 crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat; 900 if (!(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED)) { 901 rc = ecryptfs_init_crypt_stat(crypt_stat); 902 if (rc) 903 return rc; 904 } 905 inode = d_inode(dentry); 906 lower_inode = ecryptfs_inode_to_lower(inode); 907 lower_dentry = ecryptfs_dentry_to_lower(dentry); 908 mutex_lock(&crypt_stat->cs_mutex); 909 if (d_is_dir(dentry)) 910 crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); 911 else if (d_is_reg(dentry) 912 && (!(crypt_stat->flags & ECRYPTFS_POLICY_APPLIED) 913 || !(crypt_stat->flags & ECRYPTFS_KEY_VALID))) { 914 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 915 916 mount_crypt_stat = &ecryptfs_superblock_to_private( 917 dentry->d_sb)->mount_crypt_stat; 918 rc = ecryptfs_get_lower_file(dentry, inode); 919 if (rc) { 920 mutex_unlock(&crypt_stat->cs_mutex); 921 goto out; 922 } 923 rc = ecryptfs_read_metadata(dentry); 924 ecryptfs_put_lower_file(inode); 925 if (rc) { 926 if (!(mount_crypt_stat->flags 927 & ECRYPTFS_PLAINTEXT_PASSTHROUGH_ENABLED)) { 928 rc = -EIO; 929 printk(KERN_WARNING "Either the lower file " 930 "is not in a valid eCryptfs format, " 931 "or the key could not be retrieved. " 932 "Plaintext passthrough mode is not " 933 "enabled; returning -EIO\n"); 934 mutex_unlock(&crypt_stat->cs_mutex); 935 goto out; 936 } 937 rc = 0; 938 crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED 939 | ECRYPTFS_ENCRYPTED); 940 } 941 } 942 mutex_unlock(&crypt_stat->cs_mutex); 943 944 rc = setattr_prepare(dentry, ia); 945 if (rc) 946 goto out; 947 if (ia->ia_valid & ATTR_SIZE) { 948 rc = ecryptfs_inode_newsize_ok(inode, ia->ia_size); 949 if (rc) 950 goto out; 951 } 952 953 memcpy(&lower_ia, ia, sizeof(lower_ia)); 954 if (ia->ia_valid & ATTR_FILE) 955 lower_ia.ia_file = ecryptfs_file_to_lower(ia->ia_file); 956 if (ia->ia_valid & ATTR_SIZE) { 957 rc = truncate_upper(dentry, ia, &lower_ia); 958 if (rc < 0) 959 goto out; 960 } 961 962 /* 963 * mode change is for clearing setuid/setgid bits. Allow lower fs 964 * to interpret this in its own way. 965 */ 966 if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) 967 lower_ia.ia_valid &= ~ATTR_MODE; 968 969 inode_lock(d_inode(lower_dentry)); 970 rc = notify_change(lower_dentry, &lower_ia, NULL); 971 inode_unlock(d_inode(lower_dentry)); 972out: 973 fsstack_copy_attr_all(inode, lower_inode); 974 return rc; 975} 976 977static int ecryptfs_getattr_link(const struct path *path, struct kstat *stat, 978 u32 request_mask, unsigned int flags) 979{ 980 struct dentry *dentry = path->dentry; 981 struct ecryptfs_mount_crypt_stat *mount_crypt_stat; 982 int rc = 0; 983 984 mount_crypt_stat = &ecryptfs_superblock_to_private( 985 dentry->d_sb)->mount_crypt_stat; 986 generic_fillattr(d_inode(dentry), stat); 987 if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) { 988 char *target; 989 size_t targetsiz; 990 991 target = ecryptfs_readlink_lower(dentry, &targetsiz); 992 if (!IS_ERR(target)) { 993 kfree(target); 994 stat->size = targetsiz; 995 } else { 996 rc = PTR_ERR(target); 997 } 998 } 999 return rc; 1000} 1001 1002static int ecryptfs_getattr(const struct path *path, struct kstat *stat, 1003 u32 request_mask, unsigned int flags) 1004{ 1005 struct dentry *dentry = path->dentry; 1006 struct kstat lower_stat; 1007 int rc; 1008 1009 rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat, 1010 request_mask, flags); 1011 if (!rc) { 1012 fsstack_copy_attr_all(d_inode(dentry), 1013 ecryptfs_inode_to_lower(d_inode(dentry))); 1014 generic_fillattr(d_inode(dentry), stat); 1015 stat->blocks = lower_stat.blocks; 1016 } 1017 return rc; 1018} 1019 1020int 1021ecryptfs_setxattr(struct dentry *dentry, struct inode *inode, 1022 const char *name, const void *value, 1023 size_t size, int flags) 1024{ 1025 int rc; 1026 struct dentry *lower_dentry; 1027 1028 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1029 if (!(d_inode(lower_dentry)->i_opflags & IOP_XATTR)) { 1030 rc = -EOPNOTSUPP; 1031 goto out; 1032 } 1033 rc = vfs_setxattr(lower_dentry, name, value, size, flags); 1034 if (!rc && inode) 1035 fsstack_copy_attr_all(inode, d_inode(lower_dentry)); 1036out: 1037 return rc; 1038} 1039 1040ssize_t 1041ecryptfs_getxattr_lower(struct dentry *lower_dentry, struct inode *lower_inode, 1042 const char *name, void *value, size_t size) 1043{ 1044 int rc; 1045 1046 if (!(lower_inode->i_opflags & IOP_XATTR)) { 1047 rc = -EOPNOTSUPP; 1048 goto out; 1049 } 1050 inode_lock(lower_inode); 1051 rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size); 1052 inode_unlock(lower_inode); 1053out: 1054 return rc; 1055} 1056 1057static ssize_t 1058ecryptfs_getxattr(struct dentry *dentry, struct inode *inode, 1059 const char *name, void *value, size_t size) 1060{ 1061 return ecryptfs_getxattr_lower(ecryptfs_dentry_to_lower(dentry), 1062 ecryptfs_inode_to_lower(inode), 1063 name, value, size); 1064} 1065 1066static ssize_t 1067ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size) 1068{ 1069 int rc = 0; 1070 struct dentry *lower_dentry; 1071 1072 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1073 if (!d_inode(lower_dentry)->i_op->listxattr) { 1074 rc = -EOPNOTSUPP; 1075 goto out; 1076 } 1077 inode_lock(d_inode(lower_dentry)); 1078 rc = d_inode(lower_dentry)->i_op->listxattr(lower_dentry, list, size); 1079 inode_unlock(d_inode(lower_dentry)); 1080out: 1081 return rc; 1082} 1083 1084static int ecryptfs_removexattr(struct dentry *dentry, struct inode *inode, 1085 const char *name) 1086{ 1087 int rc; 1088 struct dentry *lower_dentry; 1089 struct inode *lower_inode; 1090 1091 lower_dentry = ecryptfs_dentry_to_lower(dentry); 1092 lower_inode = ecryptfs_inode_to_lower(inode); 1093 if (!(lower_inode->i_opflags & IOP_XATTR)) { 1094 rc = -EOPNOTSUPP; 1095 goto out; 1096 } 1097 inode_lock(lower_inode); 1098 rc = __vfs_removexattr(lower_dentry, name); 1099 inode_unlock(lower_inode); 1100out: 1101 return rc; 1102} 1103 1104const struct inode_operations ecryptfs_symlink_iops = { 1105 .get_link = ecryptfs_get_link, 1106 .permission = ecryptfs_permission, 1107 .setattr = ecryptfs_setattr, 1108 .getattr = ecryptfs_getattr_link, 1109 .listxattr = ecryptfs_listxattr, 1110}; 1111 1112const struct inode_operations ecryptfs_dir_iops = { 1113 .create = ecryptfs_create, 1114 .lookup = ecryptfs_lookup, 1115 .link = ecryptfs_link, 1116 .unlink = ecryptfs_unlink, 1117 .symlink = ecryptfs_symlink, 1118 .mkdir = ecryptfs_mkdir, 1119 .rmdir = ecryptfs_rmdir, 1120 .mknod = ecryptfs_mknod, 1121 .rename = ecryptfs_rename, 1122 .permission = ecryptfs_permission, 1123 .setattr = ecryptfs_setattr, 1124 .listxattr = ecryptfs_listxattr, 1125}; 1126 1127const struct inode_operations ecryptfs_main_iops = { 1128 .permission = ecryptfs_permission, 1129 .setattr = ecryptfs_setattr, 1130 .getattr = ecryptfs_getattr, 1131 .listxattr = ecryptfs_listxattr, 1132}; 1133 1134static int ecryptfs_xattr_get(const struct xattr_handler *handler, 1135 struct dentry *dentry, struct inode *inode, 1136 const char *name, void *buffer, size_t size) 1137{ 1138 return ecryptfs_getxattr(dentry, inode, name, buffer, size); 1139} 1140 1141static int ecryptfs_xattr_set(const struct xattr_handler *handler, 1142 struct dentry *dentry, struct inode *inode, 1143 const char *name, const void *value, size_t size, 1144 int flags) 1145{ 1146 if (value) 1147 return ecryptfs_setxattr(dentry, inode, name, value, size, flags); 1148 else { 1149 BUG_ON(flags != XATTR_REPLACE); 1150 return ecryptfs_removexattr(dentry, inode, name); 1151 } 1152} 1153 1154static const struct xattr_handler ecryptfs_xattr_handler = { 1155 .prefix = "", /* match anything */ 1156 .get = ecryptfs_xattr_get, 1157 .set = ecryptfs_xattr_set, 1158}; 1159 1160const struct xattr_handler *ecryptfs_xattr_handlers[] = { 1161 &ecryptfs_xattr_handler, 1162 NULL 1163}; 1164