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