linux/fs/open.c
<<
>>
Prefs
   1/*
   2 *  linux/fs/open.c
   3 *
   4 *  Copyright (C) 1991, 1992  Linus Torvalds
   5 */
   6
   7#include <linux/string.h>
   8#include <linux/mm.h>
   9#include <linux/file.h>
  10#include <linux/fdtable.h>
  11#include <linux/quotaops.h>
  12#include <linux/fsnotify.h>
  13#include <linux/module.h>
  14#include <linux/slab.h>
  15#include <linux/tty.h>
  16#include <linux/namei.h>
  17#include <linux/backing-dev.h>
  18#include <linux/capability.h>
  19#include <linux/securebits.h>
  20#include <linux/security.h>
  21#include <linux/mount.h>
  22#include <linux/vfs.h>
  23#include <linux/fcntl.h>
  24#include <asm/uaccess.h>
  25#include <linux/fs.h>
  26#include <linux/personality.h>
  27#include <linux/pagemap.h>
  28#include <linux/syscalls.h>
  29#include <linux/rcupdate.h>
  30#include <linux/audit.h>
  31#include <linux/falloc.h>
  32#include <linux/fs_struct.h>
  33
  34int vfs_statfs(struct dentry *dentry, struct kstatfs *buf)
  35{
  36        int retval = -ENODEV;
  37
  38        if (dentry) {
  39                retval = -ENOSYS;
  40                if (dentry->d_sb->s_op->statfs) {
  41                        memset(buf, 0, sizeof(*buf));
  42                        retval = security_sb_statfs(dentry);
  43                        if (retval)
  44                                return retval;
  45                        retval = dentry->d_sb->s_op->statfs(dentry, buf);
  46                        if (retval == 0 && buf->f_frsize == 0)
  47                                buf->f_frsize = buf->f_bsize;
  48                }
  49        }
  50        return retval;
  51}
  52
  53EXPORT_SYMBOL(vfs_statfs);
  54
  55static int vfs_statfs_native(struct dentry *dentry, struct statfs *buf)
  56{
  57        struct kstatfs st;
  58        int retval;
  59
  60        retval = vfs_statfs(dentry, &st);
  61        if (retval)
  62                return retval;
  63
  64        if (sizeof(*buf) == sizeof(st))
  65                memcpy(buf, &st, sizeof(st));
  66        else {
  67                if (sizeof buf->f_blocks == 4) {
  68                        if ((st.f_blocks | st.f_bfree | st.f_bavail |
  69                             st.f_bsize | st.f_frsize) &
  70                            0xffffffff00000000ULL)
  71                                return -EOVERFLOW;
  72                        /*
  73                         * f_files and f_ffree may be -1; it's okay to stuff
  74                         * that into 32 bits
  75                         */
  76                        if (st.f_files != -1 &&
  77                            (st.f_files & 0xffffffff00000000ULL))
  78                                return -EOVERFLOW;
  79                        if (st.f_ffree != -1 &&
  80                            (st.f_ffree & 0xffffffff00000000ULL))
  81                                return -EOVERFLOW;
  82                }
  83
  84                buf->f_type = st.f_type;
  85                buf->f_bsize = st.f_bsize;
  86                buf->f_blocks = st.f_blocks;
  87                buf->f_bfree = st.f_bfree;
  88                buf->f_bavail = st.f_bavail;
  89                buf->f_files = st.f_files;
  90                buf->f_ffree = st.f_ffree;
  91                buf->f_fsid = st.f_fsid;
  92                buf->f_namelen = st.f_namelen;
  93                buf->f_frsize = st.f_frsize;
  94                memset(buf->f_spare, 0, sizeof(buf->f_spare));
  95        }
  96        return 0;
  97}
  98
  99static int vfs_statfs64(struct dentry *dentry, struct statfs64 *buf)
 100{
 101        struct kstatfs st;
 102        int retval;
 103
 104        retval = vfs_statfs(dentry, &st);
 105        if (retval)
 106                return retval;
 107
 108        if (sizeof(*buf) == sizeof(st))
 109                memcpy(buf, &st, sizeof(st));
 110        else {
 111                buf->f_type = st.f_type;
 112                buf->f_bsize = st.f_bsize;
 113                buf->f_blocks = st.f_blocks;
 114                buf->f_bfree = st.f_bfree;
 115                buf->f_bavail = st.f_bavail;
 116                buf->f_files = st.f_files;
 117                buf->f_ffree = st.f_ffree;
 118                buf->f_fsid = st.f_fsid;
 119                buf->f_namelen = st.f_namelen;
 120                buf->f_frsize = st.f_frsize;
 121                memset(buf->f_spare, 0, sizeof(buf->f_spare));
 122        }
 123        return 0;
 124}
 125
 126SYSCALL_DEFINE2(statfs, const char __user *, pathname, struct statfs __user *, buf)
 127{
 128        struct path path;
 129        int error;
 130
 131        error = user_path(pathname, &path);
 132        if (!error) {
 133                struct statfs tmp;
 134                error = vfs_statfs_native(path.dentry, &tmp);
 135                if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
 136                        error = -EFAULT;
 137                path_put(&path);
 138        }
 139        return error;
 140}
 141
 142SYSCALL_DEFINE3(statfs64, const char __user *, pathname, size_t, sz, struct statfs64 __user *, buf)
 143{
 144        struct path path;
 145        long error;
 146
 147        if (sz != sizeof(*buf))
 148                return -EINVAL;
 149        error = user_path(pathname, &path);
 150        if (!error) {
 151                struct statfs64 tmp;
 152                error = vfs_statfs64(path.dentry, &tmp);
 153                if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
 154                        error = -EFAULT;
 155                path_put(&path);
 156        }
 157        return error;
 158}
 159
 160SYSCALL_DEFINE2(fstatfs, unsigned int, fd, struct statfs __user *, buf)
 161{
 162        struct file * file;
 163        struct statfs tmp;
 164        int error;
 165
 166        error = -EBADF;
 167        file = fget(fd);
 168        if (!file)
 169                goto out;
 170        error = vfs_statfs_native(file->f_path.dentry, &tmp);
 171        if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
 172                error = -EFAULT;
 173        fput(file);
 174out:
 175        return error;
 176}
 177
 178SYSCALL_DEFINE3(fstatfs64, unsigned int, fd, size_t, sz, struct statfs64 __user *, buf)
 179{
 180        struct file * file;
 181        struct statfs64 tmp;
 182        int error;
 183
 184        if (sz != sizeof(*buf))
 185                return -EINVAL;
 186
 187        error = -EBADF;
 188        file = fget(fd);
 189        if (!file)
 190                goto out;
 191        error = vfs_statfs64(file->f_path.dentry, &tmp);
 192        if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
 193                error = -EFAULT;
 194        fput(file);
 195out:
 196        return error;
 197}
 198
 199int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
 200        struct file *filp)
 201{
 202        int ret;
 203        struct iattr newattrs;
 204
 205        /* Not pretty: "inode->i_size" shouldn't really be signed. But it is. */
 206        if (length < 0)
 207                return -EINVAL;
 208
 209        newattrs.ia_size = length;
 210        newattrs.ia_valid = ATTR_SIZE | time_attrs;
 211        if (filp) {
 212                newattrs.ia_file = filp;
 213                newattrs.ia_valid |= ATTR_FILE;
 214        }
 215
 216        /* Remove suid/sgid on truncate too */
 217        ret = should_remove_suid(dentry);
 218        if (ret)
 219                newattrs.ia_valid |= ret | ATTR_FORCE;
 220
 221        mutex_lock(&dentry->d_inode->i_mutex);
 222        ret = notify_change(dentry, &newattrs);
 223        mutex_unlock(&dentry->d_inode->i_mutex);
 224        return ret;
 225}
 226
 227static long do_sys_truncate(const char __user *pathname, loff_t length)
 228{
 229        struct path path;
 230        struct inode *inode;
 231        int error;
 232
 233        error = -EINVAL;
 234        if (length < 0) /* sorry, but loff_t says... */
 235                goto out;
 236
 237        error = user_path(pathname, &path);
 238        if (error)
 239                goto out;
 240        inode = path.dentry->d_inode;
 241
 242        /* For directories it's -EISDIR, for other non-regulars - -EINVAL */
 243        error = -EISDIR;
 244        if (S_ISDIR(inode->i_mode))
 245                goto dput_and_out;
 246
 247        error = -EINVAL;
 248        if (!S_ISREG(inode->i_mode))
 249                goto dput_and_out;
 250
 251        error = mnt_want_write(path.mnt);
 252        if (error)
 253                goto dput_and_out;
 254
 255        error = inode_permission(inode, MAY_WRITE);
 256        if (error)
 257                goto mnt_drop_write_and_out;
 258
 259        error = -EPERM;
 260        if (IS_APPEND(inode))
 261                goto mnt_drop_write_and_out;
 262
 263        error = get_write_access(inode);
 264        if (error)
 265                goto mnt_drop_write_and_out;
 266
 267        /*
 268         * Make sure that there are no leases.  get_write_access() protects
 269         * against the truncate racing with a lease-granting setlease().
 270         */
 271        error = break_lease(inode, FMODE_WRITE);
 272        if (error)
 273                goto put_write_and_out;
 274
 275        error = locks_verify_truncate(inode, NULL, length);
 276        if (!error)
 277                error = security_path_truncate(&path, length, 0);
 278        if (!error) {
 279                vfs_dq_init(inode);
 280                error = do_truncate(path.dentry, length, 0, NULL);
 281        }
 282
 283put_write_and_out:
 284        put_write_access(inode);
 285mnt_drop_write_and_out:
 286        mnt_drop_write(path.mnt);
 287dput_and_out:
 288        path_put(&path);
 289out:
 290        return error;
 291}
 292
 293SYSCALL_DEFINE2(truncate, const char __user *, path, long, length)
 294{
 295        return do_sys_truncate(path, length);
 296}
 297
 298static long do_sys_ftruncate(unsigned int fd, loff_t length, int small)
 299{
 300        struct inode * inode;
 301        struct dentry *dentry;
 302        struct file * file;
 303        int error;
 304
 305        error = -EINVAL;
 306        if (length < 0)
 307                goto out;
 308        error = -EBADF;
 309        file = fget(fd);
 310        if (!file)
 311                goto out;
 312
 313        /* explicitly opened as large or we are on 64-bit box */
 314        if (file->f_flags & O_LARGEFILE)
 315                small = 0;
 316
 317        dentry = file->f_path.dentry;
 318        inode = dentry->d_inode;
 319        error = -EINVAL;
 320        if (!S_ISREG(inode->i_mode) || !(file->f_mode & FMODE_WRITE))
 321                goto out_putf;
 322
 323        error = -EINVAL;
 324        /* Cannot ftruncate over 2^31 bytes without large file support */
 325        if (small && length > MAX_NON_LFS)
 326                goto out_putf;
 327
 328        error = -EPERM;
 329        if (IS_APPEND(inode))
 330                goto out_putf;
 331
 332        error = locks_verify_truncate(inode, file, length);
 333        if (!error)
 334                error = security_path_truncate(&file->f_path, length,
 335                                               ATTR_MTIME|ATTR_CTIME);
 336        if (!error)
 337                error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, file);
 338out_putf:
 339        fput(file);
 340out:
 341        return error;
 342}
 343
 344SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
 345{
 346        long ret = do_sys_ftruncate(fd, length, 1);
 347        /* avoid REGPARM breakage on x86: */
 348        asmlinkage_protect(2, ret, fd, length);
 349        return ret;
 350}
 351
 352/* LFS versions of truncate are only needed on 32 bit machines */
 353#if BITS_PER_LONG == 32
 354SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length)
 355{
 356        return do_sys_truncate(path, length);
 357}
 358#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
 359asmlinkage long SyS_truncate64(long path, loff_t length)
 360{
 361        return SYSC_truncate64((const char __user *) path, length);
 362}
 363SYSCALL_ALIAS(sys_truncate64, SyS_truncate64);
 364#endif
 365
 366SYSCALL_DEFINE(ftruncate64)(unsigned int fd, loff_t length)
 367{
 368        long ret = do_sys_ftruncate(fd, length, 0);
 369        /* avoid REGPARM breakage on x86: */
 370        asmlinkage_protect(2, ret, fd, length);
 371        return ret;
 372}
 373#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
 374asmlinkage long SyS_ftruncate64(long fd, loff_t length)
 375{
 376        return SYSC_ftruncate64((unsigned int) fd, length);
 377}
 378SYSCALL_ALIAS(sys_ftruncate64, SyS_ftruncate64);
 379#endif
 380#endif /* BITS_PER_LONG == 32 */
 381
 382
 383int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
 384{
 385        struct inode *inode = file->f_path.dentry->d_inode;
 386        long ret;
 387
 388        if (offset < 0 || len <= 0)
 389                return -EINVAL;
 390
 391        /* Return error if mode is not supported */
 392        if (mode && !(mode & FALLOC_FL_KEEP_SIZE))
 393                return -EOPNOTSUPP;
 394
 395        if (!(file->f_mode & FMODE_WRITE))
 396                return -EBADF;
 397        /*
 398         * Revalidate the write permissions, in case security policy has
 399         * changed since the files were opened.
 400         */
 401        ret = security_file_permission(file, MAY_WRITE);
 402        if (ret)
 403                return ret;
 404
 405        if (S_ISFIFO(inode->i_mode))
 406                return -ESPIPE;
 407
 408        /*
 409         * Let individual file system decide if it supports preallocation
 410         * for directories or not.
 411         */
 412        if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
 413                return -ENODEV;
 414
 415        /* Check for wrap through zero too */
 416        if (((offset + len) > inode->i_sb->s_maxbytes) || ((offset + len) < 0))
 417                return -EFBIG;
 418
 419        if (!inode->i_op->fallocate)
 420                return -EOPNOTSUPP;
 421
 422        return inode->i_op->fallocate(inode, mode, offset, len);
 423}
 424
 425SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)
 426{
 427        struct file *file;
 428        int error = -EBADF;
 429
 430        file = fget(fd);
 431        if (file) {
 432                error = do_fallocate(file, mode, offset, len);
 433                fput(file);
 434        }
 435
 436        return error;
 437}
 438
 439#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
 440asmlinkage long SyS_fallocate(long fd, long mode, loff_t offset, loff_t len)
 441{
 442        return SYSC_fallocate((int)fd, (int)mode, offset, len);
 443}
 444SYSCALL_ALIAS(sys_fallocate, SyS_fallocate);
 445#endif
 446
 447/*
 448 * access() needs to use the real uid/gid, not the effective uid/gid.
 449 * We do this by temporarily clearing all FS-related capabilities and
 450 * switching the fsuid/fsgid around to the real ones.
 451 */
 452SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode)
 453{
 454        const struct cred *old_cred;
 455        struct cred *override_cred;
 456        struct path path;
 457        struct inode *inode;
 458        int res;
 459
 460        if (mode & ~S_IRWXO)    /* where's F_OK, X_OK, W_OK, R_OK? */
 461                return -EINVAL;
 462
 463        override_cred = prepare_creds();
 464        if (!override_cred)
 465                return -ENOMEM;
 466
 467        override_cred->fsuid = override_cred->uid;
 468        override_cred->fsgid = override_cred->gid;
 469
 470        if (!issecure(SECURE_NO_SETUID_FIXUP)) {
 471                /* Clear the capabilities if we switch to a non-root user */
 472                if (override_cred->uid)
 473                        cap_clear(override_cred->cap_effective);
 474                else
 475                        override_cred->cap_effective =
 476                                override_cred->cap_permitted;
 477        }
 478
 479        old_cred = override_creds(override_cred);
 480
 481        res = user_path_at(dfd, filename, LOOKUP_FOLLOW, &path);
 482        if (res)
 483                goto out;
 484
 485        inode = path.dentry->d_inode;
 486
 487        if ((mode & MAY_EXEC) && S_ISREG(inode->i_mode)) {
 488                /*
 489                 * MAY_EXEC on regular files is denied if the fs is mounted
 490                 * with the "noexec" flag.
 491                 */
 492                res = -EACCES;
 493                if (path.mnt->mnt_flags & MNT_NOEXEC)
 494                        goto out_path_release;
 495        }
 496
 497        res = inode_permission(inode, mode | MAY_ACCESS);
 498        /* SuS v2 requires we report a read only fs too */
 499        if (res || !(mode & S_IWOTH) || special_file(inode->i_mode))
 500                goto out_path_release;
 501        /*
 502         * This is a rare case where using __mnt_is_readonly()
 503         * is OK without a mnt_want/drop_write() pair.  Since
 504         * no actual write to the fs is performed here, we do
 505         * not need to telegraph to that to anyone.
 506         *
 507         * By doing this, we accept that this access is
 508         * inherently racy and know that the fs may change
 509         * state before we even see this result.
 510         */
 511        if (__mnt_is_readonly(path.mnt))
 512                res = -EROFS;
 513
 514out_path_release:
 515        path_put(&path);
 516out:
 517        revert_creds(old_cred);
 518        put_cred(override_cred);
 519        return res;
 520}
 521
 522SYSCALL_DEFINE2(access, const char __user *, filename, int, mode)
 523{
 524        return sys_faccessat(AT_FDCWD, filename, mode);
 525}
 526
 527SYSCALL_DEFINE1(chdir, const char __user *, filename)
 528{
 529        struct path path;
 530        int error;
 531
 532        error = user_path_dir(filename, &path);
 533        if (error)
 534                goto out;
 535
 536        error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);
 537        if (error)
 538                goto dput_and_out;
 539
 540        set_fs_pwd(current->fs, &path);
 541
 542dput_and_out:
 543        path_put(&path);
 544out:
 545        return error;
 546}
 547
 548SYSCALL_DEFINE1(fchdir, unsigned int, fd)
 549{
 550        struct file *file;
 551        struct inode *inode;
 552        int error;
 553
 554        error = -EBADF;
 555        file = fget(fd);
 556        if (!file)
 557                goto out;
 558
 559        inode = file->f_path.dentry->d_inode;
 560
 561        error = -ENOTDIR;
 562        if (!S_ISDIR(inode->i_mode))
 563                goto out_putf;
 564
 565        error = inode_permission(inode, MAY_EXEC | MAY_ACCESS);
 566        if (!error)
 567                set_fs_pwd(current->fs, &file->f_path);
 568out_putf:
 569        fput(file);
 570out:
 571        return error;
 572}
 573
 574SYSCALL_DEFINE1(chroot, const char __user *, filename)
 575{
 576        struct path path;
 577        int error;
 578
 579        error = user_path_dir(filename, &path);
 580        if (error)
 581                goto out;
 582
 583        error = inode_permission(path.dentry->d_inode, MAY_EXEC | MAY_ACCESS);
 584        if (error)
 585                goto dput_and_out;
 586
 587        error = -EPERM;
 588        if (!capable(CAP_SYS_CHROOT))
 589                goto dput_and_out;
 590
 591        set_fs_root(current->fs, &path);
 592        error = 0;
 593dput_and_out:
 594        path_put(&path);
 595out:
 596        return error;
 597}
 598
 599SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode)
 600{
 601        struct inode * inode;
 602        struct dentry * dentry;
 603        struct file * file;
 604        int err = -EBADF;
 605        struct iattr newattrs;
 606
 607        file = fget(fd);
 608        if (!file)
 609                goto out;
 610
 611        dentry = file->f_path.dentry;
 612        inode = dentry->d_inode;
 613
 614        audit_inode(NULL, dentry);
 615
 616        err = mnt_want_write_file(file);
 617        if (err)
 618                goto out_putf;
 619        mutex_lock(&inode->i_mutex);
 620        if (mode == (mode_t) -1)
 621                mode = inode->i_mode;
 622        newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
 623        newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
 624        err = notify_change(dentry, &newattrs);
 625        mutex_unlock(&inode->i_mutex);
 626        mnt_drop_write(file->f_path.mnt);
 627out_putf:
 628        fput(file);
 629out:
 630        return err;
 631}
 632
 633SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode)
 634{
 635        struct path path;
 636        struct inode *inode;
 637        int error;
 638        struct iattr newattrs;
 639
 640        error = user_path_at(dfd, filename, LOOKUP_FOLLOW, &path);
 641        if (error)
 642                goto out;
 643        inode = path.dentry->d_inode;
 644
 645        error = mnt_want_write(path.mnt);
 646        if (error)
 647                goto dput_and_out;
 648        mutex_lock(&inode->i_mutex);
 649        if (mode == (mode_t) -1)
 650                mode = inode->i_mode;
 651        newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
 652        newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
 653        error = notify_change(path.dentry, &newattrs);
 654        mutex_unlock(&inode->i_mutex);
 655        mnt_drop_write(path.mnt);
 656dput_and_out:
 657        path_put(&path);
 658out:
 659        return error;
 660}
 661
 662SYSCALL_DEFINE2(chmod, const char __user *, filename, mode_t, mode)
 663{
 664        return sys_fchmodat(AT_FDCWD, filename, mode);
 665}
 666
 667static int chown_common(struct dentry * dentry, uid_t user, gid_t group)
 668{
 669        struct inode *inode = dentry->d_inode;
 670        int error;
 671        struct iattr newattrs;
 672
 673        newattrs.ia_valid =  ATTR_CTIME;
 674        if (user != (uid_t) -1) {
 675                newattrs.ia_valid |= ATTR_UID;
 676                newattrs.ia_uid = user;
 677        }
 678        if (group != (gid_t) -1) {
 679                newattrs.ia_valid |= ATTR_GID;
 680                newattrs.ia_gid = group;
 681        }
 682        if (!S_ISDIR(inode->i_mode))
 683                newattrs.ia_valid |=
 684                        ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV;
 685        mutex_lock(&inode->i_mutex);
 686        error = notify_change(dentry, &newattrs);
 687        mutex_unlock(&inode->i_mutex);
 688
 689        return error;
 690}
 691
 692SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group)
 693{
 694        struct path path;
 695        int error;
 696
 697        error = user_path(filename, &path);
 698        if (error)
 699                goto out;
 700        error = mnt_want_write(path.mnt);
 701        if (error)
 702                goto out_release;
 703        error = chown_common(path.dentry, user, group);
 704        mnt_drop_write(path.mnt);
 705out_release:
 706        path_put(&path);
 707out:
 708        return error;
 709}
 710
 711SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user,
 712                gid_t, group, int, flag)
 713{
 714        struct path path;
 715        int error = -EINVAL;
 716        int follow;
 717
 718        if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
 719                goto out;
 720
 721        follow = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
 722        error = user_path_at(dfd, filename, follow, &path);
 723        if (error)
 724                goto out;
 725        error = mnt_want_write(path.mnt);
 726        if (error)
 727                goto out_release;
 728        error = chown_common(path.dentry, user, group);
 729        mnt_drop_write(path.mnt);
 730out_release:
 731        path_put(&path);
 732out:
 733        return error;
 734}
 735
 736SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group)
 737{
 738        struct path path;
 739        int error;
 740
 741        error = user_lpath(filename, &path);
 742        if (error)
 743                goto out;
 744        error = mnt_want_write(path.mnt);
 745        if (error)
 746                goto out_release;
 747        error = chown_common(path.dentry, user, group);
 748        mnt_drop_write(path.mnt);
 749out_release:
 750        path_put(&path);
 751out:
 752        return error;
 753}
 754
 755SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
 756{
 757        struct file * file;
 758        int error = -EBADF;
 759        struct dentry * dentry;
 760
 761        file = fget(fd);
 762        if (!file)
 763                goto out;
 764
 765        error = mnt_want_write_file(file);
 766        if (error)
 767                goto out_fput;
 768        dentry = file->f_path.dentry;
 769        audit_inode(NULL, dentry);
 770        error = chown_common(dentry, user, group);
 771        mnt_drop_write(file->f_path.mnt);
 772out_fput:
 773        fput(file);
 774out:
 775        return error;
 776}
 777
 778/*
 779 * You have to be very careful that these write
 780 * counts get cleaned up in error cases and
 781 * upon __fput().  This should probably never
 782 * be called outside of __dentry_open().
 783 */
 784static inline int __get_file_write_access(struct inode *inode,
 785                                          struct vfsmount *mnt)
 786{
 787        int error;
 788        error = get_write_access(inode);
 789        if (error)
 790                return error;
 791        /*
 792         * Do not take mount writer counts on
 793         * special files since no writes to
 794         * the mount itself will occur.
 795         */
 796        if (!special_file(inode->i_mode)) {
 797                /*
 798                 * Balanced in __fput()
 799                 */
 800                error = mnt_want_write(mnt);
 801                if (error)
 802                        put_write_access(inode);
 803        }
 804        return error;
 805}
 806
 807static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
 808                                        int flags, struct file *f,
 809                                        int (*open)(struct inode *, struct file *),
 810                                        const struct cred *cred)
 811{
 812        struct inode *inode;
 813        int error;
 814
 815        f->f_flags = flags;
 816        f->f_mode = (__force fmode_t)((flags+1) & O_ACCMODE) | FMODE_LSEEK |
 817                                FMODE_PREAD | FMODE_PWRITE;
 818        inode = dentry->d_inode;
 819        if (f->f_mode & FMODE_WRITE) {
 820                error = __get_file_write_access(inode, mnt);
 821                if (error)
 822                        goto cleanup_file;
 823                if (!special_file(inode->i_mode))
 824                        file_take_write(f);
 825        }
 826
 827        f->f_mapping = inode->i_mapping;
 828        f->f_path.dentry = dentry;
 829        f->f_path.mnt = mnt;
 830        f->f_pos = 0;
 831        f->f_op = fops_get(inode->i_fop);
 832        file_move(f, &inode->i_sb->s_files);
 833
 834        error = security_dentry_open(f, cred);
 835        if (error)
 836                goto cleanup_all;
 837
 838        if (!open && f->f_op)
 839                open = f->f_op->open;
 840        if (open) {
 841                error = open(inode, f);
 842                if (error)
 843                        goto cleanup_all;
 844        }
 845
 846        f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
 847
 848        file_ra_state_init(&f->f_ra, f->f_mapping->host->i_mapping);
 849
 850        /* NB: we're sure to have correct a_ops only after f_op->open */
 851        if (f->f_flags & O_DIRECT) {
 852                if (!f->f_mapping->a_ops ||
 853                    ((!f->f_mapping->a_ops->direct_IO) &&
 854                    (!f->f_mapping->a_ops->get_xip_mem))) {
 855                        fput(f);
 856                        f = ERR_PTR(-EINVAL);
 857                }
 858        }
 859
 860        return f;
 861
 862cleanup_all:
 863        fops_put(f->f_op);
 864        if (f->f_mode & FMODE_WRITE) {
 865                put_write_access(inode);
 866                if (!special_file(inode->i_mode)) {
 867                        /*
 868                         * We don't consider this a real
 869                         * mnt_want/drop_write() pair
 870                         * because it all happenend right
 871                         * here, so just reset the state.
 872                         */
 873                        file_reset_write(f);
 874                        mnt_drop_write(mnt);
 875                }
 876        }
 877        file_kill(f);
 878        f->f_path.dentry = NULL;
 879        f->f_path.mnt = NULL;
 880cleanup_file:
 881        put_filp(f);
 882        dput(dentry);
 883        mntput(mnt);
 884        return ERR_PTR(error);
 885}
 886
 887/**
 888 * lookup_instantiate_filp - instantiates the open intent filp
 889 * @nd: pointer to nameidata
 890 * @dentry: pointer to dentry
 891 * @open: open callback
 892 *
 893 * Helper for filesystems that want to use lookup open intents and pass back
 894 * a fully instantiated struct file to the caller.
 895 * This function is meant to be called from within a filesystem's
 896 * lookup method.
 897 * Beware of calling it for non-regular files! Those ->open methods might block
 898 * (e.g. in fifo_open), leaving you with parent locked (and in case of fifo,
 899 * leading to a deadlock, as nobody can open that fifo anymore, because
 900 * another process to open fifo will block on locked parent when doing lookup).
 901 * Note that in case of error, nd->intent.open.file is destroyed, but the
 902 * path information remains valid.
 903 * If the open callback is set to NULL, then the standard f_op->open()
 904 * filesystem callback is substituted.
 905 */
 906struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
 907                int (*open)(struct inode *, struct file *))
 908{
 909        const struct cred *cred = current_cred();
 910
 911        if (IS_ERR(nd->intent.open.file))
 912                goto out;
 913        if (IS_ERR(dentry))
 914                goto out_err;
 915        nd->intent.open.file = __dentry_open(dget(dentry), mntget(nd->path.mnt),
 916                                             nd->intent.open.flags - 1,
 917                                             nd->intent.open.file,
 918                                             open, cred);
 919out:
 920        return nd->intent.open.file;
 921out_err:
 922        release_open_intent(nd);
 923        nd->intent.open.file = (struct file *)dentry;
 924        goto out;
 925}
 926EXPORT_SYMBOL_GPL(lookup_instantiate_filp);
 927
 928/**
 929 * nameidata_to_filp - convert a nameidata to an open filp.
 930 * @nd: pointer to nameidata
 931 * @flags: open flags
 932 *
 933 * Note that this function destroys the original nameidata
 934 */
 935struct file *nameidata_to_filp(struct nameidata *nd, int flags)
 936{
 937        const struct cred *cred = current_cred();
 938        struct file *filp;
 939
 940        /* Pick up the filp from the open intent */
 941        filp = nd->intent.open.file;
 942        /* Has the filesystem initialised the file for us? */
 943        if (filp->f_path.dentry == NULL)
 944                filp = __dentry_open(nd->path.dentry, nd->path.mnt, flags, filp,
 945                                     NULL, cred);
 946        else
 947                path_put(&nd->path);
 948        return filp;
 949}
 950
 951/*
 952 * dentry_open() will have done dput(dentry) and mntput(mnt) if it returns an
 953 * error.
 954 */
 955struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags,
 956                         const struct cred *cred)
 957{
 958        int error;
 959        struct file *f;
 960
 961        validate_creds(cred);
 962
 963        /*
 964         * We must always pass in a valid mount pointer.   Historically
 965         * callers got away with not passing it, but we must enforce this at
 966         * the earliest possible point now to avoid strange problems deep in the
 967         * filesystem stack.
 968         */
 969        if (!mnt) {
 970                printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__);
 971                dump_stack();
 972                return ERR_PTR(-EINVAL);
 973        }
 974
 975        error = -ENFILE;
 976        f = get_empty_filp();
 977        if (f == NULL) {
 978                dput(dentry);
 979                mntput(mnt);
 980                return ERR_PTR(error);
 981        }
 982
 983        return __dentry_open(dentry, mnt, flags, f, NULL, cred);
 984}
 985EXPORT_SYMBOL(dentry_open);
 986
 987static void __put_unused_fd(struct files_struct *files, unsigned int fd)
 988{
 989        struct fdtable *fdt = files_fdtable(files);
 990        __FD_CLR(fd, fdt->open_fds);
 991        if (fd < files->next_fd)
 992                files->next_fd = fd;
 993}
 994
 995void put_unused_fd(unsigned int fd)
 996{
 997        struct files_struct *files = current->files;
 998        spin_lock(&files->file_lock);
 999        __put_unused_fd(files, fd);
1000        spin_unlock(&files->file_lock);
1001}
1002
1003EXPORT_SYMBOL(put_unused_fd);
1004
1005/*
1006 * Install a file pointer in the fd array.
1007 *
1008 * The VFS is full of places where we drop the files lock between
1009 * setting the open_fds bitmap and installing the file in the file
1010 * array.  At any such point, we are vulnerable to a dup2() race
1011 * installing a file in the array before us.  We need to detect this and
1012 * fput() the struct file we are about to overwrite in this case.
1013 *
1014 * It should never happen - if we allow dup2() do it, _really_ bad things
1015 * will follow.
1016 */
1017
1018void fd_install(unsigned int fd, struct file *file)
1019{
1020        struct files_struct *files = current->files;
1021        struct fdtable *fdt;
1022        spin_lock(&files->file_lock);
1023        fdt = files_fdtable(files);
1024        BUG_ON(fdt->fd[fd] != NULL);
1025        rcu_assign_pointer(fdt->fd[fd], file);
1026        spin_unlock(&files->file_lock);
1027}
1028
1029EXPORT_SYMBOL(fd_install);
1030
1031long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
1032{
1033        char *tmp = getname(filename);
1034        int fd = PTR_ERR(tmp);
1035
1036        if (!IS_ERR(tmp)) {
1037                fd = get_unused_fd_flags(flags);
1038                if (fd >= 0) {
1039                        struct file *f = do_filp_open(dfd, tmp, flags, mode, 0);
1040                        if (IS_ERR(f)) {
1041                                put_unused_fd(fd);
1042                                fd = PTR_ERR(f);
1043                        } else {
1044                                fsnotify_open(f->f_path.dentry);
1045                                fd_install(fd, f);
1046                        }
1047                }
1048                putname(tmp);
1049        }
1050        return fd;
1051}
1052
1053SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
1054{
1055        long ret;
1056
1057        if (force_o_largefile())
1058                flags |= O_LARGEFILE;
1059
1060        ret = do_sys_open(AT_FDCWD, filename, flags, mode);
1061        /* avoid REGPARM breakage on x86: */
1062        asmlinkage_protect(3, ret, filename, flags, mode);
1063        return ret;
1064}
1065
1066SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
1067                int, mode)
1068{
1069        long ret;
1070
1071        if (force_o_largefile())
1072                flags |= O_LARGEFILE;
1073
1074        ret = do_sys_open(dfd, filename, flags, mode);
1075        /* avoid REGPARM breakage on x86: */
1076        asmlinkage_protect(4, ret, dfd, filename, flags, mode);
1077        return ret;
1078}
1079
1080#ifndef __alpha__
1081
1082/*
1083 * For backward compatibility?  Maybe this should be moved
1084 * into arch/i386 instead?
1085 */
1086SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode)
1087{
1088        return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
1089}
1090
1091#endif
1092
1093/*
1094 * "id" is the POSIX thread ID. We use the
1095 * files pointer for this..
1096 */
1097int filp_close(struct file *filp, fl_owner_t id)
1098{
1099        int retval = 0;
1100
1101        if (!file_count(filp)) {
1102                printk(KERN_ERR "VFS: Close: file count is 0\n");
1103                return 0;
1104        }
1105
1106        if (filp->f_op && filp->f_op->flush)
1107                retval = filp->f_op->flush(filp, id);
1108
1109        dnotify_flush(filp, id);
1110        locks_remove_posix(filp, id);
1111        fput(filp);
1112        return retval;
1113}
1114
1115EXPORT_SYMBOL(filp_close);
1116
1117/*
1118 * Careful here! We test whether the file pointer is NULL before
1119 * releasing the fd. This ensures that one clone task can't release
1120 * an fd while another clone is opening it.
1121 */
1122SYSCALL_DEFINE1(close, unsigned int, fd)
1123{
1124        struct file * filp;
1125        struct files_struct *files = current->files;
1126        struct fdtable *fdt;
1127        int retval;
1128
1129        spin_lock(&files->file_lock);
1130        fdt = files_fdtable(files);
1131        if (fd >= fdt->max_fds)
1132                goto out_unlock;
1133        filp = fdt->fd[fd];
1134        if (!filp)
1135                goto out_unlock;
1136        rcu_assign_pointer(fdt->fd[fd], NULL);
1137        FD_CLR(fd, fdt->close_on_exec);
1138        __put_unused_fd(files, fd);
1139        spin_unlock(&files->file_lock);
1140        retval = filp_close(filp, files);
1141
1142        /* can't restart close syscall because file table entry was cleared */
1143        if (unlikely(retval == -ERESTARTSYS ||
1144                     retval == -ERESTARTNOINTR ||
1145                     retval == -ERESTARTNOHAND ||
1146                     retval == -ERESTART_RESTARTBLOCK))
1147                retval = -EINTR;
1148
1149        return retval;
1150
1151out_unlock:
1152        spin_unlock(&files->file_lock);
1153        return -EBADF;
1154}
1155EXPORT_SYMBOL(sys_close);
1156
1157/*
1158 * This routine simulates a hangup on the tty, to arrange that users
1159 * are given clean terminals at login time.
1160 */
1161SYSCALL_DEFINE0(vhangup)
1162{
1163        if (capable(CAP_SYS_TTY_CONFIG)) {
1164                tty_vhangup_self();
1165                return 0;
1166        }
1167        return -EPERM;
1168}
1169
1170/*
1171 * Called when an inode is about to be open.
1172 * We use this to disallow opening large files on 32bit systems if
1173 * the caller didn't specify O_LARGEFILE.  On 64bit systems we force
1174 * on this flag in sys_open.
1175 */
1176int generic_file_open(struct inode * inode, struct file * filp)
1177{
1178        if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
1179                return -EOVERFLOW;
1180        return 0;
1181}
1182
1183EXPORT_SYMBOL(generic_file_open);
1184
1185/*
1186 * This is used by subsystems that don't want seekable
1187 * file descriptors
1188 */
1189int nonseekable_open(struct inode *inode, struct file *filp)
1190{
1191        filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
1192        return 0;
1193}
1194
1195EXPORT_SYMBOL(nonseekable_open);
1196