1 /* 2 * 3 * Copyright (C) 2011 Novell Inc. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 as published by 7 * the Free Software Foundation. 8 */ 9 10 #include <linux/fs.h> 11 #include <linux/slab.h> 12 #include <linux/cred.h> 13 #include <linux/xattr.h> 14 #include <linux/posix_acl.h> 15 #include <linux/ratelimit.h> 16 #include "overlayfs.h" 17 18 19 int ovl_setattr(struct dentry *dentry, struct iattr *attr) 20 { 21 int err; 22 struct dentry *upperdentry; 23 const struct cred *old_cred; 24 25 /* 26 * Check for permissions before trying to copy-up. This is redundant 27 * since it will be rechecked later by ->setattr() on upper dentry. But 28 * without this, copy-up can be triggered by just about anybody. 29 * 30 * We don't initialize inode->size, which just means that 31 * inode_newsize_ok() will always check against MAX_LFS_FILESIZE and not 32 * check for a swapfile (which this won't be anyway). 33 */ 34 err = setattr_prepare(dentry, attr); 35 if (err) 36 return err; 37 38 err = ovl_want_write(dentry); 39 if (err) 40 goto out; 41 42 if (attr->ia_valid & ATTR_SIZE) { 43 struct inode *realinode = d_inode(ovl_dentry_real(dentry)); 44 45 err = -ETXTBSY; 46 if (atomic_read(&realinode->i_writecount) < 0) 47 goto out_drop_write; 48 } 49 50 err = ovl_copy_up(dentry); 51 if (!err) { 52 struct inode *winode = NULL; 53 54 upperdentry = ovl_dentry_upper(dentry); 55 56 if (attr->ia_valid & ATTR_SIZE) { 57 winode = d_inode(upperdentry); 58 err = get_write_access(winode); 59 if (err) 60 goto out_drop_write; 61 } 62 63 if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) 64 attr->ia_valid &= ~ATTR_MODE; 65 66 inode_lock(upperdentry->d_inode); 67 old_cred = ovl_override_creds(dentry->d_sb); 68 err = notify_change(upperdentry, attr, NULL); 69 revert_creds(old_cred); 70 if (!err) 71 ovl_copyattr(upperdentry->d_inode, dentry->d_inode); 72 inode_unlock(upperdentry->d_inode); 73 74 if (winode) 75 put_write_access(winode); 76 } 77 out_drop_write: 78 ovl_drop_write(dentry); 79 out: 80 return err; 81 } 82 83 static int ovl_map_dev_ino(struct dentry *dentry, struct kstat *stat, 84 struct ovl_layer *lower_layer) 85 { 86 bool samefs = ovl_same_sb(dentry->d_sb); 87 unsigned int xinobits = ovl_xino_bits(dentry->d_sb); 88 89 if (samefs) { 90 /* 91 * When all layers are on the same fs, all real inode 92 * number are unique, so we use the overlay st_dev, 93 * which is friendly to du -x. 94 */ 95 stat->dev = dentry->d_sb->s_dev; 96 return 0; 97 } else if (xinobits) { 98 unsigned int shift = 64 - xinobits; 99 /* 100 * All inode numbers of underlying fs should not be using the 101 * high xinobits, so we use high xinobits to partition the 102 * overlay st_ino address space. The high bits holds the fsid 103 * (upper fsid is 0). This way overlay inode numbers are unique 104 * and all inodes use overlay st_dev. Inode numbers are also 105 * persistent for a given layer configuration. 106 */ 107 if (stat->ino >> shift) { 108 pr_warn_ratelimited("overlayfs: inode number too big (%pd2, ino=%llu, xinobits=%d)\n", 109 dentry, stat->ino, xinobits); 110 } else { 111 if (lower_layer) 112 stat->ino |= ((u64)lower_layer->fsid) << shift; 113 114 stat->dev = dentry->d_sb->s_dev; 115 return 0; 116 } 117 } 118 119 /* The inode could not be mapped to a unified st_ino address space */ 120 if (S_ISDIR(dentry->d_inode->i_mode)) { 121 /* 122 * Always use the overlay st_dev for directories, so 'find 123 * -xdev' will scan the entire overlay mount and won't cross the 124 * overlay mount boundaries. 125 * 126 * If not all layers are on the same fs the pair {real st_ino; 127 * overlay st_dev} is not unique, so use the non persistent 128 * overlay st_ino for directories. 129 */ 130 stat->dev = dentry->d_sb->s_dev; 131 stat->ino = dentry->d_inode->i_ino; 132 } else if (lower_layer && lower_layer->fsid) { 133 /* 134 * For non-samefs setup, if we cannot map all layers st_ino 135 * to a unified address space, we need to make sure that st_dev 136 * is unique per lower fs. Upper layer uses real st_dev and 137 * lower layers use the unique anonymous bdev assigned to the 138 * lower fs. 139 */ 140 stat->dev = lower_layer->fs->pseudo_dev; 141 } 142 143 return 0; 144 } 145 146 int ovl_getattr(const struct path *path, struct kstat *stat, 147 u32 request_mask, unsigned int flags) 148 { 149 struct dentry *dentry = path->dentry; 150 enum ovl_path_type type; 151 struct path realpath; 152 const struct cred *old_cred; 153 bool is_dir = S_ISDIR(dentry->d_inode->i_mode); 154 bool samefs = ovl_same_sb(dentry->d_sb); 155 struct ovl_layer *lower_layer = NULL; 156 int err; 157 158 type = ovl_path_real(dentry, &realpath); 159 old_cred = ovl_override_creds(dentry->d_sb); 160 err = vfs_getattr(&realpath, stat, request_mask, flags); 161 if (err) 162 goto out; 163 164 /* 165 * For non-dir or same fs, we use st_ino of the copy up origin. 166 * This guaranties constant st_dev/st_ino across copy up. 167 * With xino feature and non-samefs, we use st_ino of the copy up 168 * origin masked with high bits that represent the layer id. 169 * 170 * If lower filesystem supports NFS file handles, this also guaranties 171 * persistent st_ino across mount cycle. 172 */ 173 if (!is_dir || samefs || ovl_xino_bits(dentry->d_sb)) { 174 if (!OVL_TYPE_UPPER(type)) { 175 lower_layer = ovl_layer_lower(dentry); 176 } else if (OVL_TYPE_ORIGIN(type)) { 177 struct kstat lowerstat; 178 u32 lowermask = STATX_INO | (!is_dir ? STATX_NLINK : 0); 179 180 ovl_path_lower(dentry, &realpath); 181 err = vfs_getattr(&realpath, &lowerstat, 182 lowermask, flags); 183 if (err) 184 goto out; 185 186 /* 187 * Lower hardlinks may be broken on copy up to different 188 * upper files, so we cannot use the lower origin st_ino 189 * for those different files, even for the same fs case. 190 * 191 * Similarly, several redirected dirs can point to the 192 * same dir on a lower layer. With the "verify_lower" 193 * feature, we do not use the lower origin st_ino, if 194 * we haven't verified that this redirect is unique. 195 * 196 * With inodes index enabled, it is safe to use st_ino 197 * of an indexed origin. The index validates that the 198 * upper hardlink is not broken and that a redirected 199 * dir is the only redirect to that origin. 200 */ 201 if (ovl_test_flag(OVL_INDEX, d_inode(dentry)) || 202 (!ovl_verify_lower(dentry->d_sb) && 203 (is_dir || lowerstat.nlink == 1))) { 204 stat->ino = lowerstat.ino; 205 lower_layer = ovl_layer_lower(dentry); 206 } 207 } 208 } 209 210 err = ovl_map_dev_ino(dentry, stat, lower_layer); 211 if (err) 212 goto out; 213 214 /* 215 * It's probably not worth it to count subdirs to get the 216 * correct link count. nlink=1 seems to pacify 'find' and 217 * other utilities. 218 */ 219 if (is_dir && OVL_TYPE_MERGE(type)) 220 stat->nlink = 1; 221 222 /* 223 * Return the overlay inode nlinks for indexed upper inodes. 224 * Overlay inode nlink counts the union of the upper hardlinks 225 * and non-covered lower hardlinks. It does not include the upper 226 * index hardlink. 227 */ 228 if (!is_dir && ovl_test_flag(OVL_INDEX, d_inode(dentry))) 229 stat->nlink = dentry->d_inode->i_nlink; 230 231 out: 232 revert_creds(old_cred); 233 234 return err; 235 } 236 237 int ovl_permission(struct inode *inode, int mask) 238 { 239 struct inode *upperinode = ovl_inode_upper(inode); 240 struct inode *realinode = upperinode ?: ovl_inode_lower(inode); 241 const struct cred *old_cred; 242 int err; 243 244 /* Careful in RCU walk mode */ 245 if (!realinode) { 246 WARN_ON(!(mask & MAY_NOT_BLOCK)); 247 return -ECHILD; 248 } 249 250 /* 251 * Check overlay inode with the creds of task and underlying inode 252 * with creds of mounter 253 */ 254 err = generic_permission(inode, mask); 255 if (err) 256 return err; 257 258 old_cred = ovl_override_creds(inode->i_sb); 259 if (!upperinode && 260 !special_file(realinode->i_mode) && mask & MAY_WRITE) { 261 mask &= ~(MAY_WRITE | MAY_APPEND); 262 /* Make sure mounter can read file for copy up later */ 263 mask |= MAY_READ; 264 } 265 err = inode_permission(realinode, mask); 266 revert_creds(old_cred); 267 268 return err; 269 } 270 271 static const char *ovl_get_link(struct dentry *dentry, 272 struct inode *inode, 273 struct delayed_call *done) 274 { 275 const struct cred *old_cred; 276 const char *p; 277 278 if (!dentry) 279 return ERR_PTR(-ECHILD); 280 281 old_cred = ovl_override_creds(dentry->d_sb); 282 p = vfs_get_link(ovl_dentry_real(dentry), done); 283 revert_creds(old_cred); 284 return p; 285 } 286 287 bool ovl_is_private_xattr(const char *name) 288 { 289 return strncmp(name, OVL_XATTR_PREFIX, 290 sizeof(OVL_XATTR_PREFIX) - 1) == 0; 291 } 292 293 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name, 294 const void *value, size_t size, int flags) 295 { 296 int err; 297 struct dentry *upperdentry = ovl_i_dentry_upper(inode); 298 struct dentry *realdentry = upperdentry ?: ovl_dentry_lower(dentry); 299 const struct cred *old_cred; 300 301 err = ovl_want_write(dentry); 302 if (err) 303 goto out; 304 305 if (!value && !upperdentry) { 306 err = vfs_getxattr(realdentry, name, NULL, 0); 307 if (err < 0) 308 goto out_drop_write; 309 } 310 311 if (!upperdentry) { 312 err = ovl_copy_up(dentry); 313 if (err) 314 goto out_drop_write; 315 316 realdentry = ovl_dentry_upper(dentry); 317 } 318 319 old_cred = ovl_override_creds(dentry->d_sb); 320 if (value) 321 err = vfs_setxattr(realdentry, name, value, size, flags); 322 else { 323 WARN_ON(flags != XATTR_REPLACE); 324 err = vfs_removexattr(realdentry, name); 325 } 326 revert_creds(old_cred); 327 328 /* copy c/mtime */ 329 ovl_copyattr(d_inode(realdentry), inode); 330 331 out_drop_write: 332 ovl_drop_write(dentry); 333 out: 334 return err; 335 } 336 337 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name, 338 void *value, size_t size) 339 { 340 ssize_t res; 341 const struct cred *old_cred; 342 struct dentry *realdentry = 343 ovl_i_dentry_upper(inode) ?: ovl_dentry_lower(dentry); 344 345 old_cred = ovl_override_creds(dentry->d_sb); 346 res = vfs_getxattr(realdentry, name, value, size); 347 revert_creds(old_cred); 348 return res; 349 } 350 351 static bool ovl_can_list(const char *s) 352 { 353 /* List all non-trusted xatts */ 354 if (strncmp(s, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) != 0) 355 return true; 356 357 /* Never list trusted.overlay, list other trusted for superuser only */ 358 return !ovl_is_private_xattr(s) && capable(CAP_SYS_ADMIN); 359 } 360 361 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) 362 { 363 struct dentry *realdentry = ovl_dentry_real(dentry); 364 ssize_t res; 365 size_t len; 366 char *s; 367 const struct cred *old_cred; 368 369 old_cred = ovl_override_creds(dentry->d_sb); 370 res = vfs_listxattr(realdentry, list, size); 371 revert_creds(old_cred); 372 if (res <= 0 || size == 0) 373 return res; 374 375 /* filter out private xattrs */ 376 for (s = list, len = res; len;) { 377 size_t slen = strnlen(s, len) + 1; 378 379 /* underlying fs providing us with an broken xattr list? */ 380 if (WARN_ON(slen > len)) 381 return -EIO; 382 383 len -= slen; 384 if (!ovl_can_list(s)) { 385 res -= slen; 386 memmove(s, s + slen, len); 387 } else { 388 s += slen; 389 } 390 } 391 392 return res; 393 } 394 395 struct posix_acl *ovl_get_acl(struct inode *inode, int type) 396 { 397 struct inode *realinode = ovl_inode_real(inode); 398 const struct cred *old_cred; 399 struct posix_acl *acl; 400 401 if (!IS_ENABLED(CONFIG_FS_POSIX_ACL) || !IS_POSIXACL(realinode)) 402 return NULL; 403 404 old_cred = ovl_override_creds(inode->i_sb); 405 acl = get_acl(realinode, type); 406 revert_creds(old_cred); 407 408 return acl; 409 } 410 411 static bool ovl_open_need_copy_up(struct dentry *dentry, int flags) 412 { 413 /* Copy up of disconnected dentry does not set upper alias */ 414 if (ovl_dentry_upper(dentry) && 415 (ovl_dentry_has_upper_alias(dentry) || 416 (dentry->d_flags & DCACHE_DISCONNECTED))) 417 return false; 418 419 if (special_file(d_inode(dentry)->i_mode)) 420 return false; 421 422 if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC)) 423 return false; 424 425 return true; 426 } 427 428 int ovl_open_maybe_copy_up(struct dentry *dentry, unsigned int file_flags) 429 { 430 int err = 0; 431 432 if (ovl_open_need_copy_up(dentry, file_flags)) { 433 err = ovl_want_write(dentry); 434 if (!err) { 435 err = ovl_copy_up_flags(dentry, file_flags); 436 ovl_drop_write(dentry); 437 } 438 } 439 440 return err; 441 } 442 443 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags) 444 { 445 if (flags & S_ATIME) { 446 struct ovl_fs *ofs = inode->i_sb->s_fs_info; 447 struct path upperpath = { 448 .mnt = ofs->upper_mnt, 449 .dentry = ovl_upperdentry_dereference(OVL_I(inode)), 450 }; 451 452 if (upperpath.dentry) { 453 touch_atime(&upperpath); 454 inode->i_atime = d_inode(upperpath.dentry)->i_atime; 455 } 456 } 457 return 0; 458 } 459 460 static const struct inode_operations ovl_file_inode_operations = { 461 .setattr = ovl_setattr, 462 .permission = ovl_permission, 463 .getattr = ovl_getattr, 464 .listxattr = ovl_listxattr, 465 .get_acl = ovl_get_acl, 466 .update_time = ovl_update_time, 467 }; 468 469 static const struct inode_operations ovl_symlink_inode_operations = { 470 .setattr = ovl_setattr, 471 .get_link = ovl_get_link, 472 .getattr = ovl_getattr, 473 .listxattr = ovl_listxattr, 474 .update_time = ovl_update_time, 475 }; 476 477 /* 478 * It is possible to stack overlayfs instance on top of another 479 * overlayfs instance as lower layer. We need to annonate the 480 * stackable i_mutex locks according to stack level of the super 481 * block instance. An overlayfs instance can never be in stack 482 * depth 0 (there is always a real fs below it). An overlayfs 483 * inode lock will use the lockdep annotaion ovl_i_mutex_key[depth]. 484 * 485 * For example, here is a snip from /proc/lockdep_chains after 486 * dir_iterate of nested overlayfs: 487 * 488 * [...] &ovl_i_mutex_dir_key[depth] (stack_depth=2) 489 * [...] &ovl_i_mutex_dir_key[depth]#2 (stack_depth=1) 490 * [...] &type->i_mutex_dir_key (stack_depth=0) 491 */ 492 #define OVL_MAX_NESTING FILESYSTEM_MAX_STACK_DEPTH 493 494 static inline void ovl_lockdep_annotate_inode_mutex_key(struct inode *inode) 495 { 496 #ifdef CONFIG_LOCKDEP 497 static struct lock_class_key ovl_i_mutex_key[OVL_MAX_NESTING]; 498 static struct lock_class_key ovl_i_mutex_dir_key[OVL_MAX_NESTING]; 499 static struct lock_class_key ovl_i_lock_key[OVL_MAX_NESTING]; 500 501 int depth = inode->i_sb->s_stack_depth - 1; 502 503 if (WARN_ON_ONCE(depth < 0 || depth >= OVL_MAX_NESTING)) 504 depth = 0; 505 506 if (S_ISDIR(inode->i_mode)) 507 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_dir_key[depth]); 508 else 509 lockdep_set_class(&inode->i_rwsem, &ovl_i_mutex_key[depth]); 510 511 lockdep_set_class(&OVL_I(inode)->lock, &ovl_i_lock_key[depth]); 512 #endif 513 } 514 515 static void ovl_fill_inode(struct inode *inode, umode_t mode, dev_t rdev, 516 unsigned long ino, int fsid) 517 { 518 int xinobits = ovl_xino_bits(inode->i_sb); 519 520 /* 521 * When NFS export is enabled and d_ino is consistent with st_ino 522 * (samefs or i_ino has enough bits to encode layer), set the same 523 * value used for d_ino to i_ino, because nfsd readdirplus compares 524 * d_ino values to i_ino values of child entries. When called from 525 * ovl_new_inode(), ino arg is 0, so i_ino will be updated to real 526 * upper inode i_ino on ovl_inode_init() or ovl_inode_update(). 527 */ 528 if (inode->i_sb->s_export_op && 529 (ovl_same_sb(inode->i_sb) || xinobits)) { 530 inode->i_ino = ino; 531 if (xinobits && fsid && !(ino >> (64 - xinobits))) 532 inode->i_ino |= (unsigned long)fsid << (64 - xinobits); 533 } else { 534 inode->i_ino = get_next_ino(); 535 } 536 inode->i_mode = mode; 537 inode->i_flags |= S_NOCMTIME; 538 #ifdef CONFIG_FS_POSIX_ACL 539 inode->i_acl = inode->i_default_acl = ACL_DONT_CACHE; 540 #endif 541 542 ovl_lockdep_annotate_inode_mutex_key(inode); 543 544 switch (mode & S_IFMT) { 545 case S_IFREG: 546 inode->i_op = &ovl_file_inode_operations; 547 break; 548 549 case S_IFDIR: 550 inode->i_op = &ovl_dir_inode_operations; 551 inode->i_fop = &ovl_dir_operations; 552 break; 553 554 case S_IFLNK: 555 inode->i_op = &ovl_symlink_inode_operations; 556 break; 557 558 default: 559 inode->i_op = &ovl_file_inode_operations; 560 init_special_inode(inode, mode, rdev); 561 break; 562 } 563 } 564 565 /* 566 * With inodes index enabled, an overlay inode nlink counts the union of upper 567 * hardlinks and non-covered lower hardlinks. During the lifetime of a non-pure 568 * upper inode, the following nlink modifying operations can happen: 569 * 570 * 1. Lower hardlink copy up 571 * 2. Upper hardlink created, unlinked or renamed over 572 * 3. Lower hardlink whiteout or renamed over 573 * 574 * For the first, copy up case, the union nlink does not change, whether the 575 * operation succeeds or fails, but the upper inode nlink may change. 576 * Therefore, before copy up, we store the union nlink value relative to the 577 * lower inode nlink in the index inode xattr trusted.overlay.nlink. 578 * 579 * For the second, upper hardlink case, the union nlink should be incremented 580 * or decremented IFF the operation succeeds, aligned with nlink change of the 581 * upper inode. Therefore, before link/unlink/rename, we store the union nlink 582 * value relative to the upper inode nlink in the index inode. 583 * 584 * For the last, lower cover up case, we simplify things by preceding the 585 * whiteout or cover up with copy up. This makes sure that there is an index 586 * upper inode where the nlink xattr can be stored before the copied up upper 587 * entry is unlink. 588 */ 589 #define OVL_NLINK_ADD_UPPER (1 << 0) 590 591 /* 592 * On-disk format for indexed nlink: 593 * 594 * nlink relative to the upper inode - "U[+-]NUM" 595 * nlink relative to the lower inode - "L[+-]NUM" 596 */ 597 598 static int ovl_set_nlink_common(struct dentry *dentry, 599 struct dentry *realdentry, const char *format) 600 { 601 struct inode *inode = d_inode(dentry); 602 struct inode *realinode = d_inode(realdentry); 603 char buf[13]; 604 int len; 605 606 len = snprintf(buf, sizeof(buf), format, 607 (int) (inode->i_nlink - realinode->i_nlink)); 608 609 if (WARN_ON(len >= sizeof(buf))) 610 return -EIO; 611 612 return ovl_do_setxattr(ovl_dentry_upper(dentry), 613 OVL_XATTR_NLINK, buf, len, 0); 614 } 615 616 int ovl_set_nlink_upper(struct dentry *dentry) 617 { 618 return ovl_set_nlink_common(dentry, ovl_dentry_upper(dentry), "U%+i"); 619 } 620 621 int ovl_set_nlink_lower(struct dentry *dentry) 622 { 623 return ovl_set_nlink_common(dentry, ovl_dentry_lower(dentry), "L%+i"); 624 } 625 626 unsigned int ovl_get_nlink(struct dentry *lowerdentry, 627 struct dentry *upperdentry, 628 unsigned int fallback) 629 { 630 int nlink_diff; 631 int nlink; 632 char buf[13]; 633 int err; 634 635 if (!lowerdentry || !upperdentry || d_inode(lowerdentry)->i_nlink == 1) 636 return fallback; 637 638 err = vfs_getxattr(upperdentry, OVL_XATTR_NLINK, &buf, sizeof(buf) - 1); 639 if (err < 0) 640 goto fail; 641 642 buf[err] = '\0'; 643 if ((buf[0] != 'L' && buf[0] != 'U') || 644 (buf[1] != '+' && buf[1] != '-')) 645 goto fail; 646 647 err = kstrtoint(buf + 1, 10, &nlink_diff); 648 if (err < 0) 649 goto fail; 650 651 nlink = d_inode(buf[0] == 'L' ? lowerdentry : upperdentry)->i_nlink; 652 nlink += nlink_diff; 653 654 if (nlink <= 0) 655 goto fail; 656 657 return nlink; 658 659 fail: 660 pr_warn_ratelimited("overlayfs: failed to get index nlink (%pd2, err=%i)\n", 661 upperdentry, err); 662 return fallback; 663 } 664 665 struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, dev_t rdev) 666 { 667 struct inode *inode; 668 669 inode = new_inode(sb); 670 if (inode) 671 ovl_fill_inode(inode, mode, rdev, 0, 0); 672 673 return inode; 674 } 675 676 static int ovl_inode_test(struct inode *inode, void *data) 677 { 678 return inode->i_private == data; 679 } 680 681 static int ovl_inode_set(struct inode *inode, void *data) 682 { 683 inode->i_private = data; 684 return 0; 685 } 686 687 static bool ovl_verify_inode(struct inode *inode, struct dentry *lowerdentry, 688 struct dentry *upperdentry, bool strict) 689 { 690 /* 691 * For directories, @strict verify from lookup path performs consistency 692 * checks, so NULL lower/upper in dentry must match NULL lower/upper in 693 * inode. Non @strict verify from NFS handle decode path passes NULL for 694 * 'unknown' lower/upper. 695 */ 696 if (S_ISDIR(inode->i_mode) && strict) { 697 /* Real lower dir moved to upper layer under us? */ 698 if (!lowerdentry && ovl_inode_lower(inode)) 699 return false; 700 701 /* Lookup of an uncovered redirect origin? */ 702 if (!upperdentry && ovl_inode_upper(inode)) 703 return false; 704 } 705 706 /* 707 * Allow non-NULL lower inode in ovl_inode even if lowerdentry is NULL. 708 * This happens when finding a copied up overlay inode for a renamed 709 * or hardlinked overlay dentry and lower dentry cannot be followed 710 * by origin because lower fs does not support file handles. 711 */ 712 if (lowerdentry && ovl_inode_lower(inode) != d_inode(lowerdentry)) 713 return false; 714 715 /* 716 * Allow non-NULL __upperdentry in inode even if upperdentry is NULL. 717 * This happens when finding a lower alias for a copied up hard link. 718 */ 719 if (upperdentry && ovl_inode_upper(inode) != d_inode(upperdentry)) 720 return false; 721 722 return true; 723 } 724 725 struct inode *ovl_lookup_inode(struct super_block *sb, struct dentry *real, 726 bool is_upper) 727 { 728 struct inode *inode, *key = d_inode(real); 729 730 inode = ilookup5(sb, (unsigned long) key, ovl_inode_test, key); 731 if (!inode) 732 return NULL; 733 734 if (!ovl_verify_inode(inode, is_upper ? NULL : real, 735 is_upper ? real : NULL, false)) { 736 iput(inode); 737 return ERR_PTR(-ESTALE); 738 } 739 740 return inode; 741 } 742 743 /* 744 * Does overlay inode need to be hashed by lower inode? 745 */ 746 static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper, 747 struct dentry *lower, struct dentry *index) 748 { 749 struct ovl_fs *ofs = sb->s_fs_info; 750 751 /* No, if pure upper */ 752 if (!lower) 753 return false; 754 755 /* Yes, if already indexed */ 756 if (index) 757 return true; 758 759 /* Yes, if won't be copied up */ 760 if (!ofs->upper_mnt) 761 return true; 762 763 /* No, if lower hardlink is or will be broken on copy up */ 764 if ((upper || !ovl_indexdir(sb)) && 765 !d_is_dir(lower) && d_inode(lower)->i_nlink > 1) 766 return false; 767 768 /* No, if non-indexed upper with NFS export */ 769 if (sb->s_export_op && upper) 770 return false; 771 772 /* Otherwise, hash by lower inode for fsnotify */ 773 return true; 774 } 775 776 static struct inode *ovl_iget5(struct super_block *sb, struct inode *newinode, 777 struct inode *key) 778 { 779 return newinode ? inode_insert5(newinode, (unsigned long) key, 780 ovl_inode_test, ovl_inode_set, key) : 781 iget5_locked(sb, (unsigned long) key, 782 ovl_inode_test, ovl_inode_set, key); 783 } 784 785 struct inode *ovl_get_inode(struct super_block *sb, 786 struct ovl_inode_params *oip) 787 { 788 struct dentry *upperdentry = oip->upperdentry; 789 struct ovl_path *lowerpath = oip->lowerpath; 790 struct inode *realinode = upperdentry ? d_inode(upperdentry) : NULL; 791 struct inode *inode; 792 struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; 793 bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry, 794 oip->index); 795 int fsid = bylower ? oip->lowerpath->layer->fsid : 0; 796 bool is_dir; 797 unsigned long ino = 0; 798 799 if (!realinode) 800 realinode = d_inode(lowerdentry); 801 802 /* 803 * Copy up origin (lower) may exist for non-indexed upper, but we must 804 * not use lower as hash key if this is a broken hardlink. 805 */ 806 is_dir = S_ISDIR(realinode->i_mode); 807 if (upperdentry || bylower) { 808 struct inode *key = d_inode(bylower ? lowerdentry : 809 upperdentry); 810 unsigned int nlink = is_dir ? 1 : realinode->i_nlink; 811 812 inode = ovl_iget5(sb, oip->newinode, key); 813 if (!inode) 814 goto out_nomem; 815 if (!(inode->i_state & I_NEW)) { 816 /* 817 * Verify that the underlying files stored in the inode 818 * match those in the dentry. 819 */ 820 if (!ovl_verify_inode(inode, lowerdentry, upperdentry, 821 true)) { 822 iput(inode); 823 inode = ERR_PTR(-ESTALE); 824 goto out; 825 } 826 827 dput(upperdentry); 828 goto out; 829 } 830 831 /* Recalculate nlink for non-dir due to indexing */ 832 if (!is_dir) 833 nlink = ovl_get_nlink(lowerdentry, upperdentry, nlink); 834 set_nlink(inode, nlink); 835 ino = key->i_ino; 836 } else { 837 /* Lower hardlink that will be broken on copy up */ 838 inode = new_inode(sb); 839 if (!inode) 840 goto out_nomem; 841 } 842 ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev, ino, fsid); 843 ovl_inode_init(inode, upperdentry, lowerdentry); 844 845 if (upperdentry && ovl_is_impuredir(upperdentry)) 846 ovl_set_flag(OVL_IMPURE, inode); 847 848 if (oip->index) 849 ovl_set_flag(OVL_INDEX, inode); 850 851 /* Check for non-merge dir that may have whiteouts */ 852 if (is_dir) { 853 if (((upperdentry && lowerdentry) || oip->numlower > 1) || 854 ovl_check_origin_xattr(upperdentry ?: lowerdentry)) { 855 ovl_set_flag(OVL_WHITEOUTS, inode); 856 } 857 } 858 859 if (inode->i_state & I_NEW) 860 unlock_new_inode(inode); 861 out: 862 return inode; 863 864 out_nomem: 865 inode = ERR_PTR(-ENOMEM); 866 goto out; 867 } 868