Revert "UBUNTU: ubuntu: AUFS -- aufs2-standalone.patch aufs2.1-36-UNRELEASED-20101103"
[linux-flexiantxendom0-natty.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 SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode)
453 {
454         struct inode * inode;
455         struct dentry * dentry;
456         struct file * file;
457         int err = -EBADF;
458         struct iattr newattrs;
459
460         file = fget(fd);
461         if (!file)
462                 goto out;
463
464         dentry = file->f_path.dentry;
465         inode = dentry->d_inode;
466
467         audit_inode(NULL, dentry);
468
469         err = mnt_want_write_file(file);
470         if (err)
471                 goto out_putf;
472         mutex_lock(&inode->i_mutex);
473         err = security_path_chmod(dentry, file->f_vfsmnt, mode);
474         if (err)
475                 goto out_unlock;
476         if (mode == (mode_t) -1)
477                 mode = inode->i_mode;
478         newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
479         newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
480         err = notify_change(dentry, &newattrs);
481 out_unlock:
482         mutex_unlock(&inode->i_mutex);
483         mnt_drop_write(file->f_path.mnt);
484 out_putf:
485         fput(file);
486 out:
487         return err;
488 }
489
490 SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode)
491 {
492         struct path path;
493         struct inode *inode;
494         int error;
495         struct iattr newattrs;
496
497         error = user_path_at(dfd, filename, LOOKUP_FOLLOW, &path);
498         if (error)
499                 goto out;
500         inode = path.dentry->d_inode;
501
502         error = mnt_want_write(path.mnt);
503         if (error)
504                 goto dput_and_out;
505         mutex_lock(&inode->i_mutex);
506         error = security_path_chmod(path.dentry, path.mnt, mode);
507         if (error)
508                 goto out_unlock;
509         if (mode == (mode_t) -1)
510                 mode = inode->i_mode;
511         newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
512         newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
513         error = notify_change(path.dentry, &newattrs);
514 out_unlock:
515         mutex_unlock(&inode->i_mutex);
516         mnt_drop_write(path.mnt);
517 dput_and_out:
518         path_put(&path);
519 out:
520         return error;
521 }
522
523 SYSCALL_DEFINE2(chmod, const char __user *, filename, mode_t, mode)
524 {
525         return sys_fchmodat(AT_FDCWD, filename, mode);
526 }
527
528 static int chown_common(struct path *path, uid_t user, gid_t group)
529 {
530         struct inode *inode = path->dentry->d_inode;
531         int error;
532         struct iattr newattrs;
533
534         newattrs.ia_valid =  ATTR_CTIME;
535         if (user != (uid_t) -1) {
536                 newattrs.ia_valid |= ATTR_UID;
537                 newattrs.ia_uid = user;
538         }
539         if (group != (gid_t) -1) {
540                 newattrs.ia_valid |= ATTR_GID;
541                 newattrs.ia_gid = group;
542         }
543         if (!S_ISDIR(inode->i_mode))
544                 newattrs.ia_valid |=
545                         ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV;
546         mutex_lock(&inode->i_mutex);
547         error = security_path_chown(path, user, group);
548         if (!error)
549                 error = notify_change(path->dentry, &newattrs);
550         mutex_unlock(&inode->i_mutex);
551
552         return error;
553 }
554
555 SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group)
556 {
557         struct path path;
558         int error;
559
560         error = user_path(filename, &path);
561         if (error)
562                 goto out;
563         error = mnt_want_write(path.mnt);
564         if (error)
565                 goto out_release;
566         error = chown_common(&path, user, group);
567         mnt_drop_write(path.mnt);
568 out_release:
569         path_put(&path);
570 out:
571         return error;
572 }
573
574 SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user,
575                 gid_t, group, int, flag)
576 {
577         struct path path;
578         int error = -EINVAL;
579         int follow;
580
581         if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
582                 goto out;
583
584         follow = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW;
585         error = user_path_at(dfd, filename, follow, &path);
586         if (error)
587                 goto out;
588         error = mnt_want_write(path.mnt);
589         if (error)
590                 goto out_release;
591         error = chown_common(&path, user, group);
592         mnt_drop_write(path.mnt);
593 out_release:
594         path_put(&path);
595 out:
596         return error;
597 }
598
599 SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group)
600 {
601         struct path path;
602         int error;
603
604         error = user_lpath(filename, &path);
605         if (error)
606                 goto out;
607         error = mnt_want_write(path.mnt);
608         if (error)
609                 goto out_release;
610         error = chown_common(&path, user, group);
611         mnt_drop_write(path.mnt);
612 out_release:
613         path_put(&path);
614 out:
615         return error;
616 }
617
618 SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
619 {
620         struct file * file;
621         int error = -EBADF;
622         struct dentry * dentry;
623
624         file = fget(fd);
625         if (!file)
626                 goto out;
627
628         error = mnt_want_write_file(file);
629         if (error)
630                 goto out_fput;
631         dentry = file->f_path.dentry;
632         audit_inode(NULL, dentry);
633         error = chown_common(&file->f_path, user, group);
634         mnt_drop_write(file->f_path.mnt);
635 out_fput:
636         fput(file);
637 out:
638         return error;
639 }
640
641 /*
642  * You have to be very careful that these write
643  * counts get cleaned up in error cases and
644  * upon __fput().  This should probably never
645  * be called outside of __dentry_open().
646  */
647 static inline int __get_file_write_access(struct inode *inode,
648                                           struct vfsmount *mnt)
649 {
650         int error;
651         error = get_write_access(inode);
652         if (error)
653                 return error;
654         /*
655          * Do not take mount writer counts on
656          * special files since no writes to
657          * the mount itself will occur.
658          */
659         if (!special_file(inode->i_mode)) {
660                 /*
661                  * Balanced in __fput()
662                  */
663                 error = mnt_want_write(mnt);
664                 if (error)
665                         put_write_access(inode);
666         }
667         return error;
668 }
669
670 static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
671                                         struct file *f,
672                                         int (*open)(struct inode *, struct file *),
673                                         const struct cred *cred)
674 {
675         struct inode *inode;
676         int error;
677
678         f->f_mode = OPEN_FMODE(f->f_flags) | FMODE_LSEEK |
679                                 FMODE_PREAD | FMODE_PWRITE;
680         inode = dentry->d_inode;
681         if (f->f_mode & FMODE_WRITE) {
682                 error = __get_file_write_access(inode, mnt);
683                 if (error)
684                         goto cleanup_file;
685                 if (!special_file(inode->i_mode))
686                         file_take_write(f);
687         }
688
689         f->f_mapping = inode->i_mapping;
690         f->f_path.dentry = dentry;
691         f->f_path.mnt = mnt;
692         f->f_pos = 0;
693         f->f_op = fops_get(inode->i_fop);
694         file_sb_list_add(f, inode->i_sb);
695
696         error = security_dentry_open(f, cred);
697         if (error)
698                 goto cleanup_all;
699
700         if (!open && f->f_op)
701                 open = f->f_op->open;
702         if (open) {
703                 error = open(inode, f);
704                 if (error)
705                         goto cleanup_all;
706         }
707         ima_counts_get(f);
708
709         f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
710
711         file_ra_state_init(&f->f_ra, f->f_mapping->host->i_mapping);
712
713         /* NB: we're sure to have correct a_ops only after f_op->open */
714         if (f->f_flags & O_DIRECT) {
715                 if (!f->f_mapping->a_ops ||
716                     ((!f->f_mapping->a_ops->direct_IO) &&
717                     (!f->f_mapping->a_ops->get_xip_mem))) {
718                         fput(f);
719                         f = ERR_PTR(-EINVAL);
720                 }
721         }
722
723         return f;
724
725 cleanup_all:
726         fops_put(f->f_op);
727         if (f->f_mode & FMODE_WRITE) {
728                 put_write_access(inode);
729                 if (!special_file(inode->i_mode)) {
730                         /*
731                          * We don't consider this a real
732                          * mnt_want/drop_write() pair
733                          * because it all happenend right
734                          * here, so just reset the state.
735                          */
736                         file_reset_write(f);
737                         mnt_drop_write(mnt);
738                 }
739         }
740         file_sb_list_del(f);
741         f->f_path.dentry = NULL;
742         f->f_path.mnt = NULL;
743 cleanup_file:
744         put_filp(f);
745         dput(dentry);
746         mntput(mnt);
747         return ERR_PTR(error);
748 }
749
750 /**
751  * lookup_instantiate_filp - instantiates the open intent filp
752  * @nd: pointer to nameidata
753  * @dentry: pointer to dentry
754  * @open: open callback
755  *
756  * Helper for filesystems that want to use lookup open intents and pass back
757  * a fully instantiated struct file to the caller.
758  * This function is meant to be called from within a filesystem's
759  * lookup method.
760  * Beware of calling it for non-regular files! Those ->open methods might block
761  * (e.g. in fifo_open), leaving you with parent locked (and in case of fifo,
762  * leading to a deadlock, as nobody can open that fifo anymore, because
763  * another process to open fifo will block on locked parent when doing lookup).
764  * Note that in case of error, nd->intent.open.file is destroyed, but the
765  * path information remains valid.
766  * If the open callback is set to NULL, then the standard f_op->open()
767  * filesystem callback is substituted.
768  */
769 struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
770                 int (*open)(struct inode *, struct file *))
771 {
772         const struct cred *cred = current_cred();
773
774         if (IS_ERR(nd->intent.open.file))
775                 goto out;
776         if (IS_ERR(dentry))
777                 goto out_err;
778         nd->intent.open.file = __dentry_open(dget(dentry), mntget(nd->path.mnt),
779                                              nd->intent.open.file,
780                                              open, cred);
781 out:
782         return nd->intent.open.file;
783 out_err:
784         release_open_intent(nd);
785         nd->intent.open.file = (struct file *)dentry;
786         goto out;
787 }
788 EXPORT_SYMBOL_GPL(lookup_instantiate_filp);
789
790 /**
791  * nameidata_to_filp - convert a nameidata to an open filp.
792  * @nd: pointer to nameidata
793  * @flags: open flags
794  *
795  * Note that this function destroys the original nameidata
796  */
797 struct file *nameidata_to_filp(struct nameidata *nd)
798 {
799         const struct cred *cred = current_cred();
800         struct file *filp;
801
802         /* Pick up the filp from the open intent */
803         filp = nd->intent.open.file;
804         nd->intent.open.file = NULL;
805
806         /* Has the filesystem initialised the file for us? */
807         if (filp->f_path.dentry == NULL) {
808                 path_get(&nd->path);
809                 filp = __dentry_open(nd->path.dentry, nd->path.mnt, filp,
810                                      NULL, cred);
811         }
812         return filp;
813 }
814
815 /*
816  * dentry_open() will have done dput(dentry) and mntput(mnt) if it returns an
817  * error.
818  */
819 struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags,
820                          const struct cred *cred)
821 {
822         int error;
823         struct file *f;
824
825         validate_creds(cred);
826
827         /*
828          * We must always pass in a valid mount pointer.   Historically
829          * callers got away with not passing it, but we must enforce this at
830          * the earliest possible point now to avoid strange problems deep in the
831          * filesystem stack.
832          */
833         if (!mnt) {
834                 printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__);
835                 dump_stack();
836                 return ERR_PTR(-EINVAL);
837         }
838
839         error = -ENFILE;
840         f = get_empty_filp();
841         if (f == NULL) {
842                 dput(dentry);
843                 mntput(mnt);
844                 return ERR_PTR(error);
845         }
846
847         f->f_flags = flags;
848         return __dentry_open(dentry, mnt, f, NULL, cred);
849 }
850 EXPORT_SYMBOL(dentry_open);
851
852 static void __put_unused_fd(struct files_struct *files, unsigned int fd)
853 {
854         struct fdtable *fdt = files_fdtable(files);
855         __FD_CLR(fd, fdt->open_fds);
856         if (fd < files->next_fd)
857                 files->next_fd = fd;
858 }
859
860 void put_unused_fd(unsigned int fd)
861 {
862         struct files_struct *files = current->files;
863         spin_lock(&files->file_lock);
864         __put_unused_fd(files, fd);
865         spin_unlock(&files->file_lock);
866 }
867
868 EXPORT_SYMBOL(put_unused_fd);
869
870 /*
871  * Install a file pointer in the fd array.
872  *
873  * The VFS is full of places where we drop the files lock between
874  * setting the open_fds bitmap and installing the file in the file
875  * array.  At any such point, we are vulnerable to a dup2() race
876  * installing a file in the array before us.  We need to detect this and
877  * fput() the struct file we are about to overwrite in this case.
878  *
879  * It should never happen - if we allow dup2() do it, _really_ bad things
880  * will follow.
881  */
882
883 void fd_install(unsigned int fd, struct file *file)
884 {
885         struct files_struct *files = current->files;
886         struct fdtable *fdt;
887         spin_lock(&files->file_lock);
888         fdt = files_fdtable(files);
889         BUG_ON(fdt->fd[fd] != NULL);
890         rcu_assign_pointer(fdt->fd[fd], file);
891         spin_unlock(&files->file_lock);
892 }
893
894 EXPORT_SYMBOL(fd_install);
895
896 long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
897 {
898         char *tmp = getname(filename);
899         int fd = PTR_ERR(tmp);
900
901         if (!IS_ERR(tmp)) {
902                 fd = get_unused_fd_flags(flags);
903                 if (fd >= 0) {
904                         struct file *f = do_filp_open(dfd, tmp, flags, mode, 0);
905                         if (IS_ERR(f)) {
906                                 put_unused_fd(fd);
907                                 fd = PTR_ERR(f);
908                         } else {
909                                 fsnotify_open(f);
910                                 fd_install(fd, f);
911                                 trace_do_sys_open(tmp, flags, mode);
912                         }
913                 }
914                 putname(tmp);
915         }
916         return fd;
917 }
918
919 SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
920 {
921         long ret;
922
923         if (force_o_largefile())
924                 flags |= O_LARGEFILE;
925
926         ret = do_sys_open(AT_FDCWD, filename, flags, mode);
927         /* avoid REGPARM breakage on x86: */
928         asmlinkage_protect(3, ret, filename, flags, mode);
929         return ret;
930 }
931
932 SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
933                 int, mode)
934 {
935         long ret;
936
937         if (force_o_largefile())
938                 flags |= O_LARGEFILE;
939
940         ret = do_sys_open(dfd, filename, flags, mode);
941         /* avoid REGPARM breakage on x86: */
942         asmlinkage_protect(4, ret, dfd, filename, flags, mode);
943         return ret;
944 }
945
946 #ifndef __alpha__
947
948 /*
949  * For backward compatibility?  Maybe this should be moved
950  * into arch/i386 instead?
951  */
952 SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode)
953 {
954         return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
955 }
956
957 #endif
958
959 /*
960  * "id" is the POSIX thread ID. We use the
961  * files pointer for this..
962  */
963 int filp_close(struct file *filp, fl_owner_t id)
964 {
965         int retval = 0;
966
967         if (!file_count(filp)) {
968                 printk(KERN_ERR "VFS: Close: file count is 0\n");
969                 return 0;
970         }
971
972         if (filp->f_op && filp->f_op->flush)
973                 retval = filp->f_op->flush(filp, id);
974
975         dnotify_flush(filp, id);
976         locks_remove_posix(filp, id);
977         fput(filp);
978         return retval;
979 }
980
981 EXPORT_SYMBOL(filp_close);
982
983 /*
984  * Careful here! We test whether the file pointer is NULL before
985  * releasing the fd. This ensures that one clone task can't release
986  * an fd while another clone is opening it.
987  */
988 SYSCALL_DEFINE1(close, unsigned int, fd)
989 {
990         struct file * filp;
991         struct files_struct *files = current->files;
992         struct fdtable *fdt;
993         int retval;
994
995         spin_lock(&files->file_lock);
996         fdt = files_fdtable(files);
997         if (fd >= fdt->max_fds)
998                 goto out_unlock;
999         filp = fdt->fd[fd];
1000         if (!filp)
1001                 goto out_unlock;
1002         rcu_assign_pointer(fdt->fd[fd], NULL);
1003         FD_CLR(fd, fdt->close_on_exec);
1004         __put_unused_fd(files, fd);
1005         spin_unlock(&files->file_lock);
1006         retval = filp_close(filp, files);
1007
1008         /* can't restart close syscall because file table entry was cleared */
1009         if (unlikely(retval == -ERESTARTSYS ||
1010                      retval == -ERESTARTNOINTR ||
1011                      retval == -ERESTARTNOHAND ||
1012                      retval == -ERESTART_RESTARTBLOCK))
1013                 retval = -EINTR;
1014
1015         return retval;
1016
1017 out_unlock:
1018         spin_unlock(&files->file_lock);
1019         return -EBADF;
1020 }
1021 EXPORT_SYMBOL(sys_close);
1022
1023 /*
1024  * This routine simulates a hangup on the tty, to arrange that users
1025  * are given clean terminals at login time.
1026  */
1027 SYSCALL_DEFINE0(vhangup)
1028 {
1029         if (capable(CAP_SYS_TTY_CONFIG)) {
1030                 tty_vhangup_self();
1031                 return 0;
1032         }
1033         return -EPERM;
1034 }
1035
1036 /*
1037  * Called when an inode is about to be open.
1038  * We use this to disallow opening large files on 32bit systems if
1039  * the caller didn't specify O_LARGEFILE.  On 64bit systems we force
1040  * on this flag in sys_open.
1041  */
1042 int generic_file_open(struct inode * inode, struct file * filp)
1043 {
1044         if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
1045                 return -EOVERFLOW;
1046         return 0;
1047 }
1048
1049 EXPORT_SYMBOL(generic_file_open);
1050
1051 /*
1052  * This is used by subsystems that don't want seekable
1053  * file descriptors. The function is not supposed to ever fail, the only
1054  * reason it returns an 'int' and not 'void' is so that it can be plugged
1055  * directly into file_operations structure.
1056  */
1057 int nonseekable_open(struct inode *inode, struct file *filp)
1058 {
1059         filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
1060         return 0;
1061 }
1062
1063 EXPORT_SYMBOL(nonseekable_open);