1 /* 2 * linux/fs/namei.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7 /* 8 * Some corrections by tytso. 9 */ 10 11 /* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname 12 * lookup logic. 13 */ 14 /* [Feb-Apr 2000, AV] Rewrite to the new namespace architecture. 15 */ 16 17 #include <linux/init.h> 18 #include <linux/module.h> 19 #include <linux/slab.h> 20 #include <linux/fs.h> 21 #include <linux/namei.h> 22 #include <linux/quotaops.h> 23 #include <linux/pagemap.h> 24 #include <linux/fsnotify.h> 25 #include <linux/personality.h> 26 #include <linux/security.h> 27 #include <linux/syscalls.h> 28 #include <linux/mount.h> 29 #include <linux/audit.h> 30 #include <linux/capability.h> 31 #include <linux/file.h> 32 #include <linux/fcntl.h> 33 #include <linux/device_cgroup.h> 34 #include <asm/uaccess.h> 35 36 #define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE]) 37 38 /* [Feb-1997 T. Schoebel-Theuer] 39 * Fundamental changes in the pathname lookup mechanisms (namei) 40 * were necessary because of omirr. The reason is that omirr needs 41 * to know the _real_ pathname, not the user-supplied one, in case 42 * of symlinks (and also when transname replacements occur). 43 * 44 * The new code replaces the old recursive symlink resolution with 45 * an iterative one (in case of non-nested symlink chains). It does 46 * this with calls to <fs>_follow_link(). 47 * As a side effect, dir_namei(), _namei() and follow_link() are now 48 * replaced with a single function lookup_dentry() that can handle all 49 * the special cases of the former code. 50 * 51 * With the new dcache, the pathname is stored at each inode, at least as 52 * long as the refcount of the inode is positive. As a side effect, the 53 * size of the dcache depends on the inode cache and thus is dynamic. 54 * 55 * [29-Apr-1998 C. Scott Ananian] Updated above description of symlink 56 * resolution to correspond with current state of the code. 57 * 58 * Note that the symlink resolution is not *completely* iterative. 59 * There is still a significant amount of tail- and mid- recursion in 60 * the algorithm. Also, note that <fs>_readlink() is not used in 61 * lookup_dentry(): lookup_dentry() on the result of <fs>_readlink() 62 * may return different results than <fs>_follow_link(). Many virtual 63 * filesystems (including /proc) exhibit this behavior. 64 */ 65 66 /* [24-Feb-97 T. Schoebel-Theuer] Side effects caused by new implementation: 67 * New symlink semantics: when open() is called with flags O_CREAT | O_EXCL 68 * and the name already exists in form of a symlink, try to create the new 69 * name indicated by the symlink. The old code always complained that the 70 * name already exists, due to not following the symlink even if its target 71 * is nonexistent. The new semantics affects also mknod() and link() when 72 * the name is a symlink pointing to a non-existant name. 73 * 74 * I don't know which semantics is the right one, since I have no access 75 * to standards. But I found by trial that HP-UX 9.0 has the full "new" 76 * semantics implemented, while SunOS 4.1.1 and Solaris (SunOS 5.4) have the 77 * "old" one. Personally, I think the new semantics is much more logical. 78 * Note that "ln old new" where "new" is a symlink pointing to a non-existing 79 * file does succeed in both HP-UX and SunOs, but not in Solaris 80 * and in the old Linux semantics. 81 */ 82 83 /* [16-Dec-97 Kevin Buhr] For security reasons, we change some symlink 84 * semantics. See the comments in "open_namei" and "do_link" below. 85 * 86 * [10-Sep-98 Alan Modra] Another symlink change. 87 */ 88 89 /* [Feb-Apr 2000 AV] Complete rewrite. Rules for symlinks: 90 * inside the path - always follow. 91 * in the last component in creation/removal/renaming - never follow. 92 * if LOOKUP_FOLLOW passed - follow. 93 * if the pathname has trailing slashes - follow. 94 * otherwise - don't follow. 95 * (applied in that order). 96 * 97 * [Jun 2000 AV] Inconsistent behaviour of open() in case if flags==O_CREAT 98 * restored for 2.4. This is the last surviving part of old 4.2BSD bug. 99 * During the 2.4 we need to fix the userland stuff depending on it - 100 * hopefully we will be able to get rid of that wart in 2.5. So far only 101 * XEmacs seems to be relying on it... 102 */ 103 /* 104 * [Sep 2001 AV] Single-semaphore locking scheme (kudos to David Holland) 105 * implemented. Let's see if raised priority of ->s_vfs_rename_mutex gives 106 * any extra contention... 107 */ 108 109 static int __link_path_walk(const char *name, struct nameidata *nd); 110 111 /* In order to reduce some races, while at the same time doing additional 112 * checking and hopefully speeding things up, we copy filenames to the 113 * kernel data space before using them.. 114 * 115 * POSIX.1 2.4: an empty pathname is invalid (ENOENT). 116 * PATH_MAX includes the nul terminator --RR. 117 */ 118 static int do_getname(const char __user *filename, char *page) 119 { 120 int retval; 121 unsigned long len = PATH_MAX; 122 123 if (!segment_eq(get_fs(), KERNEL_DS)) { 124 if ((unsigned long) filename >= TASK_SIZE) 125 return -EFAULT; 126 if (TASK_SIZE - (unsigned long) filename < PATH_MAX) 127 len = TASK_SIZE - (unsigned long) filename; 128 } 129 130 retval = strncpy_from_user(page, filename, len); 131 if (retval > 0) { 132 if (retval < len) 133 return 0; 134 return -ENAMETOOLONG; 135 } else if (!retval) 136 retval = -ENOENT; 137 return retval; 138 } 139 140 char * getname(const char __user * filename) 141 { 142 char *tmp, *result; 143 144 result = ERR_PTR(-ENOMEM); 145 tmp = __getname(); 146 if (tmp) { 147 int retval = do_getname(filename, tmp); 148 149 result = tmp; 150 if (retval < 0) { 151 __putname(tmp); 152 result = ERR_PTR(retval); 153 } 154 } 155 audit_getname(result); 156 return result; 157 } 158 159 #ifdef CONFIG_AUDITSYSCALL 160 void putname(const char *name) 161 { 162 if (unlikely(!audit_dummy_context())) 163 audit_putname(name); 164 else 165 __putname(name); 166 } 167 EXPORT_SYMBOL(putname); 168 #endif 169 170 171 /** 172 * generic_permission - check for access rights on a Posix-like filesystem 173 * @inode: inode to check access rights for 174 * @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC) 175 * @check_acl: optional callback to check for Posix ACLs 176 * 177 * Used to check for read/write/execute permissions on a file. 178 * We use "fsuid" for this, letting us set arbitrary permissions 179 * for filesystem access without changing the "normal" uids which 180 * are used for other things.. 181 */ 182 int generic_permission(struct inode *inode, int mask, 183 int (*check_acl)(struct inode *inode, int mask)) 184 { 185 umode_t mode = inode->i_mode; 186 187 mask &= MAY_READ | MAY_WRITE | MAY_EXEC; 188 189 if (current->fsuid == inode->i_uid) 190 mode >>= 6; 191 else { 192 if (IS_POSIXACL(inode) && (mode & S_IRWXG) && check_acl) { 193 int error = check_acl(inode, mask); 194 if (error == -EACCES) 195 goto check_capabilities; 196 else if (error != -EAGAIN) 197 return error; 198 } 199 200 if (in_group_p(inode->i_gid)) 201 mode >>= 3; 202 } 203 204 /* 205 * If the DACs are ok we don't need any capability check. 206 */ 207 if ((mask & ~mode) == 0) 208 return 0; 209 210 check_capabilities: 211 /* 212 * Read/write DACs are always overridable. 213 * Executable DACs are overridable if at least one exec bit is set. 214 */ 215 if (!(mask & MAY_EXEC) || 216 (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode)) 217 if (capable(CAP_DAC_OVERRIDE)) 218 return 0; 219 220 /* 221 * Searching includes executable on directories, else just read. 222 */ 223 if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE))) 224 if (capable(CAP_DAC_READ_SEARCH)) 225 return 0; 226 227 return -EACCES; 228 } 229 230 int permission(struct inode *inode, int mask, struct nameidata *nd) 231 { 232 int retval; 233 struct vfsmount *mnt = NULL; 234 235 if (nd) 236 mnt = nd->path.mnt; 237 238 if (mask & MAY_WRITE) { 239 umode_t mode = inode->i_mode; 240 241 /* 242 * Nobody gets write access to a read-only fs. 243 */ 244 if (IS_RDONLY(inode) && 245 (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) 246 return -EROFS; 247 248 /* 249 * Nobody gets write access to an immutable file. 250 */ 251 if (IS_IMMUTABLE(inode)) 252 return -EACCES; 253 } 254 255 if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) { 256 /* 257 * MAY_EXEC on regular files is denied if the fs is mounted 258 * with the "noexec" flag. 259 */ 260 if (mnt && (mnt->mnt_flags & MNT_NOEXEC)) 261 return -EACCES; 262 } 263 264 /* Ordinary permission routines do not understand MAY_APPEND. */ 265 if (inode->i_op && inode->i_op->permission) { 266 int extra = 0; 267 if (nd) { 268 if (nd->flags & LOOKUP_OPEN) 269 extra |= MAY_OPEN; 270 } 271 retval = inode->i_op->permission(inode, mask | extra); 272 if (!retval) { 273 /* 274 * Exec permission on a regular file is denied if none 275 * of the execute bits are set. 276 * 277 * This check should be done by the ->permission() 278 * method. 279 */ 280 if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode) && 281 !(inode->i_mode & S_IXUGO)) 282 return -EACCES; 283 } 284 } else { 285 retval = generic_permission(inode, mask, NULL); 286 } 287 if (retval) 288 return retval; 289 290 retval = devcgroup_inode_permission(inode, mask); 291 if (retval) 292 return retval; 293 294 return security_inode_permission(inode, 295 mask & (MAY_READ|MAY_WRITE|MAY_EXEC), nd); 296 } 297 298 /** 299 * vfs_permission - check for access rights to a given path 300 * @nd: lookup result that describes the path 301 * @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC) 302 * 303 * Used to check for read/write/execute permissions on a path. 304 * We use "fsuid" for this, letting us set arbitrary permissions 305 * for filesystem access without changing the "normal" uids which 306 * are used for other things. 307 */ 308 int vfs_permission(struct nameidata *nd, int mask) 309 { 310 return permission(nd->path.dentry->d_inode, mask, nd); 311 } 312 313 /** 314 * file_permission - check for additional access rights to a given file 315 * @file: file to check access rights for 316 * @mask: right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC) 317 * 318 * Used to check for read/write/execute permissions on an already opened 319 * file. 320 * 321 * Note: 322 * Do not use this function in new code. All access checks should 323 * be done using vfs_permission(). 324 */ 325 int file_permission(struct file *file, int mask) 326 { 327 return permission(file->f_path.dentry->d_inode, mask, NULL); 328 } 329 330 /* 331 * get_write_access() gets write permission for a file. 332 * put_write_access() releases this write permission. 333 * This is used for regular files. 334 * We cannot support write (and maybe mmap read-write shared) accesses and 335 * MAP_DENYWRITE mmappings simultaneously. The i_writecount field of an inode 336 * can have the following values: 337 * 0: no writers, no VM_DENYWRITE mappings 338 * < 0: (-i_writecount) vm_area_structs with VM_DENYWRITE set exist 339 * > 0: (i_writecount) users are writing to the file. 340 * 341 * Normally we operate on that counter with atomic_{inc,dec} and it's safe 342 * except for the cases where we don't hold i_writecount yet. Then we need to 343 * use {get,deny}_write_access() - these functions check the sign and refuse 344 * to do the change if sign is wrong. Exclusion between them is provided by 345 * the inode->i_lock spinlock. 346 */ 347 348 int get_write_access(struct inode * inode) 349 { 350 spin_lock(&inode->i_lock); 351 if (atomic_read(&inode->i_writecount) < 0) { 352 spin_unlock(&inode->i_lock); 353 return -ETXTBSY; 354 } 355 atomic_inc(&inode->i_writecount); 356 spin_unlock(&inode->i_lock); 357 358 return 0; 359 } 360 361 int deny_write_access(struct file * file) 362 { 363 struct inode *inode = file->f_path.dentry->d_inode; 364 365 spin_lock(&inode->i_lock); 366 if (atomic_read(&inode->i_writecount) > 0) { 367 spin_unlock(&inode->i_lock); 368 return -ETXTBSY; 369 } 370 atomic_dec(&inode->i_writecount); 371 spin_unlock(&inode->i_lock); 372 373 return 0; 374 } 375 376 /** 377 * path_get - get a reference to a path 378 * @path: path to get the reference to 379 * 380 * Given a path increment the reference count to the dentry and the vfsmount. 381 */ 382 void path_get(struct path *path) 383 { 384 mntget(path->mnt); 385 dget(path->dentry); 386 } 387 EXPORT_SYMBOL(path_get); 388 389 /** 390 * path_put - put a reference to a path 391 * @path: path to put the reference to 392 * 393 * Given a path decrement the reference count to the dentry and the vfsmount. 394 */ 395 void path_put(struct path *path) 396 { 397 dput(path->dentry); 398 mntput(path->mnt); 399 } 400 EXPORT_SYMBOL(path_put); 401 402 /** 403 * release_open_intent - free up open intent resources 404 * @nd: pointer to nameidata 405 */ 406 void release_open_intent(struct nameidata *nd) 407 { 408 if (nd->intent.open.file->f_path.dentry == NULL) 409 put_filp(nd->intent.open.file); 410 else 411 fput(nd->intent.open.file); 412 } 413 414 static inline struct dentry * 415 do_revalidate(struct dentry *dentry, struct nameidata *nd) 416 { 417 int status = dentry->d_op->d_revalidate(dentry, nd); 418 if (unlikely(status <= 0)) { 419 /* 420 * The dentry failed validation. 421 * If d_revalidate returned 0 attempt to invalidate 422 * the dentry otherwise d_revalidate is asking us 423 * to return a fail status. 424 */ 425 if (!status) { 426 if (!d_invalidate(dentry)) { 427 dput(dentry); 428 dentry = NULL; 429 } 430 } else { 431 dput(dentry); 432 dentry = ERR_PTR(status); 433 } 434 } 435 return dentry; 436 } 437 438 /* 439 * Internal lookup() using the new generic dcache. 440 * SMP-safe 441 */ 442 static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd) 443 { 444 struct dentry * dentry = __d_lookup(parent, name); 445 446 /* lockess __d_lookup may fail due to concurrent d_move() 447 * in some unrelated directory, so try with d_lookup 448 */ 449 if (!dentry) 450 dentry = d_lookup(parent, name); 451 452 if (dentry && dentry->d_op && dentry->d_op->d_revalidate) 453 dentry = do_revalidate(dentry, nd); 454 455 return dentry; 456 } 457 458 /* 459 * Short-cut version of permission(), for calling by 460 * path_walk(), when dcache lock is held. Combines parts 461 * of permission() and generic_permission(), and tests ONLY for 462 * MAY_EXEC permission. 463 * 464 * If appropriate, check DAC only. If not appropriate, or 465 * short-cut DAC fails, then call permission() to do more 466 * complete permission check. 467 */ 468 static int exec_permission_lite(struct inode *inode, 469 struct nameidata *nd) 470 { 471 umode_t mode = inode->i_mode; 472 473 if (inode->i_op && inode->i_op->permission) 474 return -EAGAIN; 475 476 if (current->fsuid == inode->i_uid) 477 mode >>= 6; 478 else if (in_group_p(inode->i_gid)) 479 mode >>= 3; 480 481 if (mode & MAY_EXEC) 482 goto ok; 483 484 if ((inode->i_mode & S_IXUGO) && capable(CAP_DAC_OVERRIDE)) 485 goto ok; 486 487 if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_OVERRIDE)) 488 goto ok; 489 490 if (S_ISDIR(inode->i_mode) && capable(CAP_DAC_READ_SEARCH)) 491 goto ok; 492 493 return -EACCES; 494 ok: 495 return security_inode_permission(inode, MAY_EXEC, nd); 496 } 497 498 /* 499 * This is called when everything else fails, and we actually have 500 * to go to the low-level filesystem to find out what we should do.. 501 * 502 * We get the directory semaphore, and after getting that we also 503 * make sure that nobody added the entry to the dcache in the meantime.. 504 * SMP-safe 505 */ 506 static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, struct nameidata *nd) 507 { 508 struct dentry * result; 509 struct inode *dir = parent->d_inode; 510 511 mutex_lock(&dir->i_mutex); 512 /* 513 * First re-do the cached lookup just in case it was created 514 * while we waited for the directory semaphore.. 515 * 516 * FIXME! This could use version numbering or similar to 517 * avoid unnecessary cache lookups. 518 * 519 * The "dcache_lock" is purely to protect the RCU list walker 520 * from concurrent renames at this point (we mustn't get false 521 * negatives from the RCU list walk here, unlike the optimistic 522 * fast walk). 523 * 524 * so doing d_lookup() (with seqlock), instead of lockfree __d_lookup 525 */ 526 result = d_lookup(parent, name); 527 if (!result) { 528 struct dentry *dentry; 529 530 /* Don't create child dentry for a dead directory. */ 531 result = ERR_PTR(-ENOENT); 532 if (IS_DEADDIR(dir)) 533 goto out_unlock; 534 535 dentry = d_alloc(parent, name); 536 result = ERR_PTR(-ENOMEM); 537 if (dentry) { 538 result = dir->i_op->lookup(dir, dentry, nd); 539 if (result) 540 dput(dentry); 541 else 542 result = dentry; 543 } 544 out_unlock: 545 mutex_unlock(&dir->i_mutex); 546 return result; 547 } 548 549 /* 550 * Uhhuh! Nasty case: the cache was re-populated while 551 * we waited on the semaphore. Need to revalidate. 552 */ 553 mutex_unlock(&dir->i_mutex); 554 if (result->d_op && result->d_op->d_revalidate) { 555 result = do_revalidate(result, nd); 556 if (!result) 557 result = ERR_PTR(-ENOENT); 558 } 559 return result; 560 } 561 562 /* SMP-safe */ 563 static __always_inline void 564 walk_init_root(const char *name, struct nameidata *nd) 565 { 566 struct fs_struct *fs = current->fs; 567 568 read_lock(&fs->lock); 569 nd->path = fs->root; 570 path_get(&fs->root); 571 read_unlock(&fs->lock); 572 } 573 574 /* 575 * Wrapper to retry pathname resolution whenever the underlying 576 * file system returns an ESTALE. 577 * 578 * Retry the whole path once, forcing real lookup requests 579 * instead of relying on the dcache. 580 */ 581 static __always_inline int link_path_walk(const char *name, struct nameidata *nd) 582 { 583 struct path save = nd->path; 584 int result; 585 586 /* make sure the stuff we saved doesn't go away */ 587 path_get(&save); 588 589 result = __link_path_walk(name, nd); 590 if (result == -ESTALE) { 591 /* nd->path had been dropped */ 592 nd->path = save; 593 path_get(&nd->path); 594 nd->flags |= LOOKUP_REVAL; 595 result = __link_path_walk(name, nd); 596 } 597 598 path_put(&save); 599 600 return result; 601 } 602 603 static __always_inline int __vfs_follow_link(struct nameidata *nd, const char *link) 604 { 605 int res = 0; 606 char *name; 607 if (IS_ERR(link)) 608 goto fail; 609 610 if (*link == '/') { 611 path_put(&nd->path); 612 walk_init_root(link, nd); 613 } 614 res = link_path_walk(link, nd); 615 if (nd->depth || res || nd->last_type!=LAST_NORM) 616 return res; 617 /* 618 * If it is an iterative symlinks resolution in open_namei() we 619 * have to copy the last component. And all that crap because of 620 * bloody create() on broken symlinks. Furrfu... 621 */ 622 name = __getname(); 623 if (unlikely(!name)) { 624 path_put(&nd->path); 625 return -ENOMEM; 626 } 627 strcpy(name, nd->last.name); 628 nd->last.name = name; 629 return 0; 630 fail: 631 path_put(&nd->path); 632 return PTR_ERR(link); 633 } 634 635 static void path_put_conditional(struct path *path, struct nameidata *nd) 636 { 637 dput(path->dentry); 638 if (path->mnt != nd->path.mnt) 639 mntput(path->mnt); 640 } 641 642 static inline void path_to_nameidata(struct path *path, struct nameidata *nd) 643 { 644 dput(nd->path.dentry); 645 if (nd->path.mnt != path->mnt) 646 mntput(nd->path.mnt); 647 nd->path.mnt = path->mnt; 648 nd->path.dentry = path->dentry; 649 } 650 651 static __always_inline int __do_follow_link(struct path *path, struct nameidata *nd) 652 { 653 int error; 654 void *cookie; 655 struct dentry *dentry = path->dentry; 656 657 touch_atime(path->mnt, dentry); 658 nd_set_link(nd, NULL); 659 660 if (path->mnt != nd->path.mnt) { 661 path_to_nameidata(path, nd); 662 dget(dentry); 663 } 664 mntget(path->mnt); 665 cookie = dentry->d_inode->i_op->follow_link(dentry, nd); 666 error = PTR_ERR(cookie); 667 if (!IS_ERR(cookie)) { 668 char *s = nd_get_link(nd); 669 error = 0; 670 if (s) 671 error = __vfs_follow_link(nd, s); 672 if (dentry->d_inode->i_op->put_link) 673 dentry->d_inode->i_op->put_link(dentry, nd, cookie); 674 } 675 path_put(path); 676 677 return error; 678 } 679 680 /* 681 * This limits recursive symlink follows to 8, while 682 * limiting consecutive symlinks to 40. 683 * 684 * Without that kind of total limit, nasty chains of consecutive 685 * symlinks can cause almost arbitrarily long lookups. 686 */ 687 static inline int do_follow_link(struct path *path, struct nameidata *nd) 688 { 689 int err = -ELOOP; 690 if (current->link_count >= MAX_NESTED_LINKS) 691 goto loop; 692 if (current->total_link_count >= 40) 693 goto loop; 694 BUG_ON(nd->depth >= MAX_NESTED_LINKS); 695 cond_resched(); 696 err = security_inode_follow_link(path->dentry, nd); 697 if (err) 698 goto loop; 699 current->link_count++; 700 current->total_link_count++; 701 nd->depth++; 702 err = __do_follow_link(path, nd); 703 current->link_count--; 704 nd->depth--; 705 return err; 706 loop: 707 path_put_conditional(path, nd); 708 path_put(&nd->path); 709 return err; 710 } 711 712 int follow_up(struct vfsmount **mnt, struct dentry **dentry) 713 { 714 struct vfsmount *parent; 715 struct dentry *mountpoint; 716 spin_lock(&vfsmount_lock); 717 parent=(*mnt)->mnt_parent; 718 if (parent == *mnt) { 719 spin_unlock(&vfsmount_lock); 720 return 0; 721 } 722 mntget(parent); 723 mountpoint=dget((*mnt)->mnt_mountpoint); 724 spin_unlock(&vfsmount_lock); 725 dput(*dentry); 726 *dentry = mountpoint; 727 mntput(*mnt); 728 *mnt = parent; 729 return 1; 730 } 731 732 /* no need for dcache_lock, as serialization is taken care in 733 * namespace.c 734 */ 735 static int __follow_mount(struct path *path) 736 { 737 int res = 0; 738 while (d_mountpoint(path->dentry)) { 739 struct vfsmount *mounted = lookup_mnt(path->mnt, path->dentry); 740 if (!mounted) 741 break; 742 dput(path->dentry); 743 if (res) 744 mntput(path->mnt); 745 path->mnt = mounted; 746 path->dentry = dget(mounted->mnt_root); 747 res = 1; 748 } 749 return res; 750 } 751 752 static void follow_mount(struct vfsmount **mnt, struct dentry **dentry) 753 { 754 while (d_mountpoint(*dentry)) { 755 struct vfsmount *mounted = lookup_mnt(*mnt, *dentry); 756 if (!mounted) 757 break; 758 dput(*dentry); 759 mntput(*mnt); 760 *mnt = mounted; 761 *dentry = dget(mounted->mnt_root); 762 } 763 } 764 765 /* no need for dcache_lock, as serialization is taken care in 766 * namespace.c 767 */ 768 int follow_down(struct vfsmount **mnt, struct dentry **dentry) 769 { 770 struct vfsmount *mounted; 771 772 mounted = lookup_mnt(*mnt, *dentry); 773 if (mounted) { 774 dput(*dentry); 775 mntput(*mnt); 776 *mnt = mounted; 777 *dentry = dget(mounted->mnt_root); 778 return 1; 779 } 780 return 0; 781 } 782 783 static __always_inline void follow_dotdot(struct nameidata *nd) 784 { 785 struct fs_struct *fs = current->fs; 786 787 while(1) { 788 struct vfsmount *parent; 789 struct dentry *old = nd->path.dentry; 790 791 read_lock(&fs->lock); 792 if (nd->path.dentry == fs->root.dentry && 793 nd->path.mnt == fs->root.mnt) { 794 read_unlock(&fs->lock); 795 break; 796 } 797 read_unlock(&fs->lock); 798 spin_lock(&dcache_lock); 799 if (nd->path.dentry != nd->path.mnt->mnt_root) { 800 nd->path.dentry = dget(nd->path.dentry->d_parent); 801 spin_unlock(&dcache_lock); 802 dput(old); 803 break; 804 } 805 spin_unlock(&dcache_lock); 806 spin_lock(&vfsmount_lock); 807 parent = nd->path.mnt->mnt_parent; 808 if (parent == nd->path.mnt) { 809 spin_unlock(&vfsmount_lock); 810 break; 811 } 812 mntget(parent); 813 nd->path.dentry = dget(nd->path.mnt->mnt_mountpoint); 814 spin_unlock(&vfsmount_lock); 815 dput(old); 816 mntput(nd->path.mnt); 817 nd->path.mnt = parent; 818 } 819 follow_mount(&nd->path.mnt, &nd->path.dentry); 820 } 821 822 /* 823 * It's more convoluted than I'd like it to be, but... it's still fairly 824 * small and for now I'd prefer to have fast path as straight as possible. 825 * It _is_ time-critical. 826 */ 827 static int do_lookup(struct nameidata *nd, struct qstr *name, 828 struct path *path) 829 { 830 struct vfsmount *mnt = nd->path.mnt; 831 struct dentry *dentry = __d_lookup(nd->path.dentry, name); 832 833 if (!dentry) 834 goto need_lookup; 835 if (dentry->d_op && dentry->d_op->d_revalidate) 836 goto need_revalidate; 837 done: 838 path->mnt = mnt; 839 path->dentry = dentry; 840 __follow_mount(path); 841 return 0; 842 843 need_lookup: 844 dentry = real_lookup(nd->path.dentry, name, nd); 845 if (IS_ERR(dentry)) 846 goto fail; 847 goto done; 848 849 need_revalidate: 850 dentry = do_revalidate(dentry, nd); 851 if (!dentry) 852 goto need_lookup; 853 if (IS_ERR(dentry)) 854 goto fail; 855 goto done; 856 857 fail: 858 return PTR_ERR(dentry); 859 } 860 861 /* 862 * Name resolution. 863 * This is the basic name resolution function, turning a pathname into 864 * the final dentry. We expect 'base' to be positive and a directory. 865 * 866 * Returns 0 and nd will have valid dentry and mnt on success. 867 * Returns error and drops reference to input namei data on failure. 868 */ 869 static int __link_path_walk(const char *name, struct nameidata *nd) 870 { 871 struct path next; 872 struct inode *inode; 873 int err; 874 unsigned int lookup_flags = nd->flags; 875 876 while (*name=='/') 877 name++; 878 if (!*name) 879 goto return_reval; 880 881 inode = nd->path.dentry->d_inode; 882 if (nd->depth) 883 lookup_flags = LOOKUP_FOLLOW | (nd->flags & LOOKUP_CONTINUE); 884 885 /* At this point we know we have a real path component. */ 886 for(;;) { 887 unsigned long hash; 888 struct qstr this; 889 unsigned int c; 890 891 nd->flags |= LOOKUP_CONTINUE; 892 err = exec_permission_lite(inode, nd); 893 if (err == -EAGAIN) 894 err = vfs_permission(nd, MAY_EXEC); 895 if (err) 896 break; 897 898 this.name = name; 899 c = *(const unsigned char *)name; 900 901 hash = init_name_hash(); 902 do { 903 name++; 904 hash = partial_name_hash(c, hash); 905 c = *(const unsigned char *)name; 906 } while (c && (c != '/')); 907 this.len = name - (const char *) this.name; 908 this.hash = end_name_hash(hash); 909 910 /* remove trailing slashes? */ 911 if (!c) 912 goto last_component; 913 while (*++name == '/'); 914 if (!*name) 915 goto last_with_slashes; 916 917 /* 918 * "." and ".." are special - ".." especially so because it has 919 * to be able to know about the current root directory and 920 * parent relationships. 921 */ 922 if (this.name[0] == '.') switch (this.len) { 923 default: 924 break; 925 case 2: 926 if (this.name[1] != '.') 927 break; 928 follow_dotdot(nd); 929 inode = nd->path.dentry->d_inode; 930 /* fallthrough */ 931 case 1: 932 continue; 933 } 934 /* 935 * See if the low-level filesystem might want 936 * to use its own hash.. 937 */ 938 if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) { 939 err = nd->path.dentry->d_op->d_hash(nd->path.dentry, 940 &this); 941 if (err < 0) 942 break; 943 } 944 /* This does the actual lookups.. */ 945 err = do_lookup(nd, &this, &next); 946 if (err) 947 break; 948 949 err = -ENOENT; 950 inode = next.dentry->d_inode; 951 if (!inode) 952 goto out_dput; 953 err = -ENOTDIR; 954 if (!inode->i_op) 955 goto out_dput; 956 957 if (inode->i_op->follow_link) { 958 err = do_follow_link(&next, nd); 959 if (err) 960 goto return_err; 961 err = -ENOENT; 962 inode = nd->path.dentry->d_inode; 963 if (!inode) 964 break; 965 err = -ENOTDIR; 966 if (!inode->i_op) 967 break; 968 } else 969 path_to_nameidata(&next, nd); 970 err = -ENOTDIR; 971 if (!inode->i_op->lookup) 972 break; 973 continue; 974 /* here ends the main loop */ 975 976 last_with_slashes: 977 lookup_flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY; 978 last_component: 979 /* Clear LOOKUP_CONTINUE iff it was previously unset */ 980 nd->flags &= lookup_flags | ~LOOKUP_CONTINUE; 981 if (lookup_flags & LOOKUP_PARENT) 982 goto lookup_parent; 983 if (this.name[0] == '.') switch (this.len) { 984 default: 985 break; 986 case 2: 987 if (this.name[1] != '.') 988 break; 989 follow_dotdot(nd); 990 inode = nd->path.dentry->d_inode; 991 /* fallthrough */ 992 case 1: 993 goto return_reval; 994 } 995 if (nd->path.dentry->d_op && nd->path.dentry->d_op->d_hash) { 996 err = nd->path.dentry->d_op->d_hash(nd->path.dentry, 997 &this); 998 if (err < 0) 999 break; 1000 } 1001 err = do_lookup(nd, &this, &next); 1002 if (err) 1003 break; 1004 inode = next.dentry->d_inode; 1005 if ((lookup_flags & LOOKUP_FOLLOW) 1006 && inode && inode->i_op && inode->i_op->follow_link) { 1007 err = do_follow_link(&next, nd); 1008 if (err) 1009 goto return_err; 1010 inode = nd->path.dentry->d_inode; 1011 } else 1012 path_to_nameidata(&next, nd); 1013 err = -ENOENT; 1014 if (!inode) 1015 break; 1016 if (lookup_flags & LOOKUP_DIRECTORY) { 1017 err = -ENOTDIR; 1018 if (!inode->i_op || !inode->i_op->lookup) 1019 break; 1020 } 1021 goto return_base; 1022 lookup_parent: 1023 nd->last = this; 1024 nd->last_type = LAST_NORM; 1025 if (this.name[0] != '.') 1026 goto return_base; 1027 if (this.len == 1) 1028 nd->last_type = LAST_DOT; 1029 else if (this.len == 2 && this.name[1] == '.') 1030 nd->last_type = LAST_DOTDOT; 1031 else 1032 goto return_base; 1033 return_reval: 1034 /* 1035 * We bypassed the ordinary revalidation routines. 1036 * We may need to check the cached dentry for staleness. 1037 */ 1038 if (nd->path.dentry && nd->path.dentry->d_sb && 1039 (nd->path.dentry->d_sb->s_type->fs_flags & FS_REVAL_DOT)) { 1040 err = -ESTALE; 1041 /* Note: we do not d_invalidate() */ 1042 if (!nd->path.dentry->d_op->d_revalidate( 1043 nd->path.dentry, nd)) 1044 break; 1045 } 1046 return_base: 1047 return 0; 1048 out_dput: 1049 path_put_conditional(&next, nd); 1050 break; 1051 } 1052 path_put(&nd->path); 1053 return_err: 1054 return err; 1055 } 1056 1057 static int path_walk(const char *name, struct nameidata *nd) 1058 { 1059 current->total_link_count = 0; 1060 return link_path_walk(name, nd); 1061 } 1062 1063 /* Returns 0 and nd will be valid on success; Retuns error, otherwise. */ 1064 static int do_path_lookup(int dfd, const char *name, 1065 unsigned int flags, struct nameidata *nd) 1066 { 1067 int retval = 0; 1068 int fput_needed; 1069 struct file *file; 1070 struct fs_struct *fs = current->fs; 1071 1072 nd->last_type = LAST_ROOT; /* if there are only slashes... */ 1073 nd->flags = flags; 1074 nd->depth = 0; 1075 1076 if (*name=='/') { 1077 read_lock(&fs->lock); 1078 nd->path = fs->root; 1079 path_get(&fs->root); 1080 read_unlock(&fs->lock); 1081 } else if (dfd == AT_FDCWD) { 1082 read_lock(&fs->lock); 1083 nd->path = fs->pwd; 1084 path_get(&fs->pwd); 1085 read_unlock(&fs->lock); 1086 } else { 1087 struct dentry *dentry; 1088 1089 file = fget_light(dfd, &fput_needed); 1090 retval = -EBADF; 1091 if (!file) 1092 goto out_fail; 1093 1094 dentry = file->f_path.dentry; 1095 1096 retval = -ENOTDIR; 1097 if (!S_ISDIR(dentry->d_inode->i_mode)) 1098 goto fput_fail; 1099 1100 retval = file_permission(file, MAY_EXEC); 1101 if (retval) 1102 goto fput_fail; 1103 1104 nd->path = file->f_path; 1105 path_get(&file->f_path); 1106 1107 fput_light(file, fput_needed); 1108 } 1109 1110 retval = path_walk(name, nd); 1111 if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry && 1112 nd->path.dentry->d_inode)) 1113 audit_inode(name, nd->path.dentry); 1114 out_fail: 1115 return retval; 1116 1117 fput_fail: 1118 fput_light(file, fput_needed); 1119 goto out_fail; 1120 } 1121 1122 int path_lookup(const char *name, unsigned int flags, 1123 struct nameidata *nd) 1124 { 1125 return do_path_lookup(AT_FDCWD, name, flags, nd); 1126 } 1127 1128 /** 1129 * vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair 1130 * @dentry: pointer to dentry of the base directory 1131 * @mnt: pointer to vfs mount of the base directory 1132 * @name: pointer to file name 1133 * @flags: lookup flags 1134 * @nd: pointer to nameidata 1135 */ 1136 int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt, 1137 const char *name, unsigned int flags, 1138 struct nameidata *nd) 1139 { 1140 int retval; 1141 1142 /* same as do_path_lookup */ 1143 nd->last_type = LAST_ROOT; 1144 nd->flags = flags; 1145 nd->depth = 0; 1146 1147 nd->path.dentry = dentry; 1148 nd->path.mnt = mnt; 1149 path_get(&nd->path); 1150 1151 retval = path_walk(name, nd); 1152 if (unlikely(!retval && !audit_dummy_context() && nd->path.dentry && 1153 nd->path.dentry->d_inode)) 1154 audit_inode(name, nd->path.dentry); 1155 1156 return retval; 1157 1158 } 1159 1160 static int __path_lookup_intent_open(int dfd, const char *name, 1161 unsigned int lookup_flags, struct nameidata *nd, 1162 int open_flags, int create_mode) 1163 { 1164 struct file *filp = get_empty_filp(); 1165 int err; 1166 1167 if (filp == NULL) 1168 return -ENFILE; 1169 nd->intent.open.file = filp; 1170 nd->intent.open.flags = open_flags; 1171 nd->intent.open.create_mode = create_mode; 1172 err = do_path_lookup(dfd, name, lookup_flags|LOOKUP_OPEN, nd); 1173 if (IS_ERR(nd->intent.open.file)) { 1174 if (err == 0) { 1175 err = PTR_ERR(nd->intent.open.file); 1176 path_put(&nd->path); 1177 } 1178 } else if (err != 0) 1179 release_open_intent(nd); 1180 return err; 1181 } 1182 1183 /** 1184 * path_lookup_open - lookup a file path with open intent 1185 * @dfd: the directory to use as base, or AT_FDCWD 1186 * @name: pointer to file name 1187 * @lookup_flags: lookup intent flags 1188 * @nd: pointer to nameidata 1189 * @open_flags: open intent flags 1190 */ 1191 int path_lookup_open(int dfd, const char *name, unsigned int lookup_flags, 1192 struct nameidata *nd, int open_flags) 1193 { 1194 return __path_lookup_intent_open(dfd, name, lookup_flags, nd, 1195 open_flags, 0); 1196 } 1197 1198 /** 1199 * path_lookup_create - lookup a file path with open + create intent 1200 * @dfd: the directory to use as base, or AT_FDCWD 1201 * @name: pointer to file name 1202 * @lookup_flags: lookup intent flags 1203 * @nd: pointer to nameidata 1204 * @open_flags: open intent flags 1205 * @create_mode: create intent flags 1206 */ 1207 static int path_lookup_create(int dfd, const char *name, 1208 unsigned int lookup_flags, struct nameidata *nd, 1209 int open_flags, int create_mode) 1210 { 1211 return __path_lookup_intent_open(dfd, name, lookup_flags|LOOKUP_CREATE, 1212 nd, open_flags, create_mode); 1213 } 1214 1215 int __user_path_lookup_open(const char __user *name, unsigned int lookup_flags, 1216 struct nameidata *nd, int open_flags) 1217 { 1218 char *tmp = getname(name); 1219 int err = PTR_ERR(tmp); 1220 1221 if (!IS_ERR(tmp)) { 1222 err = __path_lookup_intent_open(AT_FDCWD, tmp, lookup_flags, nd, open_flags, 0); 1223 putname(tmp); 1224 } 1225 return err; 1226 } 1227 1228 static struct dentry *__lookup_hash(struct qstr *name, 1229 struct dentry *base, struct nameidata *nd) 1230 { 1231 struct dentry *dentry; 1232 struct inode *inode; 1233 int err; 1234 1235 inode = base->d_inode; 1236 1237 /* 1238 * See if the low-level filesystem might want 1239 * to use its own hash.. 1240 */ 1241 if (base->d_op && base->d_op->d_hash) { 1242 err = base->d_op->d_hash(base, name); 1243 dentry = ERR_PTR(err); 1244 if (err < 0) 1245 goto out; 1246 } 1247 1248 dentry = cached_lookup(base, name, nd); 1249 if (!dentry) { 1250 struct dentry *new; 1251 1252 /* Don't create child dentry for a dead directory. */ 1253 dentry = ERR_PTR(-ENOENT); 1254 if (IS_DEADDIR(inode)) 1255 goto out; 1256 1257 new = d_alloc(base, name); 1258 dentry = ERR_PTR(-ENOMEM); 1259 if (!new) 1260 goto out; 1261 dentry = inode->i_op->lookup(inode, new, nd); 1262 if (!dentry) 1263 dentry = new; 1264 else 1265 dput(new); 1266 } 1267 out: 1268 return dentry; 1269 } 1270 1271 /* 1272 * Restricted form of lookup. Doesn't follow links, single-component only, 1273 * needs parent already locked. Doesn't follow mounts. 1274 * SMP-safe. 1275 */ 1276 static struct dentry *lookup_hash(struct nameidata *nd) 1277 { 1278 int err; 1279 1280 err = permission(nd->path.dentry->d_inode, MAY_EXEC, nd); 1281 if (err) 1282 return ERR_PTR(err); 1283 return __lookup_hash(&nd->last, nd->path.dentry, nd); 1284 } 1285 1286 static int __lookup_one_len(const char *name, struct qstr *this, 1287 struct dentry *base, int len) 1288 { 1289 unsigned long hash; 1290 unsigned int c; 1291 1292 this->name = name; 1293 this->len = len; 1294 if (!len) 1295 return -EACCES; 1296 1297 hash = init_name_hash(); 1298 while (len--) { 1299 c = *(const unsigned char *)name++; 1300 if (c == '/' || c == '\0') 1301 return -EACCES; 1302 hash = partial_name_hash(c, hash); 1303 } 1304 this->hash = end_name_hash(hash); 1305 return 0; 1306 } 1307 1308 /** 1309 * lookup_one_len - filesystem helper to lookup single pathname component 1310 * @name: pathname component to lookup 1311 * @base: base directory to lookup from 1312 * @len: maximum length @len should be interpreted to 1313 * 1314 * Note that this routine is purely a helper for filesystem usage and should 1315 * not be called by generic code. Also note that by using this function the 1316 * nameidata argument is passed to the filesystem methods and a filesystem 1317 * using this helper needs to be prepared for that. 1318 */ 1319 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) 1320 { 1321 int err; 1322 struct qstr this; 1323 1324 err = __lookup_one_len(name, &this, base, len); 1325 if (err) 1326 return ERR_PTR(err); 1327 1328 err = permission(base->d_inode, MAY_EXEC, NULL); 1329 if (err) 1330 return ERR_PTR(err); 1331 return __lookup_hash(&this, base, NULL); 1332 } 1333 1334 /** 1335 * lookup_one_noperm - bad hack for sysfs 1336 * @name: pathname component to lookup 1337 * @base: base directory to lookup from 1338 * 1339 * This is a variant of lookup_one_len that doesn't perform any permission 1340 * checks. It's a horrible hack to work around the braindead sysfs 1341 * architecture and should not be used anywhere else. 1342 * 1343 * DON'T USE THIS FUNCTION EVER, thanks. 1344 */ 1345 struct dentry *lookup_one_noperm(const char *name, struct dentry *base) 1346 { 1347 int err; 1348 struct qstr this; 1349 1350 err = __lookup_one_len(name, &this, base, strlen(name)); 1351 if (err) 1352 return ERR_PTR(err); 1353 return __lookup_hash(&this, base, NULL); 1354 } 1355 1356 int __user_walk_fd(int dfd, const char __user *name, unsigned flags, 1357 struct nameidata *nd) 1358 { 1359 char *tmp = getname(name); 1360 int err = PTR_ERR(tmp); 1361 1362 if (!IS_ERR(tmp)) { 1363 err = do_path_lookup(dfd, tmp, flags, nd); 1364 putname(tmp); 1365 } 1366 return err; 1367 } 1368 1369 int __user_walk(const char __user *name, unsigned flags, struct nameidata *nd) 1370 { 1371 return __user_walk_fd(AT_FDCWD, name, flags, nd); 1372 } 1373 1374 /* 1375 * It's inline, so penalty for filesystems that don't use sticky bit is 1376 * minimal. 1377 */ 1378 static inline int check_sticky(struct inode *dir, struct inode *inode) 1379 { 1380 if (!(dir->i_mode & S_ISVTX)) 1381 return 0; 1382 if (inode->i_uid == current->fsuid) 1383 return 0; 1384 if (dir->i_uid == current->fsuid) 1385 return 0; 1386 return !capable(CAP_FOWNER); 1387 } 1388 1389 /* 1390 * Check whether we can remove a link victim from directory dir, check 1391 * whether the type of victim is right. 1392 * 1. We can't do it if dir is read-only (done in permission()) 1393 * 2. We should have write and exec permissions on dir 1394 * 3. We can't remove anything from append-only dir 1395 * 4. We can't do anything with immutable dir (done in permission()) 1396 * 5. If the sticky bit on dir is set we should either 1397 * a. be owner of dir, or 1398 * b. be owner of victim, or 1399 * c. have CAP_FOWNER capability 1400 * 6. If the victim is append-only or immutable we can't do antyhing with 1401 * links pointing to it. 1402 * 7. If we were asked to remove a directory and victim isn't one - ENOTDIR. 1403 * 8. If we were asked to remove a non-directory and victim isn't one - EISDIR. 1404 * 9. We can't remove a root or mountpoint. 1405 * 10. We don't allow removal of NFS sillyrenamed files; it's handled by 1406 * nfs_async_unlink(). 1407 */ 1408 static int may_delete(struct inode *dir,struct dentry *victim,int isdir) 1409 { 1410 int error; 1411 1412 if (!victim->d_inode) 1413 return -ENOENT; 1414 1415 BUG_ON(victim->d_parent->d_inode != dir); 1416 audit_inode_child(victim->d_name.name, victim, dir); 1417 1418 error = permission(dir,MAY_WRITE | MAY_EXEC, NULL); 1419 if (error) 1420 return error; 1421 if (IS_APPEND(dir)) 1422 return -EPERM; 1423 if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)|| 1424 IS_IMMUTABLE(victim->d_inode)) 1425 return -EPERM; 1426 if (isdir) { 1427 if (!S_ISDIR(victim->d_inode->i_mode)) 1428 return -ENOTDIR; 1429 if (IS_ROOT(victim)) 1430 return -EBUSY; 1431 } else if (S_ISDIR(victim->d_inode->i_mode)) 1432 return -EISDIR; 1433 if (IS_DEADDIR(dir)) 1434 return -ENOENT; 1435 if (victim->d_flags & DCACHE_NFSFS_RENAMED) 1436 return -EBUSY; 1437 return 0; 1438 } 1439 1440 /* Check whether we can create an object with dentry child in directory 1441 * dir. 1442 * 1. We can't do it if child already exists (open has special treatment for 1443 * this case, but since we are inlined it's OK) 1444 * 2. We can't do it if dir is read-only (done in permission()) 1445 * 3. We should have write and exec permissions on dir 1446 * 4. We can't do it if dir is immutable (done in permission()) 1447 */ 1448 static inline int may_create(struct inode *dir, struct dentry *child, 1449 struct nameidata *nd) 1450 { 1451 if (child->d_inode) 1452 return -EEXIST; 1453 if (IS_DEADDIR(dir)) 1454 return -ENOENT; 1455 return permission(dir,MAY_WRITE | MAY_EXEC, nd); 1456 } 1457 1458 /* 1459 * O_DIRECTORY translates into forcing a directory lookup. 1460 */ 1461 static inline int lookup_flags(unsigned int f) 1462 { 1463 unsigned long retval = LOOKUP_FOLLOW; 1464 1465 if (f & O_NOFOLLOW) 1466 retval &= ~LOOKUP_FOLLOW; 1467 1468 if (f & O_DIRECTORY) 1469 retval |= LOOKUP_DIRECTORY; 1470 1471 return retval; 1472 } 1473 1474 /* 1475 * p1 and p2 should be directories on the same fs. 1476 */ 1477 struct dentry *lock_rename(struct dentry *p1, struct dentry *p2) 1478 { 1479 struct dentry *p; 1480 1481 if (p1 == p2) { 1482 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT); 1483 return NULL; 1484 } 1485 1486 mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex); 1487 1488 for (p = p1; p->d_parent != p; p = p->d_parent) { 1489 if (p->d_parent == p2) { 1490 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT); 1491 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD); 1492 return p; 1493 } 1494 } 1495 1496 for (p = p2; p->d_parent != p; p = p->d_parent) { 1497 if (p->d_parent == p1) { 1498 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT); 1499 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD); 1500 return p; 1501 } 1502 } 1503 1504 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT); 1505 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD); 1506 return NULL; 1507 } 1508 1509 void unlock_rename(struct dentry *p1, struct dentry *p2) 1510 { 1511 mutex_unlock(&p1->d_inode->i_mutex); 1512 if (p1 != p2) { 1513 mutex_unlock(&p2->d_inode->i_mutex); 1514 mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex); 1515 } 1516 } 1517 1518 int vfs_create(struct inode *dir, struct dentry *dentry, int mode, 1519 struct nameidata *nd) 1520 { 1521 int error = may_create(dir, dentry, nd); 1522 1523 if (error) 1524 return error; 1525 1526 if (!dir->i_op || !dir->i_op->create) 1527 return -EACCES; /* shouldn't it be ENOSYS? */ 1528 mode &= S_IALLUGO; 1529 mode |= S_IFREG; 1530 error = security_inode_create(dir, dentry, mode); 1531 if (error) 1532 return error; 1533 DQUOT_INIT(dir); 1534 error = dir->i_op->create(dir, dentry, mode, nd); 1535 if (!error) 1536 fsnotify_create(dir, dentry); 1537 return error; 1538 } 1539 1540 int may_open(struct nameidata *nd, int acc_mode, int flag) 1541 { 1542 struct dentry *dentry = nd->path.dentry; 1543 struct inode *inode = dentry->d_inode; 1544 int error; 1545 1546 if (!inode) 1547 return -ENOENT; 1548 1549 if (S_ISLNK(inode->i_mode)) 1550 return -ELOOP; 1551 1552 if (S_ISDIR(inode->i_mode) && (acc_mode & MAY_WRITE)) 1553 return -EISDIR; 1554 1555 /* 1556 * FIFO's, sockets and device files are special: they don't 1557 * actually live on the filesystem itself, and as such you 1558 * can write to them even if the filesystem is read-only. 1559 */ 1560 if (S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { 1561 flag &= ~O_TRUNC; 1562 } else if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) { 1563 if (nd->path.mnt->mnt_flags & MNT_NODEV) 1564 return -EACCES; 1565 1566 flag &= ~O_TRUNC; 1567 } 1568 1569 error = vfs_permission(nd, acc_mode); 1570 if (error) 1571 return error; 1572 /* 1573 * An append-only file must be opened in append mode for writing. 1574 */ 1575 if (IS_APPEND(inode)) { 1576 if ((flag & FMODE_WRITE) && !(flag & O_APPEND)) 1577 return -EPERM; 1578 if (flag & O_TRUNC) 1579 return -EPERM; 1580 } 1581 1582 /* O_NOATIME can only be set by the owner or superuser */ 1583 if (flag & O_NOATIME) 1584 if (!is_owner_or_cap(inode)) 1585 return -EPERM; 1586 1587 /* 1588 * Ensure there are no outstanding leases on the file. 1589 */ 1590 error = break_lease(inode, flag); 1591 if (error) 1592 return error; 1593 1594 if (flag & O_TRUNC) { 1595 error = get_write_access(inode); 1596 if (error) 1597 return error; 1598 1599 /* 1600 * Refuse to truncate files with mandatory locks held on them. 1601 */ 1602 error = locks_verify_locked(inode); 1603 if (!error) { 1604 DQUOT_INIT(inode); 1605 1606 error = do_truncate(dentry, 0, 1607 ATTR_MTIME|ATTR_CTIME|ATTR_OPEN, 1608 NULL); 1609 } 1610 put_write_access(inode); 1611 if (error) 1612 return error; 1613 } else 1614 if (flag & FMODE_WRITE) 1615 DQUOT_INIT(inode); 1616 1617 return 0; 1618 } 1619 1620 /* 1621 * Be careful about ever adding any more callers of this 1622 * function. Its flags must be in the namei format, not 1623 * what get passed to sys_open(). 1624 */ 1625 static int __open_namei_create(struct nameidata *nd, struct path *path, 1626 int flag, int mode) 1627 { 1628 int error; 1629 struct dentry *dir = nd->path.dentry; 1630 1631 if (!IS_POSIXACL(dir->d_inode)) 1632 mode &= ~current->fs->umask; 1633 error = vfs_create(dir->d_inode, path->dentry, mode, nd); 1634 mutex_unlock(&dir->d_inode->i_mutex); 1635 dput(nd->path.dentry); 1636 nd->path.dentry = path->dentry; 1637 if (error) 1638 return error; 1639 /* Don't check for write permission, don't truncate */ 1640 return may_open(nd, 0, flag & ~O_TRUNC); 1641 } 1642 1643 /* 1644 * Note that while the flag value (low two bits) for sys_open means: 1645 * 00 - read-only 1646 * 01 - write-only 1647 * 10 - read-write 1648 * 11 - special 1649 * it is changed into 1650 * 00 - no permissions needed 1651 * 01 - read-permission 1652 * 10 - write-permission 1653 * 11 - read-write 1654 * for the internal routines (ie open_namei()/follow_link() etc) 1655 * This is more logical, and also allows the 00 "no perm needed" 1656 * to be used for symlinks (where the permissions are checked 1657 * later). 1658 * 1659 */ 1660 static inline int open_to_namei_flags(int flag) 1661 { 1662 if ((flag+1) & O_ACCMODE) 1663 flag++; 1664 return flag; 1665 } 1666 1667 static int open_will_write_to_fs(int flag, struct inode *inode) 1668 { 1669 /* 1670 * We'll never write to the fs underlying 1671 * a device file. 1672 */ 1673 if (special_file(inode->i_mode)) 1674 return 0; 1675 return (flag & O_TRUNC); 1676 } 1677 1678 /* 1679 * Note that the low bits of the passed in "open_flag" 1680 * are not the same as in the local variable "flag". See 1681 * open_to_namei_flags() for more details. 1682 */ 1683 struct file *do_filp_open(int dfd, const char *pathname, 1684 int open_flag, int mode) 1685 { 1686 struct file *filp; 1687 struct nameidata nd; 1688 int acc_mode, error; 1689 struct path path; 1690 struct dentry *dir; 1691 int count = 0; 1692 int will_write; 1693 int flag = open_to_namei_flags(open_flag); 1694 1695 acc_mode = ACC_MODE(flag); 1696 1697 /* O_TRUNC implies we need access checks for write permissions */ 1698 if (flag & O_TRUNC) 1699 acc_mode |= MAY_WRITE; 1700 1701 /* Allow the LSM permission hook to distinguish append 1702 access from general write access. */ 1703 if (flag & O_APPEND) 1704 acc_mode |= MAY_APPEND; 1705 1706 /* 1707 * The simplest case - just a plain lookup. 1708 */ 1709 if (!(flag & O_CREAT)) { 1710 error = path_lookup_open(dfd, pathname, lookup_flags(flag), 1711 &nd, flag); 1712 if (error) 1713 return ERR_PTR(error); 1714 goto ok; 1715 } 1716 1717 /* 1718 * Create - we need to know the parent. 1719 */ 1720 error = path_lookup_create(dfd, pathname, LOOKUP_PARENT, 1721 &nd, flag, mode); 1722 if (error) 1723 return ERR_PTR(error); 1724 1725 /* 1726 * We have the parent and last component. First of all, check 1727 * that we are not asked to creat(2) an obvious directory - that 1728 * will not do. 1729 */ 1730 error = -EISDIR; 1731 if (nd.last_type != LAST_NORM || nd.last.name[nd.last.len]) 1732 goto exit; 1733 1734 dir = nd.path.dentry; 1735 nd.flags &= ~LOOKUP_PARENT; 1736 mutex_lock(&dir->d_inode->i_mutex); 1737 path.dentry = lookup_hash(&nd); 1738 path.mnt = nd.path.mnt; 1739 1740 do_last: 1741 error = PTR_ERR(path.dentry); 1742 if (IS_ERR(path.dentry)) { 1743 mutex_unlock(&dir->d_inode->i_mutex); 1744 goto exit; 1745 } 1746 1747 if (IS_ERR(nd.intent.open.file)) { 1748 error = PTR_ERR(nd.intent.open.file); 1749 goto exit_mutex_unlock; 1750 } 1751 1752 /* Negative dentry, just create the file */ 1753 if (!path.dentry->d_inode) { 1754 /* 1755 * This write is needed to ensure that a 1756 * ro->rw transition does not occur between 1757 * the time when the file is created and when 1758 * a permanent write count is taken through 1759 * the 'struct file' in nameidata_to_filp(). 1760 */ 1761 error = mnt_want_write(nd.path.mnt); 1762 if (error) 1763 goto exit_mutex_unlock; 1764 error = __open_namei_create(&nd, &path, flag, mode); 1765 if (error) { 1766 mnt_drop_write(nd.path.mnt); 1767 goto exit; 1768 } 1769 filp = nameidata_to_filp(&nd, open_flag); 1770 mnt_drop_write(nd.path.mnt); 1771 return filp; 1772 } 1773 1774 /* 1775 * It already exists. 1776 */ 1777 mutex_unlock(&dir->d_inode->i_mutex); 1778 audit_inode(pathname, path.dentry); 1779 1780 error = -EEXIST; 1781 if (flag & O_EXCL) 1782 goto exit_dput; 1783 1784 if (__follow_mount(&path)) { 1785 error = -ELOOP; 1786 if (flag & O_NOFOLLOW) 1787 goto exit_dput; 1788 } 1789 1790 error = -ENOENT; 1791 if (!path.dentry->d_inode) 1792 goto exit_dput; 1793 if (path.dentry->d_inode->i_op && path.dentry->d_inode->i_op->follow_link) 1794 goto do_link; 1795 1796 path_to_nameidata(&path, &nd); 1797 error = -EISDIR; 1798 if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode)) 1799 goto exit; 1800 ok: 1801 /* 1802 * Consider: 1803 * 1. may_open() truncates a file 1804 * 2. a rw->ro mount transition occurs 1805 * 3. nameidata_to_filp() fails due to 1806 * the ro mount. 1807 * That would be inconsistent, and should 1808 * be avoided. Taking this mnt write here 1809 * ensures that (2) can not occur. 1810 */ 1811 will_write = open_will_write_to_fs(flag, nd.path.dentry->d_inode); 1812 if (will_write) { 1813 error = mnt_want_write(nd.path.mnt); 1814 if (error) 1815 goto exit; 1816 } 1817 error = may_open(&nd, acc_mode, flag); 1818 if (error) { 1819 if (will_write) 1820 mnt_drop_write(nd.path.mnt); 1821 goto exit; 1822 } 1823 filp = nameidata_to_filp(&nd, open_flag); 1824 /* 1825 * It is now safe to drop the mnt write 1826 * because the filp has had a write taken 1827 * on its behalf. 1828 */ 1829 if (will_write) 1830 mnt_drop_write(nd.path.mnt); 1831 return filp; 1832 1833 exit_mutex_unlock: 1834 mutex_unlock(&dir->d_inode->i_mutex); 1835 exit_dput: 1836 path_put_conditional(&path, &nd); 1837 exit: 1838 if (!IS_ERR(nd.intent.open.file)) 1839 release_open_intent(&nd); 1840 path_put(&nd.path); 1841 return ERR_PTR(error); 1842 1843 do_link: 1844 error = -ELOOP; 1845 if (flag & O_NOFOLLOW) 1846 goto exit_dput; 1847 /* 1848 * This is subtle. Instead of calling do_follow_link() we do the 1849 * thing by hands. The reason is that this way we have zero link_count 1850 * and path_walk() (called from ->follow_link) honoring LOOKUP_PARENT. 1851 * After that we have the parent and last component, i.e. 1852 * we are in the same situation as after the first path_walk(). 1853 * Well, almost - if the last component is normal we get its copy 1854 * stored in nd->last.name and we will have to putname() it when we 1855 * are done. Procfs-like symlinks just set LAST_BIND. 1856 */ 1857 nd.flags |= LOOKUP_PARENT; 1858 error = security_inode_follow_link(path.dentry, &nd); 1859 if (error) 1860 goto exit_dput; 1861 error = __do_follow_link(&path, &nd); 1862 if (error) { 1863 /* Does someone understand code flow here? Or it is only 1864 * me so stupid? Anathema to whoever designed this non-sense 1865 * with "intent.open". 1866 */ 1867 release_open_intent(&nd); 1868 return ERR_PTR(error); 1869 } 1870 nd.flags &= ~LOOKUP_PARENT; 1871 if (nd.last_type == LAST_BIND) 1872 goto ok; 1873 error = -EISDIR; 1874 if (nd.last_type != LAST_NORM) 1875 goto exit; 1876 if (nd.last.name[nd.last.len]) { 1877 __putname(nd.last.name); 1878 goto exit; 1879 } 1880 error = -ELOOP; 1881 if (count++==32) { 1882 __putname(nd.last.name); 1883 goto exit; 1884 } 1885 dir = nd.path.dentry; 1886 mutex_lock(&dir->d_inode->i_mutex); 1887 path.dentry = lookup_hash(&nd); 1888 path.mnt = nd.path.mnt; 1889 __putname(nd.last.name); 1890 goto do_last; 1891 } 1892 1893 /** 1894 * filp_open - open file and return file pointer 1895 * 1896 * @filename: path to open 1897 * @flags: open flags as per the open(2) second argument 1898 * @mode: mode for the new file if O_CREAT is set, else ignored 1899 * 1900 * This is the helper to open a file from kernelspace if you really 1901 * have to. But in generally you should not do this, so please move 1902 * along, nothing to see here.. 1903 */ 1904 struct file *filp_open(const char *filename, int flags, int mode) 1905 { 1906 return do_filp_open(AT_FDCWD, filename, flags, mode); 1907 } 1908 EXPORT_SYMBOL(filp_open); 1909 1910 /** 1911 * lookup_create - lookup a dentry, creating it if it doesn't exist 1912 * @nd: nameidata info 1913 * @is_dir: directory flag 1914 * 1915 * Simple function to lookup and return a dentry and create it 1916 * if it doesn't exist. Is SMP-safe. 1917 * 1918 * Returns with nd->path.dentry->d_inode->i_mutex locked. 1919 */ 1920 struct dentry *lookup_create(struct nameidata *nd, int is_dir) 1921 { 1922 struct dentry *dentry = ERR_PTR(-EEXIST); 1923 1924 mutex_lock_nested(&nd->path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); 1925 /* 1926 * Yucky last component or no last component at all? 1927 * (foo/., foo/.., /////) 1928 */ 1929 if (nd->last_type != LAST_NORM) 1930 goto fail; 1931 nd->flags &= ~LOOKUP_PARENT; 1932 nd->flags |= LOOKUP_CREATE; 1933 nd->intent.open.flags = O_EXCL; 1934 1935 /* 1936 * Do the final lookup. 1937 */ 1938 dentry = lookup_hash(nd); 1939 if (IS_ERR(dentry)) 1940 goto fail; 1941 1942 if (dentry->d_inode) 1943 goto eexist; 1944 /* 1945 * Special case - lookup gave negative, but... we had foo/bar/ 1946 * From the vfs_mknod() POV we just have a negative dentry - 1947 * all is fine. Let's be bastards - you had / on the end, you've 1948 * been asking for (non-existent) directory. -ENOENT for you. 1949 */ 1950 if (unlikely(!is_dir && nd->last.name[nd->last.len])) { 1951 dput(dentry); 1952 dentry = ERR_PTR(-ENOENT); 1953 } 1954 return dentry; 1955 eexist: 1956 dput(dentry); 1957 dentry = ERR_PTR(-EEXIST); 1958 fail: 1959 return dentry; 1960 } 1961 EXPORT_SYMBOL_GPL(lookup_create); 1962 1963 int vfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev) 1964 { 1965 int error = may_create(dir, dentry, NULL); 1966 1967 if (error) 1968 return error; 1969 1970 if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD)) 1971 return -EPERM; 1972 1973 if (!dir->i_op || !dir->i_op->mknod) 1974 return -EPERM; 1975 1976 error = devcgroup_inode_mknod(mode, dev); 1977 if (error) 1978 return error; 1979 1980 error = security_inode_mknod(dir, dentry, mode, dev); 1981 if (error) 1982 return error; 1983 1984 DQUOT_INIT(dir); 1985 error = dir->i_op->mknod(dir, dentry, mode, dev); 1986 if (!error) 1987 fsnotify_create(dir, dentry); 1988 return error; 1989 } 1990 1991 static int may_mknod(mode_t mode) 1992 { 1993 switch (mode & S_IFMT) { 1994 case S_IFREG: 1995 case S_IFCHR: 1996 case S_IFBLK: 1997 case S_IFIFO: 1998 case S_IFSOCK: 1999 case 0: /* zero mode translates to S_IFREG */ 2000 return 0; 2001 case S_IFDIR: 2002 return -EPERM; 2003 default: 2004 return -EINVAL; 2005 } 2006 } 2007 2008 asmlinkage long sys_mknodat(int dfd, const char __user *filename, int mode, 2009 unsigned dev) 2010 { 2011 int error = 0; 2012 char * tmp; 2013 struct dentry * dentry; 2014 struct nameidata nd; 2015 2016 if (S_ISDIR(mode)) 2017 return -EPERM; 2018 tmp = getname(filename); 2019 if (IS_ERR(tmp)) 2020 return PTR_ERR(tmp); 2021 2022 error = do_path_lookup(dfd, tmp, LOOKUP_PARENT, &nd); 2023 if (error) 2024 goto out; 2025 dentry = lookup_create(&nd, 0); 2026 if (IS_ERR(dentry)) { 2027 error = PTR_ERR(dentry); 2028 goto out_unlock; 2029 } 2030 if (!IS_POSIXACL(nd.path.dentry->d_inode)) 2031 mode &= ~current->fs->umask; 2032 error = may_mknod(mode); 2033 if (error) 2034 goto out_dput; 2035 error = mnt_want_write(nd.path.mnt); 2036 if (error) 2037 goto out_dput; 2038 switch (mode & S_IFMT) { 2039 case 0: case S_IFREG: 2040 error = vfs_create(nd.path.dentry->d_inode,dentry,mode,&nd); 2041 break; 2042 case S_IFCHR: case S_IFBLK: 2043 error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode, 2044 new_decode_dev(dev)); 2045 break; 2046 case S_IFIFO: case S_IFSOCK: 2047 error = vfs_mknod(nd.path.dentry->d_inode,dentry,mode,0); 2048 break; 2049 } 2050 mnt_drop_write(nd.path.mnt); 2051 out_dput: 2052 dput(dentry); 2053 out_unlock: 2054 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2055 path_put(&nd.path); 2056 out: 2057 putname(tmp); 2058 2059 return error; 2060 } 2061 2062 asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev) 2063 { 2064 return sys_mknodat(AT_FDCWD, filename, mode, dev); 2065 } 2066 2067 int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) 2068 { 2069 int error = may_create(dir, dentry, NULL); 2070 2071 if (error) 2072 return error; 2073 2074 if (!dir->i_op || !dir->i_op->mkdir) 2075 return -EPERM; 2076 2077 mode &= (S_IRWXUGO|S_ISVTX); 2078 error = security_inode_mkdir(dir, dentry, mode); 2079 if (error) 2080 return error; 2081 2082 DQUOT_INIT(dir); 2083 error = dir->i_op->mkdir(dir, dentry, mode); 2084 if (!error) 2085 fsnotify_mkdir(dir, dentry); 2086 return error; 2087 } 2088 2089 asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode) 2090 { 2091 int error = 0; 2092 char * tmp; 2093 struct dentry *dentry; 2094 struct nameidata nd; 2095 2096 tmp = getname(pathname); 2097 error = PTR_ERR(tmp); 2098 if (IS_ERR(tmp)) 2099 goto out_err; 2100 2101 error = do_path_lookup(dfd, tmp, LOOKUP_PARENT, &nd); 2102 if (error) 2103 goto out; 2104 dentry = lookup_create(&nd, 1); 2105 error = PTR_ERR(dentry); 2106 if (IS_ERR(dentry)) 2107 goto out_unlock; 2108 2109 if (!IS_POSIXACL(nd.path.dentry->d_inode)) 2110 mode &= ~current->fs->umask; 2111 error = mnt_want_write(nd.path.mnt); 2112 if (error) 2113 goto out_dput; 2114 error = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode); 2115 mnt_drop_write(nd.path.mnt); 2116 out_dput: 2117 dput(dentry); 2118 out_unlock: 2119 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2120 path_put(&nd.path); 2121 out: 2122 putname(tmp); 2123 out_err: 2124 return error; 2125 } 2126 2127 asmlinkage long sys_mkdir(const char __user *pathname, int mode) 2128 { 2129 return sys_mkdirat(AT_FDCWD, pathname, mode); 2130 } 2131 2132 /* 2133 * We try to drop the dentry early: we should have 2134 * a usage count of 2 if we're the only user of this 2135 * dentry, and if that is true (possibly after pruning 2136 * the dcache), then we drop the dentry now. 2137 * 2138 * A low-level filesystem can, if it choses, legally 2139 * do a 2140 * 2141 * if (!d_unhashed(dentry)) 2142 * return -EBUSY; 2143 * 2144 * if it cannot handle the case of removing a directory 2145 * that is still in use by something else.. 2146 */ 2147 void dentry_unhash(struct dentry *dentry) 2148 { 2149 dget(dentry); 2150 shrink_dcache_parent(dentry); 2151 spin_lock(&dcache_lock); 2152 spin_lock(&dentry->d_lock); 2153 if (atomic_read(&dentry->d_count) == 2) 2154 __d_drop(dentry); 2155 spin_unlock(&dentry->d_lock); 2156 spin_unlock(&dcache_lock); 2157 } 2158 2159 int vfs_rmdir(struct inode *dir, struct dentry *dentry) 2160 { 2161 int error = may_delete(dir, dentry, 1); 2162 2163 if (error) 2164 return error; 2165 2166 if (!dir->i_op || !dir->i_op->rmdir) 2167 return -EPERM; 2168 2169 DQUOT_INIT(dir); 2170 2171 mutex_lock(&dentry->d_inode->i_mutex); 2172 dentry_unhash(dentry); 2173 if (d_mountpoint(dentry)) 2174 error = -EBUSY; 2175 else { 2176 error = security_inode_rmdir(dir, dentry); 2177 if (!error) { 2178 error = dir->i_op->rmdir(dir, dentry); 2179 if (!error) 2180 dentry->d_inode->i_flags |= S_DEAD; 2181 } 2182 } 2183 mutex_unlock(&dentry->d_inode->i_mutex); 2184 if (!error) { 2185 d_delete(dentry); 2186 } 2187 dput(dentry); 2188 2189 return error; 2190 } 2191 2192 static long do_rmdir(int dfd, const char __user *pathname) 2193 { 2194 int error = 0; 2195 char * name; 2196 struct dentry *dentry; 2197 struct nameidata nd; 2198 2199 name = getname(pathname); 2200 if(IS_ERR(name)) 2201 return PTR_ERR(name); 2202 2203 error = do_path_lookup(dfd, name, LOOKUP_PARENT, &nd); 2204 if (error) 2205 goto exit; 2206 2207 switch(nd.last_type) { 2208 case LAST_DOTDOT: 2209 error = -ENOTEMPTY; 2210 goto exit1; 2211 case LAST_DOT: 2212 error = -EINVAL; 2213 goto exit1; 2214 case LAST_ROOT: 2215 error = -EBUSY; 2216 goto exit1; 2217 } 2218 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); 2219 dentry = lookup_hash(&nd); 2220 error = PTR_ERR(dentry); 2221 if (IS_ERR(dentry)) 2222 goto exit2; 2223 error = mnt_want_write(nd.path.mnt); 2224 if (error) 2225 goto exit3; 2226 error = vfs_rmdir(nd.path.dentry->d_inode, dentry); 2227 mnt_drop_write(nd.path.mnt); 2228 exit3: 2229 dput(dentry); 2230 exit2: 2231 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2232 exit1: 2233 path_put(&nd.path); 2234 exit: 2235 putname(name); 2236 return error; 2237 } 2238 2239 asmlinkage long sys_rmdir(const char __user *pathname) 2240 { 2241 return do_rmdir(AT_FDCWD, pathname); 2242 } 2243 2244 int vfs_unlink(struct inode *dir, struct dentry *dentry) 2245 { 2246 int error = may_delete(dir, dentry, 0); 2247 2248 if (error) 2249 return error; 2250 2251 if (!dir->i_op || !dir->i_op->unlink) 2252 return -EPERM; 2253 2254 DQUOT_INIT(dir); 2255 2256 mutex_lock(&dentry->d_inode->i_mutex); 2257 if (d_mountpoint(dentry)) 2258 error = -EBUSY; 2259 else { 2260 error = security_inode_unlink(dir, dentry); 2261 if (!error) 2262 error = dir->i_op->unlink(dir, dentry); 2263 } 2264 mutex_unlock(&dentry->d_inode->i_mutex); 2265 2266 /* We don't d_delete() NFS sillyrenamed files--they still exist. */ 2267 if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { 2268 fsnotify_link_count(dentry->d_inode); 2269 d_delete(dentry); 2270 } 2271 2272 return error; 2273 } 2274 2275 /* 2276 * Make sure that the actual truncation of the file will occur outside its 2277 * directory's i_mutex. Truncate can take a long time if there is a lot of 2278 * writeout happening, and we don't want to prevent access to the directory 2279 * while waiting on the I/O. 2280 */ 2281 static long do_unlinkat(int dfd, const char __user *pathname) 2282 { 2283 int error = 0; 2284 char * name; 2285 struct dentry *dentry; 2286 struct nameidata nd; 2287 struct inode *inode = NULL; 2288 2289 name = getname(pathname); 2290 if(IS_ERR(name)) 2291 return PTR_ERR(name); 2292 2293 error = do_path_lookup(dfd, name, LOOKUP_PARENT, &nd); 2294 if (error) 2295 goto exit; 2296 error = -EISDIR; 2297 if (nd.last_type != LAST_NORM) 2298 goto exit1; 2299 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT); 2300 dentry = lookup_hash(&nd); 2301 error = PTR_ERR(dentry); 2302 if (!IS_ERR(dentry)) { 2303 /* Why not before? Because we want correct error value */ 2304 if (nd.last.name[nd.last.len]) 2305 goto slashes; 2306 inode = dentry->d_inode; 2307 if (inode) 2308 atomic_inc(&inode->i_count); 2309 error = mnt_want_write(nd.path.mnt); 2310 if (error) 2311 goto exit2; 2312 error = vfs_unlink(nd.path.dentry->d_inode, dentry); 2313 mnt_drop_write(nd.path.mnt); 2314 exit2: 2315 dput(dentry); 2316 } 2317 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2318 if (inode) 2319 iput(inode); /* truncate the inode here */ 2320 exit1: 2321 path_put(&nd.path); 2322 exit: 2323 putname(name); 2324 return error; 2325 2326 slashes: 2327 error = !dentry->d_inode ? -ENOENT : 2328 S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR; 2329 goto exit2; 2330 } 2331 2332 asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag) 2333 { 2334 if ((flag & ~AT_REMOVEDIR) != 0) 2335 return -EINVAL; 2336 2337 if (flag & AT_REMOVEDIR) 2338 return do_rmdir(dfd, pathname); 2339 2340 return do_unlinkat(dfd, pathname); 2341 } 2342 2343 asmlinkage long sys_unlink(const char __user *pathname) 2344 { 2345 return do_unlinkat(AT_FDCWD, pathname); 2346 } 2347 2348 int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) 2349 { 2350 int error = may_create(dir, dentry, NULL); 2351 2352 if (error) 2353 return error; 2354 2355 if (!dir->i_op || !dir->i_op->symlink) 2356 return -EPERM; 2357 2358 error = security_inode_symlink(dir, dentry, oldname); 2359 if (error) 2360 return error; 2361 2362 DQUOT_INIT(dir); 2363 error = dir->i_op->symlink(dir, dentry, oldname); 2364 if (!error) 2365 fsnotify_create(dir, dentry); 2366 return error; 2367 } 2368 2369 asmlinkage long sys_symlinkat(const char __user *oldname, 2370 int newdfd, const char __user *newname) 2371 { 2372 int error = 0; 2373 char * from; 2374 char * to; 2375 struct dentry *dentry; 2376 struct nameidata nd; 2377 2378 from = getname(oldname); 2379 if(IS_ERR(from)) 2380 return PTR_ERR(from); 2381 to = getname(newname); 2382 error = PTR_ERR(to); 2383 if (IS_ERR(to)) 2384 goto out_putname; 2385 2386 error = do_path_lookup(newdfd, to, LOOKUP_PARENT, &nd); 2387 if (error) 2388 goto out; 2389 dentry = lookup_create(&nd, 0); 2390 error = PTR_ERR(dentry); 2391 if (IS_ERR(dentry)) 2392 goto out_unlock; 2393 2394 error = mnt_want_write(nd.path.mnt); 2395 if (error) 2396 goto out_dput; 2397 error = vfs_symlink(nd.path.dentry->d_inode, dentry, from); 2398 mnt_drop_write(nd.path.mnt); 2399 out_dput: 2400 dput(dentry); 2401 out_unlock: 2402 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2403 path_put(&nd.path); 2404 out: 2405 putname(to); 2406 out_putname: 2407 putname(from); 2408 return error; 2409 } 2410 2411 asmlinkage long sys_symlink(const char __user *oldname, const char __user *newname) 2412 { 2413 return sys_symlinkat(oldname, AT_FDCWD, newname); 2414 } 2415 2416 int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry) 2417 { 2418 struct inode *inode = old_dentry->d_inode; 2419 int error; 2420 2421 if (!inode) 2422 return -ENOENT; 2423 2424 error = may_create(dir, new_dentry, NULL); 2425 if (error) 2426 return error; 2427 2428 if (dir->i_sb != inode->i_sb) 2429 return -EXDEV; 2430 2431 /* 2432 * A link to an append-only or immutable file cannot be created. 2433 */ 2434 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) 2435 return -EPERM; 2436 if (!dir->i_op || !dir->i_op->link) 2437 return -EPERM; 2438 if (S_ISDIR(inode->i_mode)) 2439 return -EPERM; 2440 2441 error = security_inode_link(old_dentry, dir, new_dentry); 2442 if (error) 2443 return error; 2444 2445 mutex_lock(&inode->i_mutex); 2446 DQUOT_INIT(dir); 2447 error = dir->i_op->link(old_dentry, dir, new_dentry); 2448 mutex_unlock(&inode->i_mutex); 2449 if (!error) 2450 fsnotify_link(dir, inode, new_dentry); 2451 return error; 2452 } 2453 2454 /* 2455 * Hardlinks are often used in delicate situations. We avoid 2456 * security-related surprises by not following symlinks on the 2457 * newname. --KAB 2458 * 2459 * We don't follow them on the oldname either to be compatible 2460 * with linux 2.0, and to avoid hard-linking to directories 2461 * and other special files. --ADM 2462 */ 2463 asmlinkage long sys_linkat(int olddfd, const char __user *oldname, 2464 int newdfd, const char __user *newname, 2465 int flags) 2466 { 2467 struct dentry *new_dentry; 2468 struct nameidata nd, old_nd; 2469 int error; 2470 char * to; 2471 2472 if ((flags & ~AT_SYMLINK_FOLLOW) != 0) 2473 return -EINVAL; 2474 2475 to = getname(newname); 2476 if (IS_ERR(to)) 2477 return PTR_ERR(to); 2478 2479 error = __user_walk_fd(olddfd, oldname, 2480 flags & AT_SYMLINK_FOLLOW ? LOOKUP_FOLLOW : 0, 2481 &old_nd); 2482 if (error) 2483 goto exit; 2484 error = do_path_lookup(newdfd, to, LOOKUP_PARENT, &nd); 2485 if (error) 2486 goto out; 2487 error = -EXDEV; 2488 if (old_nd.path.mnt != nd.path.mnt) 2489 goto out_release; 2490 new_dentry = lookup_create(&nd, 0); 2491 error = PTR_ERR(new_dentry); 2492 if (IS_ERR(new_dentry)) 2493 goto out_unlock; 2494 error = mnt_want_write(nd.path.mnt); 2495 if (error) 2496 goto out_dput; 2497 error = vfs_link(old_nd.path.dentry, nd.path.dentry->d_inode, new_dentry); 2498 mnt_drop_write(nd.path.mnt); 2499 out_dput: 2500 dput(new_dentry); 2501 out_unlock: 2502 mutex_unlock(&nd.path.dentry->d_inode->i_mutex); 2503 out_release: 2504 path_put(&nd.path); 2505 out: 2506 path_put(&old_nd.path); 2507 exit: 2508 putname(to); 2509 2510 return error; 2511 } 2512 2513 asmlinkage long sys_link(const char __user *oldname, const char __user *newname) 2514 { 2515 return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0); 2516 } 2517 2518 /* 2519 * The worst of all namespace operations - renaming directory. "Perverted" 2520 * doesn't even start to describe it. Somebody in UCB had a heck of a trip... 2521 * Problems: 2522 * a) we can get into loop creation. Check is done in is_subdir(). 2523 * b) race potential - two innocent renames can create a loop together. 2524 * That's where 4.4 screws up. Current fix: serialization on 2525 * sb->s_vfs_rename_mutex. We might be more accurate, but that's another 2526 * story. 2527 * c) we have to lock _three_ objects - parents and victim (if it exists). 2528 * And that - after we got ->i_mutex on parents (until then we don't know 2529 * whether the target exists). Solution: try to be smart with locking 2530 * order for inodes. We rely on the fact that tree topology may change 2531 * only under ->s_vfs_rename_mutex _and_ that parent of the object we 2532 * move will be locked. Thus we can rank directories by the tree 2533 * (ancestors first) and rank all non-directories after them. 2534 * That works since everybody except rename does "lock parent, lookup, 2535 * lock child" and rename is under ->s_vfs_rename_mutex. 2536 * HOWEVER, it relies on the assumption that any object with ->lookup() 2537 * has no more than 1 dentry. If "hybrid" objects will ever appear, 2538 * we'd better make sure that there's no link(2) for them. 2539 * d) some filesystems don't support opened-but-unlinked directories, 2540 * either because of layout or because they are not ready to deal with 2541 * all cases correctly. The latter will be fixed (taking this sort of 2542 * stuff into VFS), but the former is not going away. Solution: the same 2543 * trick as in rmdir(). 2544 * e) conversion from fhandle to dentry may come in the wrong moment - when 2545 * we are removing the target. Solution: we will have to grab ->i_mutex 2546 * in the fhandle_to_dentry code. [FIXME - current nfsfh.c relies on 2547 * ->i_mutex on parents, which works but leads to some truely excessive 2548 * locking]. 2549 */ 2550 static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry, 2551 struct inode *new_dir, struct dentry *new_dentry) 2552 { 2553 int error = 0; 2554 struct inode *target; 2555 2556 /* 2557 * If we are going to change the parent - check write permissions, 2558 * we'll need to flip '..'. 2559 */ 2560 if (new_dir != old_dir) { 2561 error = permission(old_dentry->d_inode, MAY_WRITE, NULL); 2562 if (error) 2563 return error; 2564 } 2565 2566 error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry); 2567 if (error) 2568 return error; 2569 2570 target = new_dentry->d_inode; 2571 if (target) { 2572 mutex_lock(&target->i_mutex); 2573 dentry_unhash(new_dentry); 2574 } 2575 if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry)) 2576 error = -EBUSY; 2577 else 2578 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry); 2579 if (target) { 2580 if (!error) 2581 target->i_flags |= S_DEAD; 2582 mutex_unlock(&target->i_mutex); 2583 if (d_unhashed(new_dentry)) 2584 d_rehash(new_dentry); 2585 dput(new_dentry); 2586 } 2587 if (!error) 2588 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) 2589 d_move(old_dentry,new_dentry); 2590 return error; 2591 } 2592 2593 static int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry, 2594 struct inode *new_dir, struct dentry *new_dentry) 2595 { 2596 struct inode *target; 2597 int error; 2598 2599 error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry); 2600 if (error) 2601 return error; 2602 2603 dget(new_dentry); 2604 target = new_dentry->d_inode; 2605 if (target) 2606 mutex_lock(&target->i_mutex); 2607 if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry)) 2608 error = -EBUSY; 2609 else 2610 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry); 2611 if (!error) { 2612 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) 2613 d_move(old_dentry, new_dentry); 2614 } 2615 if (target) 2616 mutex_unlock(&target->i_mutex); 2617 dput(new_dentry); 2618 return error; 2619 } 2620 2621 int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, 2622 struct inode *new_dir, struct dentry *new_dentry) 2623 { 2624 int error; 2625 int is_dir = S_ISDIR(old_dentry->d_inode->i_mode); 2626 const char *old_name; 2627 2628 if (old_dentry->d_inode == new_dentry->d_inode) 2629 return 0; 2630 2631 error = may_delete(old_dir, old_dentry, is_dir); 2632 if (error) 2633 return error; 2634 2635 if (!new_dentry->d_inode) 2636 error = may_create(new_dir, new_dentry, NULL); 2637 else 2638 error = may_delete(new_dir, new_dentry, is_dir); 2639 if (error) 2640 return error; 2641 2642 if (!old_dir->i_op || !old_dir->i_op->rename) 2643 return -EPERM; 2644 2645 DQUOT_INIT(old_dir); 2646 DQUOT_INIT(new_dir); 2647 2648 old_name = fsnotify_oldname_init(old_dentry->d_name.name); 2649 2650 if (is_dir) 2651 error = vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry); 2652 else 2653 error = vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry); 2654 if (!error) { 2655 const char *new_name = old_dentry->d_name.name; 2656 fsnotify_move(old_dir, new_dir, old_name, new_name, is_dir, 2657 new_dentry->d_inode, old_dentry); 2658 } 2659 fsnotify_oldname_free(old_name); 2660 2661 return error; 2662 } 2663 2664 static int do_rename(int olddfd, const char *oldname, 2665 int newdfd, const char *newname) 2666 { 2667 int error = 0; 2668 struct dentry * old_dir, * new_dir; 2669 struct dentry * old_dentry, *new_dentry; 2670 struct dentry * trap; 2671 struct nameidata oldnd, newnd; 2672 2673 error = do_path_lookup(olddfd, oldname, LOOKUP_PARENT, &oldnd); 2674 if (error) 2675 goto exit; 2676 2677 error = do_path_lookup(newdfd, newname, LOOKUP_PARENT, &newnd); 2678 if (error) 2679 goto exit1; 2680 2681 error = -EXDEV; 2682 if (oldnd.path.mnt != newnd.path.mnt) 2683 goto exit2; 2684 2685 old_dir = oldnd.path.dentry; 2686 error = -EBUSY; 2687 if (oldnd.last_type != LAST_NORM) 2688 goto exit2; 2689 2690 new_dir = newnd.path.dentry; 2691 if (newnd.last_type != LAST_NORM) 2692 goto exit2; 2693 2694 trap = lock_rename(new_dir, old_dir); 2695 2696 old_dentry = lookup_hash(&oldnd); 2697 error = PTR_ERR(old_dentry); 2698 if (IS_ERR(old_dentry)) 2699 goto exit3; 2700 /* source must exist */ 2701 error = -ENOENT; 2702 if (!old_dentry->d_inode) 2703 goto exit4; 2704 /* unless the source is a directory trailing slashes give -ENOTDIR */ 2705 if (!S_ISDIR(old_dentry->d_inode->i_mode)) { 2706 error = -ENOTDIR; 2707 if (oldnd.last.name[oldnd.last.len]) 2708 goto exit4; 2709 if (newnd.last.name[newnd.last.len]) 2710 goto exit4; 2711 } 2712 /* source should not be ancestor of target */ 2713 error = -EINVAL; 2714 if (old_dentry == trap) 2715 goto exit4; 2716 new_dentry = lookup_hash(&newnd); 2717 error = PTR_ERR(new_dentry); 2718 if (IS_ERR(new_dentry)) 2719 goto exit4; 2720 /* target should not be an ancestor of source */ 2721 error = -ENOTEMPTY; 2722 if (new_dentry == trap) 2723 goto exit5; 2724 2725 error = mnt_want_write(oldnd.path.mnt); 2726 if (error) 2727 goto exit5; 2728 error = vfs_rename(old_dir->d_inode, old_dentry, 2729 new_dir->d_inode, new_dentry); 2730 mnt_drop_write(oldnd.path.mnt); 2731 exit5: 2732 dput(new_dentry); 2733 exit4: 2734 dput(old_dentry); 2735 exit3: 2736 unlock_rename(new_dir, old_dir); 2737 exit2: 2738 path_put(&newnd.path); 2739 exit1: 2740 path_put(&oldnd.path); 2741 exit: 2742 return error; 2743 } 2744 2745 asmlinkage long sys_renameat(int olddfd, const char __user *oldname, 2746 int newdfd, const char __user *newname) 2747 { 2748 int error; 2749 char * from; 2750 char * to; 2751 2752 from = getname(oldname); 2753 if(IS_ERR(from)) 2754 return PTR_ERR(from); 2755 to = getname(newname); 2756 error = PTR_ERR(to); 2757 if (!IS_ERR(to)) { 2758 error = do_rename(olddfd, from, newdfd, to); 2759 putname(to); 2760 } 2761 putname(from); 2762 return error; 2763 } 2764 2765 asmlinkage long sys_rename(const char __user *oldname, const char __user *newname) 2766 { 2767 return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname); 2768 } 2769 2770 int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link) 2771 { 2772 int len; 2773 2774 len = PTR_ERR(link); 2775 if (IS_ERR(link)) 2776 goto out; 2777 2778 len = strlen(link); 2779 if (len > (unsigned) buflen) 2780 len = buflen; 2781 if (copy_to_user(buffer, link, len)) 2782 len = -EFAULT; 2783 out: 2784 return len; 2785 } 2786 2787 /* 2788 * A helper for ->readlink(). This should be used *ONLY* for symlinks that 2789 * have ->follow_link() touching nd only in nd_set_link(). Using (or not 2790 * using) it for any given inode is up to filesystem. 2791 */ 2792 int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen) 2793 { 2794 struct nameidata nd; 2795 void *cookie; 2796 int res; 2797 2798 nd.depth = 0; 2799 cookie = dentry->d_inode->i_op->follow_link(dentry, &nd); 2800 if (IS_ERR(cookie)) 2801 return PTR_ERR(cookie); 2802 2803 res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd)); 2804 if (dentry->d_inode->i_op->put_link) 2805 dentry->d_inode->i_op->put_link(dentry, &nd, cookie); 2806 return res; 2807 } 2808 2809 int vfs_follow_link(struct nameidata *nd, const char *link) 2810 { 2811 return __vfs_follow_link(nd, link); 2812 } 2813 2814 /* get the link contents into pagecache */ 2815 static char *page_getlink(struct dentry * dentry, struct page **ppage) 2816 { 2817 struct page * page; 2818 struct address_space *mapping = dentry->d_inode->i_mapping; 2819 page = read_mapping_page(mapping, 0, NULL); 2820 if (IS_ERR(page)) 2821 return (char*)page; 2822 *ppage = page; 2823 return kmap(page); 2824 } 2825 2826 int page_readlink(struct dentry *dentry, char __user *buffer, int buflen) 2827 { 2828 struct page *page = NULL; 2829 char *s = page_getlink(dentry, &page); 2830 int res = vfs_readlink(dentry,buffer,buflen,s); 2831 if (page) { 2832 kunmap(page); 2833 page_cache_release(page); 2834 } 2835 return res; 2836 } 2837 2838 void *page_follow_link_light(struct dentry *dentry, struct nameidata *nd) 2839 { 2840 struct page *page = NULL; 2841 nd_set_link(nd, page_getlink(dentry, &page)); 2842 return page; 2843 } 2844 2845 void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) 2846 { 2847 struct page *page = cookie; 2848 2849 if (page) { 2850 kunmap(page); 2851 page_cache_release(page); 2852 } 2853 } 2854 2855 int __page_symlink(struct inode *inode, const char *symname, int len, 2856 gfp_t gfp_mask) 2857 { 2858 struct address_space *mapping = inode->i_mapping; 2859 struct page *page; 2860 void *fsdata; 2861 int err; 2862 char *kaddr; 2863 2864 retry: 2865 err = pagecache_write_begin(NULL, mapping, 0, len-1, 2866 AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata); 2867 if (err) 2868 goto fail; 2869 2870 kaddr = kmap_atomic(page, KM_USER0); 2871 memcpy(kaddr, symname, len-1); 2872 kunmap_atomic(kaddr, KM_USER0); 2873 2874 err = pagecache_write_end(NULL, mapping, 0, len-1, len-1, 2875 page, fsdata); 2876 if (err < 0) 2877 goto fail; 2878 if (err < len-1) 2879 goto retry; 2880 2881 mark_inode_dirty(inode); 2882 return 0; 2883 fail: 2884 return err; 2885 } 2886 2887 int page_symlink(struct inode *inode, const char *symname, int len) 2888 { 2889 return __page_symlink(inode, symname, len, 2890 mapping_gfp_mask(inode->i_mapping)); 2891 } 2892 2893 const struct inode_operations page_symlink_inode_operations = { 2894 .readlink = generic_readlink, 2895 .follow_link = page_follow_link_light, 2896 .put_link = page_put_link, 2897 }; 2898 2899 EXPORT_SYMBOL(__user_walk); 2900 EXPORT_SYMBOL(__user_walk_fd); 2901 EXPORT_SYMBOL(follow_down); 2902 EXPORT_SYMBOL(follow_up); 2903 EXPORT_SYMBOL(get_write_access); /* binfmt_aout */ 2904 EXPORT_SYMBOL(getname); 2905 EXPORT_SYMBOL(lock_rename); 2906 EXPORT_SYMBOL(lookup_one_len); 2907 EXPORT_SYMBOL(page_follow_link_light); 2908 EXPORT_SYMBOL(page_put_link); 2909 EXPORT_SYMBOL(page_readlink); 2910 EXPORT_SYMBOL(__page_symlink); 2911 EXPORT_SYMBOL(page_symlink); 2912 EXPORT_SYMBOL(page_symlink_inode_operations); 2913 EXPORT_SYMBOL(path_lookup); 2914 EXPORT_SYMBOL(vfs_path_lookup); 2915 EXPORT_SYMBOL(permission); 2916 EXPORT_SYMBOL(vfs_permission); 2917 EXPORT_SYMBOL(file_permission); 2918 EXPORT_SYMBOL(unlock_rename); 2919 EXPORT_SYMBOL(vfs_create); 2920 EXPORT_SYMBOL(vfs_follow_link); 2921 EXPORT_SYMBOL(vfs_link); 2922 EXPORT_SYMBOL(vfs_mkdir); 2923 EXPORT_SYMBOL(vfs_mknod); 2924 EXPORT_SYMBOL(generic_permission); 2925 EXPORT_SYMBOL(vfs_readlink); 2926 EXPORT_SYMBOL(vfs_rename); 2927 EXPORT_SYMBOL(vfs_rmdir); 2928 EXPORT_SYMBOL(vfs_symlink); 2929 EXPORT_SYMBOL(vfs_unlink); 2930 EXPORT_SYMBOL(dentry_unhash); 2931 EXPORT_SYMBOL(generic_readlink); 2932