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