1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/init.h>
18#include <linux/export.h>
19#include <linux/kernel.h>
20#include <linux/slab.h>
21#include <linux/fs.h>
22#include <linux/namei.h>
23#include <linux/pagemap.h>
24#include <linux/fsnotify.h>
25#include <linux/personality.h>
26#include <linux/security.h>
27#include <linux/ima.h>
28#include <linux/syscalls.h>
29#include <linux/mount.h>
30#include <linux/audit.h>
31#include <linux/capability.h>
32#include <linux/file.h>
33#include <linux/fcntl.h>
34#include <linux/device_cgroup.h>
35#include <linux/fs_struct.h>
36#include <linux/posix_acl.h>
37#include <asm/uaccess.h>
38
39#include "internal.h"
40#include "mount.h"
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120void final_putname(struct filename *name)
121{
122 if (name->separate) {
123 __putname(name->name);
124 kfree(name);
125 } else {
126 __putname(name);
127 }
128}
129
130#define EMBEDDED_NAME_MAX (PATH_MAX - sizeof(struct filename))
131
132static struct filename *
133getname_flags(const char __user *filename, int flags, int *empty)
134{
135 struct filename *result, *err;
136 int len;
137 long max;
138 char *kname;
139
140 result = audit_reusename(filename);
141 if (result)
142 return result;
143
144 result = __getname();
145 if (unlikely(!result))
146 return ERR_PTR(-ENOMEM);
147
148
149
150
151
152 kname = (char *)result + sizeof(*result);
153 result->name = kname;
154 result->separate = false;
155 max = EMBEDDED_NAME_MAX;
156
157recopy:
158 len = strncpy_from_user(kname, filename, max);
159 if (unlikely(len < 0)) {
160 err = ERR_PTR(len);
161 goto error;
162 }
163
164
165
166
167
168
169
170 if (len == EMBEDDED_NAME_MAX && max == EMBEDDED_NAME_MAX) {
171 kname = (char *)result;
172
173 result = kzalloc(sizeof(*result), GFP_KERNEL);
174 if (!result) {
175 err = ERR_PTR(-ENOMEM);
176 result = (struct filename *)kname;
177 goto error;
178 }
179 result->name = kname;
180 result->separate = true;
181 max = PATH_MAX;
182 goto recopy;
183 }
184
185
186 if (unlikely(!len)) {
187 if (empty)
188 *empty = 1;
189 err = ERR_PTR(-ENOENT);
190 if (!(flags & LOOKUP_EMPTY))
191 goto error;
192 }
193
194 err = ERR_PTR(-ENAMETOOLONG);
195 if (unlikely(len >= PATH_MAX))
196 goto error;
197
198 result->uptr = filename;
199 result->aname = NULL;
200 audit_getname(result);
201 return result;
202
203error:
204 final_putname(result);
205 return err;
206}
207
208struct filename *
209getname(const char __user * filename)
210{
211 return getname_flags(filename, 0, NULL);
212}
213
214
215
216
217
218struct filename *
219getname_kernel(const char * filename)
220{
221 struct filename *result;
222 char *kname;
223 int len;
224
225 len = strlen(filename);
226 if (len >= EMBEDDED_NAME_MAX)
227 return ERR_PTR(-ENAMETOOLONG);
228
229 result = __getname();
230 if (unlikely(!result))
231 return ERR_PTR(-ENOMEM);
232
233 kname = (char *)result + sizeof(*result);
234 result->name = kname;
235 result->uptr = NULL;
236 result->aname = NULL;
237 result->separate = false;
238
239 strlcpy(kname, filename, EMBEDDED_NAME_MAX);
240 return result;
241}
242
243#ifdef CONFIG_AUDITSYSCALL
244void putname(struct filename *name)
245{
246 if (unlikely(!audit_dummy_context()))
247 return audit_putname(name);
248 final_putname(name);
249}
250#endif
251
252static int check_acl(struct inode *inode, int mask)
253{
254#ifdef CONFIG_FS_POSIX_ACL
255 struct posix_acl *acl;
256
257 if (mask & MAY_NOT_BLOCK) {
258 acl = get_cached_acl_rcu(inode, ACL_TYPE_ACCESS);
259 if (!acl)
260 return -EAGAIN;
261
262 if (acl == ACL_NOT_CACHED)
263 return -ECHILD;
264 return posix_acl_permission(inode, acl, mask & ~MAY_NOT_BLOCK);
265 }
266
267 acl = get_acl(inode, ACL_TYPE_ACCESS);
268 if (IS_ERR(acl))
269 return PTR_ERR(acl);
270 if (acl) {
271 int error = posix_acl_permission(inode, acl, mask);
272 posix_acl_release(acl);
273 return error;
274 }
275#endif
276
277 return -EAGAIN;
278}
279
280
281
282
283static int acl_permission_check(struct inode *inode, int mask)
284{
285 unsigned int mode = inode->i_mode;
286
287 if (likely(uid_eq(current_fsuid(), inode->i_uid)))
288 mode >>= 6;
289 else {
290 if (IS_POSIXACL(inode) && (mode & S_IRWXG)) {
291 int error = check_acl(inode, mask);
292 if (error != -EAGAIN)
293 return error;
294 }
295
296 if (in_group_p(inode->i_gid))
297 mode >>= 3;
298 }
299
300
301
302
303 if ((mask & ~mode & (MAY_READ | MAY_WRITE | MAY_EXEC)) == 0)
304 return 0;
305 return -EACCES;
306}
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322int generic_permission(struct inode *inode, int mask)
323{
324 int ret;
325
326
327
328
329 ret = acl_permission_check(inode, mask);
330 if (ret != -EACCES)
331 return ret;
332
333 if (S_ISDIR(inode->i_mode)) {
334
335 if (inode_capable(inode, CAP_DAC_OVERRIDE))
336 return 0;
337 if (!(mask & MAY_WRITE))
338 if (inode_capable(inode, CAP_DAC_READ_SEARCH))
339 return 0;
340 return -EACCES;
341 }
342
343
344
345
346
347 if (!(mask & MAY_EXEC) || (inode->i_mode & S_IXUGO))
348 if (inode_capable(inode, CAP_DAC_OVERRIDE))
349 return 0;
350
351
352
353
354 mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
355 if (mask == MAY_READ)
356 if (inode_capable(inode, CAP_DAC_READ_SEARCH))
357 return 0;
358
359 return -EACCES;
360}
361
362
363
364
365
366
367
368static inline int do_inode_permission(struct inode *inode, int mask)
369{
370 if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
371 if (likely(inode->i_op->permission))
372 return inode->i_op->permission(inode, mask);
373
374
375 spin_lock(&inode->i_lock);
376 inode->i_opflags |= IOP_FASTPERM;
377 spin_unlock(&inode->i_lock);
378 }
379 return generic_permission(inode, mask);
380}
381
382
383
384
385
386
387
388
389
390
391
392
393
394int __inode_permission(struct inode *inode, int mask)
395{
396 int retval;
397
398 if (unlikely(mask & MAY_WRITE)) {
399
400
401
402 if (IS_IMMUTABLE(inode))
403 return -EACCES;
404 }
405
406 retval = do_inode_permission(inode, mask);
407 if (retval)
408 return retval;
409
410 retval = devcgroup_inode_permission(inode, mask);
411 if (retval)
412 return retval;
413
414 return security_inode_permission(inode, mask);
415}
416
417
418
419
420
421
422
423
424
425static int sb_permission(struct super_block *sb, struct inode *inode, int mask)
426{
427 if (unlikely(mask & MAY_WRITE)) {
428 umode_t mode = inode->i_mode;
429
430
431 if ((sb->s_flags & MS_RDONLY) &&
432 (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
433 return -EROFS;
434 }
435 return 0;
436}
437
438
439
440
441
442
443
444
445
446
447
448
449int inode_permission(struct inode *inode, int mask)
450{
451 int retval;
452
453 retval = sb_permission(inode->i_sb, inode, mask);
454 if (retval)
455 return retval;
456 return __inode_permission(inode, mask);
457}
458
459
460
461
462
463
464
465void path_get(const struct path *path)
466{
467 mntget(path->mnt);
468 dget(path->dentry);
469}
470EXPORT_SYMBOL(path_get);
471
472
473
474
475
476
477
478void path_put(const struct path *path)
479{
480 dput(path->dentry);
481 mntput(path->mnt);
482}
483EXPORT_SYMBOL(path_put);
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506static int unlazy_walk(struct nameidata *nd, struct dentry *dentry)
507{
508 struct fs_struct *fs = current->fs;
509 struct dentry *parent = nd->path.dentry;
510
511 BUG_ON(!(nd->flags & LOOKUP_RCU));
512
513
514
515
516
517
518
519
520
521 if (!legitimize_mnt(nd->path.mnt, nd->m_seq))
522 return -ECHILD;
523 nd->flags &= ~LOOKUP_RCU;
524
525 if (!lockref_get_not_dead(&parent->d_lockref)) {
526 nd->path.dentry = NULL;
527 goto out;
528 }
529
530
531
532
533
534
535
536
537
538
539
540
541 if (!dentry) {
542 if (read_seqcount_retry(&parent->d_seq, nd->seq))
543 goto out;
544 BUG_ON(nd->inode != parent->d_inode);
545 } else {
546 if (!lockref_get_not_dead(&dentry->d_lockref))
547 goto out;
548 if (read_seqcount_retry(&dentry->d_seq, nd->seq))
549 goto drop_dentry;
550 }
551
552
553
554
555
556 if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
557 spin_lock(&fs->lock);
558 if (nd->root.mnt != fs->root.mnt || nd->root.dentry != fs->root.dentry)
559 goto unlock_and_drop_dentry;
560 path_get(&nd->root);
561 spin_unlock(&fs->lock);
562 }
563
564 rcu_read_unlock();
565 return 0;
566
567unlock_and_drop_dentry:
568 spin_unlock(&fs->lock);
569drop_dentry:
570 rcu_read_unlock();
571 dput(dentry);
572 goto drop_root_mnt;
573out:
574 rcu_read_unlock();
575drop_root_mnt:
576 if (!(nd->flags & LOOKUP_ROOT))
577 nd->root.mnt = NULL;
578 return -ECHILD;
579}
580
581static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
582{
583 return dentry->d_op->d_revalidate(dentry, flags);
584}
585
586
587
588
589
590
591
592
593
594
595
596static int complete_walk(struct nameidata *nd)
597{
598 struct dentry *dentry = nd->path.dentry;
599 int status;
600
601 if (nd->flags & LOOKUP_RCU) {
602 nd->flags &= ~LOOKUP_RCU;
603 if (!(nd->flags & LOOKUP_ROOT))
604 nd->root.mnt = NULL;
605
606 if (!legitimize_mnt(nd->path.mnt, nd->m_seq)) {
607 rcu_read_unlock();
608 return -ECHILD;
609 }
610 if (unlikely(!lockref_get_not_dead(&dentry->d_lockref))) {
611 rcu_read_unlock();
612 mntput(nd->path.mnt);
613 return -ECHILD;
614 }
615 if (read_seqcount_retry(&dentry->d_seq, nd->seq)) {
616 rcu_read_unlock();
617 dput(dentry);
618 mntput(nd->path.mnt);
619 return -ECHILD;
620 }
621 rcu_read_unlock();
622 }
623
624 if (likely(!(nd->flags & LOOKUP_JUMPED)))
625 return 0;
626
627 if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
628 return 0;
629
630 status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
631 if (status > 0)
632 return 0;
633
634 if (!status)
635 status = -ESTALE;
636
637 path_put(&nd->path);
638 return status;
639}
640
641static __always_inline void set_root(struct nameidata *nd)
642{
643 if (!nd->root.mnt)
644 get_fs_root(current->fs, &nd->root);
645}
646
647static int link_path_walk(const char *, struct nameidata *);
648
649static __always_inline void set_root_rcu(struct nameidata *nd)
650{
651 if (!nd->root.mnt) {
652 struct fs_struct *fs = current->fs;
653 unsigned seq;
654
655 do {
656 seq = read_seqcount_begin(&fs->seq);
657 nd->root = fs->root;
658 nd->seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
659 } while (read_seqcount_retry(&fs->seq, seq));
660 }
661}
662
663static void path_put_conditional(struct path *path, struct nameidata *nd)
664{
665 dput(path->dentry);
666 if (path->mnt != nd->path.mnt)
667 mntput(path->mnt);
668}
669
670static inline void path_to_nameidata(const struct path *path,
671 struct nameidata *nd)
672{
673 if (!(nd->flags & LOOKUP_RCU)) {
674 dput(nd->path.dentry);
675 if (nd->path.mnt != path->mnt)
676 mntput(nd->path.mnt);
677 }
678 nd->path.mnt = path->mnt;
679 nd->path.dentry = path->dentry;
680}
681
682
683
684
685
686void nd_jump_link(struct nameidata *nd, struct path *path)
687{
688 path_put(&nd->path);
689
690 nd->path = *path;
691 nd->inode = nd->path.dentry->d_inode;
692 nd->flags |= LOOKUP_JUMPED;
693}
694
695static inline void put_link(struct nameidata *nd, struct path *link, void *cookie)
696{
697 struct inode *inode = link->dentry->d_inode;
698 if (inode->i_op->put_link)
699 inode->i_op->put_link(link->dentry, nd, cookie);
700 path_put(link);
701}
702
703int sysctl_protected_symlinks __read_mostly = 0;
704int sysctl_protected_hardlinks __read_mostly = 0;
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722static inline int may_follow_link(struct path *link, struct nameidata *nd)
723{
724 const struct inode *inode;
725 const struct inode *parent;
726
727 if (!sysctl_protected_symlinks)
728 return 0;
729
730
731 inode = link->dentry->d_inode;
732 if (uid_eq(current_cred()->fsuid, inode->i_uid))
733 return 0;
734
735
736 parent = nd->path.dentry->d_inode;
737 if ((parent->i_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH))
738 return 0;
739
740
741 if (uid_eq(parent->i_uid, inode->i_uid))
742 return 0;
743
744 audit_log_link_denied("follow_link", link);
745 path_put_conditional(link, nd);
746 path_put(&nd->path);
747 return -EACCES;
748}
749
750
751
752
753
754
755
756
757
758
759
760
761
762static bool safe_hardlink_source(struct inode *inode)
763{
764 umode_t mode = inode->i_mode;
765
766
767 if (!S_ISREG(mode))
768 return false;
769
770
771 if (mode & S_ISUID)
772 return false;
773
774
775 if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
776 return false;
777
778
779 if (inode_permission(inode, MAY_READ | MAY_WRITE))
780 return false;
781
782 return true;
783}
784
785
786
787
788
789
790
791
792
793
794
795
796
797static int may_linkat(struct path *link)
798{
799 const struct cred *cred;
800 struct inode *inode;
801
802 if (!sysctl_protected_hardlinks)
803 return 0;
804
805 cred = current_cred();
806 inode = link->dentry->d_inode;
807
808
809
810
811 if (uid_eq(cred->fsuid, inode->i_uid) || safe_hardlink_source(inode) ||
812 capable(CAP_FOWNER))
813 return 0;
814
815 audit_log_link_denied("linkat", link);
816 return -EPERM;
817}
818
819static __always_inline int
820follow_link(struct path *link, struct nameidata *nd, void **p)
821{
822 struct dentry *dentry = link->dentry;
823 int error;
824 char *s;
825
826 BUG_ON(nd->flags & LOOKUP_RCU);
827
828 if (link->mnt == nd->path.mnt)
829 mntget(link->mnt);
830
831 error = -ELOOP;
832 if (unlikely(current->total_link_count >= 40))
833 goto out_put_nd_path;
834
835 cond_resched();
836 current->total_link_count++;
837
838 touch_atime(link);
839 nd_set_link(nd, NULL);
840
841 error = security_inode_follow_link(link->dentry, nd);
842 if (error)
843 goto out_put_nd_path;
844
845 nd->last_type = LAST_BIND;
846 *p = dentry->d_inode->i_op->follow_link(dentry, nd);
847 error = PTR_ERR(*p);
848 if (IS_ERR(*p))
849 goto out_put_nd_path;
850
851 error = 0;
852 s = nd_get_link(nd);
853 if (s) {
854 if (unlikely(IS_ERR(s))) {
855 path_put(&nd->path);
856 put_link(nd, link, *p);
857 return PTR_ERR(s);
858 }
859 if (*s == '/') {
860 set_root(nd);
861 path_put(&nd->path);
862 nd->path = nd->root;
863 path_get(&nd->root);
864 nd->flags |= LOOKUP_JUMPED;
865 }
866 nd->inode = nd->path.dentry->d_inode;
867 error = link_path_walk(s, nd);
868 if (unlikely(error))
869 put_link(nd, link, *p);
870 }
871
872 return error;
873
874out_put_nd_path:
875 *p = NULL;
876 path_put(&nd->path);
877 path_put(link);
878 return error;
879}
880
881static int follow_up_rcu(struct path *path)
882{
883 struct mount *mnt = real_mount(path->mnt);
884 struct mount *parent;
885 struct dentry *mountpoint;
886
887 parent = mnt->mnt_parent;
888 if (&parent->mnt == path->mnt)
889 return 0;
890 mountpoint = mnt->mnt_mountpoint;
891 path->dentry = mountpoint;
892 path->mnt = &parent->mnt;
893 return 1;
894}
895
896
897
898
899
900
901
902
903
904
905
906int follow_up(struct path *path)
907{
908 struct mount *mnt = real_mount(path->mnt);
909 struct mount *parent;
910 struct dentry *mountpoint;
911
912 read_seqlock_excl(&mount_lock);
913 parent = mnt->mnt_parent;
914 if (parent == mnt) {
915 read_sequnlock_excl(&mount_lock);
916 return 0;
917 }
918 mntget(&parent->mnt);
919 mountpoint = dget(mnt->mnt_mountpoint);
920 read_sequnlock_excl(&mount_lock);
921 dput(path->dentry);
922 path->dentry = mountpoint;
923 mntput(path->mnt);
924 path->mnt = &parent->mnt;
925 return 1;
926}
927
928
929
930
931
932
933static int follow_automount(struct path *path, unsigned flags,
934 bool *need_mntput)
935{
936 struct vfsmount *mnt;
937 int err;
938
939 if (!path->dentry->d_op || !path->dentry->d_op->d_automount)
940 return -EREMOTE;
941
942
943
944
945
946
947
948
949
950
951
952
953 if (!(flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
954 LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
955 path->dentry->d_inode)
956 return -EISDIR;
957
958 current->total_link_count++;
959 if (current->total_link_count >= 40)
960 return -ELOOP;
961
962 mnt = path->dentry->d_op->d_automount(path);
963 if (IS_ERR(mnt)) {
964
965
966
967
968
969
970
971
972
973 if (PTR_ERR(mnt) == -EISDIR && (flags & LOOKUP_PARENT))
974 return -EREMOTE;
975 return PTR_ERR(mnt);
976 }
977
978 if (!mnt)
979 return 0;
980
981 if (!*need_mntput) {
982
983 mntget(path->mnt);
984 *need_mntput = true;
985 }
986 err = finish_automount(mnt, path);
987
988 switch (err) {
989 case -EBUSY:
990
991 return 0;
992 case 0:
993 path_put(path);
994 path->mnt = mnt;
995 path->dentry = dget(mnt->mnt_root);
996 return 0;
997 default:
998 return err;
999 }
1000
1001}
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013static int follow_managed(struct path *path, unsigned flags)
1014{
1015 struct vfsmount *mnt = path->mnt;
1016 unsigned managed;
1017 bool need_mntput = false;
1018 int ret = 0;
1019
1020
1021
1022
1023 while (managed = ACCESS_ONCE(path->dentry->d_flags),
1024 managed &= DCACHE_MANAGED_DENTRY,
1025 unlikely(managed != 0)) {
1026
1027
1028 if (managed & DCACHE_MANAGE_TRANSIT) {
1029 BUG_ON(!path->dentry->d_op);
1030 BUG_ON(!path->dentry->d_op->d_manage);
1031 ret = path->dentry->d_op->d_manage(path->dentry, false);
1032 if (ret < 0)
1033 break;
1034 }
1035
1036
1037 if (managed & DCACHE_MOUNTED) {
1038 struct vfsmount *mounted = lookup_mnt(path);
1039 if (mounted) {
1040 dput(path->dentry);
1041 if (need_mntput)
1042 mntput(path->mnt);
1043 path->mnt = mounted;
1044 path->dentry = dget(mounted->mnt_root);
1045 need_mntput = true;
1046 continue;
1047 }
1048
1049
1050
1051
1052
1053 }
1054
1055
1056 if (managed & DCACHE_NEED_AUTOMOUNT) {
1057 ret = follow_automount(path, flags, &need_mntput);
1058 if (ret < 0)
1059 break;
1060 continue;
1061 }
1062
1063
1064 break;
1065 }
1066
1067 if (need_mntput && path->mnt == mnt)
1068 mntput(path->mnt);
1069 if (ret == -EISDIR)
1070 ret = 0;
1071 return ret < 0 ? ret : need_mntput;
1072}
1073
1074int follow_down_one(struct path *path)
1075{
1076 struct vfsmount *mounted;
1077
1078 mounted = lookup_mnt(path);
1079 if (mounted) {
1080 dput(path->dentry);
1081 mntput(path->mnt);
1082 path->mnt = mounted;
1083 path->dentry = dget(mounted->mnt_root);
1084 return 1;
1085 }
1086 return 0;
1087}
1088
1089static inline bool managed_dentry_might_block(struct dentry *dentry)
1090{
1091 return (dentry->d_flags & DCACHE_MANAGE_TRANSIT &&
1092 dentry->d_op->d_manage(dentry, true) < 0);
1093}
1094
1095
1096
1097
1098
1099static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
1100 struct inode **inode)
1101{
1102 for (;;) {
1103 struct mount *mounted;
1104
1105
1106
1107
1108 if (unlikely(managed_dentry_might_block(path->dentry)))
1109 return false;
1110
1111 if (!d_mountpoint(path->dentry))
1112 return true;
1113
1114 mounted = __lookup_mnt(path->mnt, path->dentry);
1115 if (!mounted)
1116 break;
1117 path->mnt = &mounted->mnt;
1118 path->dentry = mounted->mnt.mnt_root;
1119 nd->flags |= LOOKUP_JUMPED;
1120 nd->seq = read_seqcount_begin(&path->dentry->d_seq);
1121
1122
1123
1124
1125
1126 *inode = path->dentry->d_inode;
1127 }
1128 return read_seqretry(&mount_lock, nd->m_seq);
1129}
1130
1131static int follow_dotdot_rcu(struct nameidata *nd)
1132{
1133 set_root_rcu(nd);
1134
1135 while (1) {
1136 if (nd->path.dentry == nd->root.dentry &&
1137 nd->path.mnt == nd->root.mnt) {
1138 break;
1139 }
1140 if (nd->path.dentry != nd->path.mnt->mnt_root) {
1141 struct dentry *old = nd->path.dentry;
1142 struct dentry *parent = old->d_parent;
1143 unsigned seq;
1144
1145 seq = read_seqcount_begin(&parent->d_seq);
1146 if (read_seqcount_retry(&old->d_seq, nd->seq))
1147 goto failed;
1148 nd->path.dentry = parent;
1149 nd->seq = seq;
1150 break;
1151 }
1152 if (!follow_up_rcu(&nd->path))
1153 break;
1154 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
1155 }
1156 while (d_mountpoint(nd->path.dentry)) {
1157 struct mount *mounted;
1158 mounted = __lookup_mnt(nd->path.mnt, nd->path.dentry);
1159 if (!mounted)
1160 break;
1161 nd->path.mnt = &mounted->mnt;
1162 nd->path.dentry = mounted->mnt.mnt_root;
1163 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
1164 if (!read_seqretry(&mount_lock, nd->m_seq))
1165 goto failed;
1166 }
1167 nd->inode = nd->path.dentry->d_inode;
1168 return 0;
1169
1170failed:
1171 nd->flags &= ~LOOKUP_RCU;
1172 if (!(nd->flags & LOOKUP_ROOT))
1173 nd->root.mnt = NULL;
1174 rcu_read_unlock();
1175 return -ECHILD;
1176}
1177
1178
1179
1180
1181
1182
1183int follow_down(struct path *path)
1184{
1185 unsigned managed;
1186 int ret;
1187
1188 while (managed = ACCESS_ONCE(path->dentry->d_flags),
1189 unlikely(managed & DCACHE_MANAGED_DENTRY)) {
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200 if (managed & DCACHE_MANAGE_TRANSIT) {
1201 BUG_ON(!path->dentry->d_op);
1202 BUG_ON(!path->dentry->d_op->d_manage);
1203 ret = path->dentry->d_op->d_manage(
1204 path->dentry, false);
1205 if (ret < 0)
1206 return ret == -EISDIR ? 0 : ret;
1207 }
1208
1209
1210 if (managed & DCACHE_MOUNTED) {
1211 struct vfsmount *mounted = lookup_mnt(path);
1212 if (!mounted)
1213 break;
1214 dput(path->dentry);
1215 mntput(path->mnt);
1216 path->mnt = mounted;
1217 path->dentry = dget(mounted->mnt_root);
1218 continue;
1219 }
1220
1221
1222 break;
1223 }
1224 return 0;
1225}
1226
1227
1228
1229
1230static void follow_mount(struct path *path)
1231{
1232 while (d_mountpoint(path->dentry)) {
1233 struct vfsmount *mounted = lookup_mnt(path);
1234 if (!mounted)
1235 break;
1236 dput(path->dentry);
1237 mntput(path->mnt);
1238 path->mnt = mounted;
1239 path->dentry = dget(mounted->mnt_root);
1240 }
1241}
1242
1243static void follow_dotdot(struct nameidata *nd)
1244{
1245 set_root(nd);
1246
1247 while(1) {
1248 struct dentry *old = nd->path.dentry;
1249
1250 if (nd->path.dentry == nd->root.dentry &&
1251 nd->path.mnt == nd->root.mnt) {
1252 break;
1253 }
1254 if (nd->path.dentry != nd->path.mnt->mnt_root) {
1255
1256 nd->path.dentry = dget_parent(nd->path.dentry);
1257 dput(old);
1258 break;
1259 }
1260 if (!follow_up(&nd->path))
1261 break;
1262 }
1263 follow_mount(&nd->path);
1264 nd->inode = nd->path.dentry->d_inode;
1265}
1266
1267
1268
1269
1270
1271
1272
1273
1274static struct dentry *lookup_dcache(struct qstr *name, struct dentry *dir,
1275 unsigned int flags, bool *need_lookup)
1276{
1277 struct dentry *dentry;
1278 int error;
1279
1280 *need_lookup = false;
1281 dentry = d_lookup(dir, name);
1282 if (dentry) {
1283 if (dentry->d_flags & DCACHE_OP_REVALIDATE) {
1284 error = d_revalidate(dentry, flags);
1285 if (unlikely(error <= 0)) {
1286 if (error < 0) {
1287 dput(dentry);
1288 return ERR_PTR(error);
1289 } else if (!d_invalidate(dentry)) {
1290 dput(dentry);
1291 dentry = NULL;
1292 }
1293 }
1294 }
1295 }
1296
1297 if (!dentry) {
1298 dentry = d_alloc(dir, name);
1299 if (unlikely(!dentry))
1300 return ERR_PTR(-ENOMEM);
1301
1302 *need_lookup = true;
1303 }
1304 return dentry;
1305}
1306
1307
1308
1309
1310
1311
1312
1313static struct dentry *lookup_real(struct inode *dir, struct dentry *dentry,
1314 unsigned int flags)
1315{
1316 struct dentry *old;
1317
1318
1319 if (unlikely(IS_DEADDIR(dir))) {
1320 dput(dentry);
1321 return ERR_PTR(-ENOENT);
1322 }
1323
1324 old = dir->i_op->lookup(dir, dentry, flags);
1325 if (unlikely(old)) {
1326 dput(dentry);
1327 dentry = old;
1328 }
1329 return dentry;
1330}
1331
1332static struct dentry *__lookup_hash(struct qstr *name,
1333 struct dentry *base, unsigned int flags)
1334{
1335 bool need_lookup;
1336 struct dentry *dentry;
1337
1338 dentry = lookup_dcache(name, base, flags, &need_lookup);
1339 if (!need_lookup)
1340 return dentry;
1341
1342 return lookup_real(base->d_inode, dentry, flags);
1343}
1344
1345
1346
1347
1348
1349
1350static int lookup_fast(struct nameidata *nd,
1351 struct path *path, struct inode **inode)
1352{
1353 struct vfsmount *mnt = nd->path.mnt;
1354 struct dentry *dentry, *parent = nd->path.dentry;
1355 int need_reval = 1;
1356 int status = 1;
1357 int err;
1358
1359
1360
1361
1362
1363
1364 if (nd->flags & LOOKUP_RCU) {
1365 unsigned seq;
1366 dentry = __d_lookup_rcu(parent, &nd->last, &seq);
1367 if (!dentry)
1368 goto unlazy;
1369
1370
1371
1372
1373
1374 *inode = dentry->d_inode;
1375 if (read_seqcount_retry(&dentry->d_seq, seq))
1376 return -ECHILD;
1377
1378
1379
1380
1381
1382
1383
1384
1385 if (__read_seqcount_retry(&parent->d_seq, nd->seq))
1386 return -ECHILD;
1387 nd->seq = seq;
1388
1389 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE)) {
1390 status = d_revalidate(dentry, nd->flags);
1391 if (unlikely(status <= 0)) {
1392 if (status != -ECHILD)
1393 need_reval = 0;
1394 goto unlazy;
1395 }
1396 }
1397 path->mnt = mnt;
1398 path->dentry = dentry;
1399 if (unlikely(!__follow_mount_rcu(nd, path, inode)))
1400 goto unlazy;
1401 if (unlikely(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT))
1402 goto unlazy;
1403 return 0;
1404unlazy:
1405 if (unlazy_walk(nd, dentry))
1406 return -ECHILD;
1407 } else {
1408 dentry = __d_lookup(parent, &nd->last);
1409 }
1410
1411 if (unlikely(!dentry))
1412 goto need_lookup;
1413
1414 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE) && need_reval)
1415 status = d_revalidate(dentry, nd->flags);
1416 if (unlikely(status <= 0)) {
1417 if (status < 0) {
1418 dput(dentry);
1419 return status;
1420 }
1421 if (!d_invalidate(dentry)) {
1422 dput(dentry);
1423 goto need_lookup;
1424 }
1425 }
1426
1427 path->mnt = mnt;
1428 path->dentry = dentry;
1429 err = follow_managed(path, nd->flags);
1430 if (unlikely(err < 0)) {
1431 path_put_conditional(path, nd);
1432 return err;
1433 }
1434 if (err)
1435 nd->flags |= LOOKUP_JUMPED;
1436 *inode = path->dentry->d_inode;
1437 return 0;
1438
1439need_lookup:
1440 return 1;
1441}
1442
1443
1444static int lookup_slow(struct nameidata *nd, struct path *path)
1445{
1446 struct dentry *dentry, *parent;
1447 int err;
1448
1449 parent = nd->path.dentry;
1450 BUG_ON(nd->inode != parent->d_inode);
1451
1452 mutex_lock(&parent->d_inode->i_mutex);
1453 dentry = __lookup_hash(&nd->last, parent, nd->flags);
1454 mutex_unlock(&parent->d_inode->i_mutex);
1455 if (IS_ERR(dentry))
1456 return PTR_ERR(dentry);
1457 path->mnt = nd->path.mnt;
1458 path->dentry = dentry;
1459 err = follow_managed(path, nd->flags);
1460 if (unlikely(err < 0)) {
1461 path_put_conditional(path, nd);
1462 return err;
1463 }
1464 if (err)
1465 nd->flags |= LOOKUP_JUMPED;
1466 return 0;
1467}
1468
1469static inline int may_lookup(struct nameidata *nd)
1470{
1471 if (nd->flags & LOOKUP_RCU) {
1472 int err = inode_permission(nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1473 if (err != -ECHILD)
1474 return err;
1475 if (unlazy_walk(nd, NULL))
1476 return -ECHILD;
1477 }
1478 return inode_permission(nd->inode, MAY_EXEC);
1479}
1480
1481static inline int handle_dots(struct nameidata *nd, int type)
1482{
1483 if (type == LAST_DOTDOT) {
1484 if (nd->flags & LOOKUP_RCU) {
1485 if (follow_dotdot_rcu(nd))
1486 return -ECHILD;
1487 } else
1488 follow_dotdot(nd);
1489 }
1490 return 0;
1491}
1492
1493static void terminate_walk(struct nameidata *nd)
1494{
1495 if (!(nd->flags & LOOKUP_RCU)) {
1496 path_put(&nd->path);
1497 } else {
1498 nd->flags &= ~LOOKUP_RCU;
1499 if (!(nd->flags & LOOKUP_ROOT))
1500 nd->root.mnt = NULL;
1501 rcu_read_unlock();
1502 }
1503}
1504
1505
1506
1507
1508
1509
1510
1511static inline int should_follow_link(struct dentry *dentry, int follow)
1512{
1513 return unlikely(d_is_symlink(dentry)) ? follow : 0;
1514}
1515
1516static inline int walk_component(struct nameidata *nd, struct path *path,
1517 int follow)
1518{
1519 struct inode *inode;
1520 int err;
1521
1522
1523
1524
1525
1526 if (unlikely(nd->last_type != LAST_NORM))
1527 return handle_dots(nd, nd->last_type);
1528 err = lookup_fast(nd, path, &inode);
1529 if (unlikely(err)) {
1530 if (err < 0)
1531 goto out_err;
1532
1533 err = lookup_slow(nd, path);
1534 if (err < 0)
1535 goto out_err;
1536
1537 inode = path->dentry->d_inode;
1538 }
1539 err = -ENOENT;
1540 if (!inode)
1541 goto out_path_put;
1542
1543 if (should_follow_link(path->dentry, follow)) {
1544 if (nd->flags & LOOKUP_RCU) {
1545 if (unlikely(unlazy_walk(nd, path->dentry))) {
1546 err = -ECHILD;
1547 goto out_err;
1548 }
1549 }
1550 BUG_ON(inode != path->dentry->d_inode);
1551 return 1;
1552 }
1553 path_to_nameidata(path, nd);
1554 nd->inode = inode;
1555 return 0;
1556
1557out_path_put:
1558 path_to_nameidata(path, nd);
1559out_err:
1560 terminate_walk(nd);
1561 return err;
1562}
1563
1564
1565
1566
1567
1568
1569
1570
1571static inline int nested_symlink(struct path *path, struct nameidata *nd)
1572{
1573 int res;
1574
1575 if (unlikely(current->link_count >= MAX_NESTED_LINKS)) {
1576 path_put_conditional(path, nd);
1577 path_put(&nd->path);
1578 return -ELOOP;
1579 }
1580 BUG_ON(nd->depth >= MAX_NESTED_LINKS);
1581
1582 nd->depth++;
1583 current->link_count++;
1584
1585 do {
1586 struct path link = *path;
1587 void *cookie;
1588
1589 res = follow_link(&link, nd, &cookie);
1590 if (res)
1591 break;
1592 res = walk_component(nd, path, LOOKUP_FOLLOW);
1593 put_link(nd, &link, cookie);
1594 } while (res > 0);
1595
1596 current->link_count--;
1597 nd->depth--;
1598 return res;
1599}
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618#ifdef CONFIG_DCACHE_WORD_ACCESS
1619
1620#include <asm/word-at-a-time.h>
1621
1622#ifdef CONFIG_64BIT
1623
1624static inline unsigned int fold_hash(unsigned long hash)
1625{
1626 hash += hash >> (8*sizeof(int));
1627 return hash;
1628}
1629
1630#else
1631
1632#define fold_hash(x) (x)
1633
1634#endif
1635
1636unsigned int full_name_hash(const unsigned char *name, unsigned int len)
1637{
1638 unsigned long a, mask;
1639 unsigned long hash = 0;
1640
1641 for (;;) {
1642 a = load_unaligned_zeropad(name);
1643 if (len < sizeof(unsigned long))
1644 break;
1645 hash += a;
1646 hash *= 9;
1647 name += sizeof(unsigned long);
1648 len -= sizeof(unsigned long);
1649 if (!len)
1650 goto done;
1651 }
1652 mask = bytemask_from_count(len);
1653 hash += mask & a;
1654done:
1655 return fold_hash(hash);
1656}
1657EXPORT_SYMBOL(full_name_hash);
1658
1659
1660
1661
1662
1663static inline unsigned long hash_name(const char *name, unsigned int *hashp)
1664{
1665 unsigned long a, b, adata, bdata, mask, hash, len;
1666 const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
1667
1668 hash = a = 0;
1669 len = -sizeof(unsigned long);
1670 do {
1671 hash = (hash + a) * 9;
1672 len += sizeof(unsigned long);
1673 a = load_unaligned_zeropad(name+len);
1674 b = a ^ REPEAT_BYTE('/');
1675 } while (!(has_zero(a, &adata, &constants) | has_zero(b, &bdata, &constants)));
1676
1677 adata = prep_zero_mask(a, adata, &constants);
1678 bdata = prep_zero_mask(b, bdata, &constants);
1679
1680 mask = create_zero_mask(adata | bdata);
1681
1682 hash += a & zero_bytemask(mask);
1683 *hashp = fold_hash(hash);
1684
1685 return len + find_zero(mask);
1686}
1687
1688#else
1689
1690unsigned int full_name_hash(const unsigned char *name, unsigned int len)
1691{
1692 unsigned long hash = init_name_hash();
1693 while (len--)
1694 hash = partial_name_hash(*name++, hash);
1695 return end_name_hash(hash);
1696}
1697EXPORT_SYMBOL(full_name_hash);
1698
1699
1700
1701
1702
1703static inline unsigned long hash_name(const char *name, unsigned int *hashp)
1704{
1705 unsigned long hash = init_name_hash();
1706 unsigned long len = 0, c;
1707
1708 c = (unsigned char)*name;
1709 do {
1710 len++;
1711 hash = partial_name_hash(c, hash);
1712 c = (unsigned char)name[len];
1713 } while (c && c != '/');
1714 *hashp = end_name_hash(hash);
1715 return len;
1716}
1717
1718#endif
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728static int link_path_walk(const char *name, struct nameidata *nd)
1729{
1730 struct path next;
1731 int err;
1732
1733 while (*name=='/')
1734 name++;
1735 if (!*name)
1736 return 0;
1737
1738
1739 for(;;) {
1740 struct qstr this;
1741 long len;
1742 int type;
1743
1744 err = may_lookup(nd);
1745 if (err)
1746 break;
1747
1748 len = hash_name(name, &this.hash);
1749 this.name = name;
1750 this.len = len;
1751
1752 type = LAST_NORM;
1753 if (name[0] == '.') switch (len) {
1754 case 2:
1755 if (name[1] == '.') {
1756 type = LAST_DOTDOT;
1757 nd->flags |= LOOKUP_JUMPED;
1758 }
1759 break;
1760 case 1:
1761 type = LAST_DOT;
1762 }
1763 if (likely(type == LAST_NORM)) {
1764 struct dentry *parent = nd->path.dentry;
1765 nd->flags &= ~LOOKUP_JUMPED;
1766 if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
1767 err = parent->d_op->d_hash(parent, &this);
1768 if (err < 0)
1769 break;
1770 }
1771 }
1772
1773 nd->last = this;
1774 nd->last_type = type;
1775
1776 if (!name[len])
1777 return 0;
1778
1779
1780
1781
1782 do {
1783 len++;
1784 } while (unlikely(name[len] == '/'));
1785 if (!name[len])
1786 return 0;
1787
1788 name += len;
1789
1790 err = walk_component(nd, &next, LOOKUP_FOLLOW);
1791 if (err < 0)
1792 return err;
1793
1794 if (err) {
1795 err = nested_symlink(&next, nd);
1796 if (err)
1797 return err;
1798 }
1799 if (!d_is_directory(nd->path.dentry)) {
1800 err = -ENOTDIR;
1801 break;
1802 }
1803 }
1804 terminate_walk(nd);
1805 return err;
1806}
1807
1808static int path_init(int dfd, const char *name, unsigned int flags,
1809 struct nameidata *nd, struct file **fp)
1810{
1811 int retval = 0;
1812
1813 nd->last_type = LAST_ROOT;
1814 nd->flags = flags | LOOKUP_JUMPED;
1815 nd->depth = 0;
1816 if (flags & LOOKUP_ROOT) {
1817 struct dentry *root = nd->root.dentry;
1818 struct inode *inode = root->d_inode;
1819 if (*name) {
1820 if (!d_is_directory(root))
1821 return -ENOTDIR;
1822 retval = inode_permission(inode, MAY_EXEC);
1823 if (retval)
1824 return retval;
1825 }
1826 nd->path = nd->root;
1827 nd->inode = inode;
1828 if (flags & LOOKUP_RCU) {
1829 rcu_read_lock();
1830 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
1831 nd->m_seq = read_seqbegin(&mount_lock);
1832 } else {
1833 path_get(&nd->path);
1834 }
1835 return 0;
1836 }
1837
1838 nd->root.mnt = NULL;
1839
1840 nd->m_seq = read_seqbegin(&mount_lock);
1841 if (*name=='/') {
1842 if (flags & LOOKUP_RCU) {
1843 rcu_read_lock();
1844 set_root_rcu(nd);
1845 } else {
1846 set_root(nd);
1847 path_get(&nd->root);
1848 }
1849 nd->path = nd->root;
1850 } else if (dfd == AT_FDCWD) {
1851 if (flags & LOOKUP_RCU) {
1852 struct fs_struct *fs = current->fs;
1853 unsigned seq;
1854
1855 rcu_read_lock();
1856
1857 do {
1858 seq = read_seqcount_begin(&fs->seq);
1859 nd->path = fs->pwd;
1860 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
1861 } while (read_seqcount_retry(&fs->seq, seq));
1862 } else {
1863 get_fs_pwd(current->fs, &nd->path);
1864 }
1865 } else {
1866
1867 struct fd f = fdget_raw(dfd);
1868 struct dentry *dentry;
1869
1870 if (!f.file)
1871 return -EBADF;
1872
1873 dentry = f.file->f_path.dentry;
1874
1875 if (*name) {
1876 if (!d_is_directory(dentry)) {
1877 fdput(f);
1878 return -ENOTDIR;
1879 }
1880 }
1881
1882 nd->path = f.file->f_path;
1883 if (flags & LOOKUP_RCU) {
1884 if (f.flags & FDPUT_FPUT)
1885 *fp = f.file;
1886 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
1887 rcu_read_lock();
1888 } else {
1889 path_get(&nd->path);
1890 fdput(f);
1891 }
1892 }
1893
1894 nd->inode = nd->path.dentry->d_inode;
1895 return 0;
1896}
1897
1898static inline int lookup_last(struct nameidata *nd, struct path *path)
1899{
1900 if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
1901 nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
1902
1903 nd->flags &= ~LOOKUP_PARENT;
1904 return walk_component(nd, path, nd->flags & LOOKUP_FOLLOW);
1905}
1906
1907
1908static int path_lookupat(int dfd, const char *name,
1909 unsigned int flags, struct nameidata *nd)
1910{
1911 struct file *base = NULL;
1912 struct path path;
1913 int err;
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929 err = path_init(dfd, name, flags | LOOKUP_PARENT, nd, &base);
1930
1931 if (unlikely(err))
1932 return err;
1933
1934 current->total_link_count = 0;
1935 err = link_path_walk(name, nd);
1936
1937 if (!err && !(flags & LOOKUP_PARENT)) {
1938 err = lookup_last(nd, &path);
1939 while (err > 0) {
1940 void *cookie;
1941 struct path link = path;
1942 err = may_follow_link(&link, nd);
1943 if (unlikely(err))
1944 break;
1945 nd->flags |= LOOKUP_PARENT;
1946 err = follow_link(&link, nd, &cookie);
1947 if (err)
1948 break;
1949 err = lookup_last(nd, &path);
1950 put_link(nd, &link, cookie);
1951 }
1952 }
1953
1954 if (!err)
1955 err = complete_walk(nd);
1956
1957 if (!err && nd->flags & LOOKUP_DIRECTORY) {
1958 if (!d_is_directory(nd->path.dentry)) {
1959 path_put(&nd->path);
1960 err = -ENOTDIR;
1961 }
1962 }
1963
1964 if (base)
1965 fput(base);
1966
1967 if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT)) {
1968 path_put(&nd->root);
1969 nd->root.mnt = NULL;
1970 }
1971 return err;
1972}
1973
1974static int filename_lookup(int dfd, struct filename *name,
1975 unsigned int flags, struct nameidata *nd)
1976{
1977 int retval = path_lookupat(dfd, name->name, flags | LOOKUP_RCU, nd);
1978 if (unlikely(retval == -ECHILD))
1979 retval = path_lookupat(dfd, name->name, flags, nd);
1980 if (unlikely(retval == -ESTALE))
1981 retval = path_lookupat(dfd, name->name,
1982 flags | LOOKUP_REVAL, nd);
1983
1984 if (likely(!retval))
1985 audit_inode(name, nd->path.dentry, flags & LOOKUP_PARENT);
1986 return retval;
1987}
1988
1989static int do_path_lookup(int dfd, const char *name,
1990 unsigned int flags, struct nameidata *nd)
1991{
1992 struct filename filename = { .name = name };
1993
1994 return filename_lookup(dfd, &filename, flags, nd);
1995}
1996
1997
1998struct dentry *kern_path_locked(const char *name, struct path *path)
1999{
2000 struct nameidata nd;
2001 struct dentry *d;
2002 int err = do_path_lookup(AT_FDCWD, name, LOOKUP_PARENT, &nd);
2003 if (err)
2004 return ERR_PTR(err);
2005 if (nd.last_type != LAST_NORM) {
2006 path_put(&nd.path);
2007 return ERR_PTR(-EINVAL);
2008 }
2009 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
2010 d = __lookup_hash(&nd.last, nd.path.dentry, 0);
2011 if (IS_ERR(d)) {
2012 mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
2013 path_put(&nd.path);
2014 return d;
2015 }
2016 *path = nd.path;
2017 return d;
2018}
2019
2020int kern_path(const char *name, unsigned int flags, struct path *path)
2021{
2022 struct nameidata nd;
2023 int res = do_path_lookup(AT_FDCWD, name, flags, &nd);
2024 if (!res)
2025 *path = nd.path;
2026 return res;
2027}
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
2038 const char *name, unsigned int flags,
2039 struct path *path)
2040{
2041 struct nameidata nd;
2042 int err;
2043 nd.root.dentry = dentry;
2044 nd.root.mnt = mnt;
2045 BUG_ON(flags & LOOKUP_PARENT);
2046
2047 err = do_path_lookup(AT_FDCWD, name, flags | LOOKUP_ROOT, &nd);
2048 if (!err)
2049 *path = nd.path;
2050 return err;
2051}
2052
2053
2054
2055
2056
2057
2058static struct dentry *lookup_hash(struct nameidata *nd)
2059{
2060 return __lookup_hash(&nd->last, nd->path.dentry, nd->flags);
2061}
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
2075{
2076 struct qstr this;
2077 unsigned int c;
2078 int err;
2079
2080 WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));
2081
2082 this.name = name;
2083 this.len = len;
2084 this.hash = full_name_hash(name, len);
2085 if (!len)
2086 return ERR_PTR(-EACCES);
2087
2088 if (unlikely(name[0] == '.')) {
2089 if (len < 2 || (len == 2 && name[1] == '.'))
2090 return ERR_PTR(-EACCES);
2091 }
2092
2093 while (len--) {
2094 c = *(const unsigned char *)name++;
2095 if (c == '/' || c == '\0')
2096 return ERR_PTR(-EACCES);
2097 }
2098
2099
2100
2101
2102 if (base->d_flags & DCACHE_OP_HASH) {
2103 int err = base->d_op->d_hash(base, &this);
2104 if (err < 0)
2105 return ERR_PTR(err);
2106 }
2107
2108 err = inode_permission(base->d_inode, MAY_EXEC);
2109 if (err)
2110 return ERR_PTR(err);
2111
2112 return __lookup_hash(&this, base, 0);
2113}
2114
2115int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
2116 struct path *path, int *empty)
2117{
2118 struct nameidata nd;
2119 struct filename *tmp = getname_flags(name, flags, empty);
2120 int err = PTR_ERR(tmp);
2121 if (!IS_ERR(tmp)) {
2122
2123 BUG_ON(flags & LOOKUP_PARENT);
2124
2125 err = filename_lookup(dfd, tmp, flags, &nd);
2126 putname(tmp);
2127 if (!err)
2128 *path = nd.path;
2129 }
2130 return err;
2131}
2132
2133int user_path_at(int dfd, const char __user *name, unsigned flags,
2134 struct path *path)
2135{
2136 return user_path_at_empty(dfd, name, flags, path, NULL);
2137}
2138
2139
2140
2141
2142
2143
2144
2145static struct filename *
2146user_path_parent(int dfd, const char __user *path, struct nameidata *nd,
2147 unsigned int flags)
2148{
2149 struct filename *s = getname(path);
2150 int error;
2151
2152
2153 flags &= LOOKUP_REVAL;
2154
2155 if (IS_ERR(s))
2156 return s;
2157
2158 error = filename_lookup(dfd, s, flags | LOOKUP_PARENT, nd);
2159 if (error) {
2160 putname(s);
2161 return ERR_PTR(error);
2162 }
2163
2164 return s;
2165}
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194static int
2195mountpoint_last(struct nameidata *nd, struct path *path)
2196{
2197 int error = 0;
2198 struct dentry *dentry;
2199 struct dentry *dir = nd->path.dentry;
2200
2201
2202 if (nd->flags & LOOKUP_RCU) {
2203 if (unlazy_walk(nd, NULL)) {
2204 error = -ECHILD;
2205 goto out;
2206 }
2207 }
2208
2209 nd->flags &= ~LOOKUP_PARENT;
2210
2211 if (unlikely(nd->last_type != LAST_NORM)) {
2212 error = handle_dots(nd, nd->last_type);
2213 if (error)
2214 goto out;
2215 dentry = dget(nd->path.dentry);
2216 goto done;
2217 }
2218
2219 mutex_lock(&dir->d_inode->i_mutex);
2220 dentry = d_lookup(dir, &nd->last);
2221 if (!dentry) {
2222
2223
2224
2225
2226
2227 dentry = d_alloc(dir, &nd->last);
2228 if (!dentry) {
2229 error = -ENOMEM;
2230 mutex_unlock(&dir->d_inode->i_mutex);
2231 goto out;
2232 }
2233 dentry = lookup_real(dir->d_inode, dentry, nd->flags);
2234 error = PTR_ERR(dentry);
2235 if (IS_ERR(dentry)) {
2236 mutex_unlock(&dir->d_inode->i_mutex);
2237 goto out;
2238 }
2239 }
2240 mutex_unlock(&dir->d_inode->i_mutex);
2241
2242done:
2243 if (!dentry->d_inode) {
2244 error = -ENOENT;
2245 dput(dentry);
2246 goto out;
2247 }
2248 path->dentry = dentry;
2249 path->mnt = mntget(nd->path.mnt);
2250 if (should_follow_link(dentry, nd->flags & LOOKUP_FOLLOW))
2251 return 1;
2252 follow_mount(path);
2253 error = 0;
2254out:
2255 terminate_walk(nd);
2256 return error;
2257}
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269static int
2270path_mountpoint(int dfd, const char *name, struct path *path, unsigned int flags)
2271{
2272 struct file *base = NULL;
2273 struct nameidata nd;
2274 int err;
2275
2276 err = path_init(dfd, name, flags | LOOKUP_PARENT, &nd, &base);
2277 if (unlikely(err))
2278 return err;
2279
2280 current->total_link_count = 0;
2281 err = link_path_walk(name, &nd);
2282 if (err)
2283 goto out;
2284
2285 err = mountpoint_last(&nd, path);
2286 while (err > 0) {
2287 void *cookie;
2288 struct path link = *path;
2289 err = may_follow_link(&link, &nd);
2290 if (unlikely(err))
2291 break;
2292 nd.flags |= LOOKUP_PARENT;
2293 err = follow_link(&link, &nd, &cookie);
2294 if (err)
2295 break;
2296 err = mountpoint_last(&nd, path);
2297 put_link(&nd, &link, cookie);
2298 }
2299out:
2300 if (base)
2301 fput(base);
2302
2303 if (nd.root.mnt && !(nd.flags & LOOKUP_ROOT))
2304 path_put(&nd.root);
2305
2306 return err;
2307}
2308
2309static int
2310filename_mountpoint(int dfd, struct filename *s, struct path *path,
2311 unsigned int flags)
2312{
2313 int error = path_mountpoint(dfd, s->name, path, flags | LOOKUP_RCU);
2314 if (unlikely(error == -ECHILD))
2315 error = path_mountpoint(dfd, s->name, path, flags);
2316 if (unlikely(error == -ESTALE))
2317 error = path_mountpoint(dfd, s->name, path, flags | LOOKUP_REVAL);
2318 if (likely(!error))
2319 audit_inode(s, path->dentry, 0);
2320 return error;
2321}
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337int
2338user_path_mountpoint_at(int dfd, const char __user *name, unsigned int flags,
2339 struct path *path)
2340{
2341 struct filename *s = getname(name);
2342 int error;
2343 if (IS_ERR(s))
2344 return PTR_ERR(s);
2345 error = filename_mountpoint(dfd, s, path, flags);
2346 putname(s);
2347 return error;
2348}
2349
2350int
2351kern_path_mountpoint(int dfd, const char *name, struct path *path,
2352 unsigned int flags)
2353{
2354 struct filename s = {.name = name};
2355 return filename_mountpoint(dfd, &s, path, flags);
2356}
2357EXPORT_SYMBOL(kern_path_mountpoint);
2358
2359
2360
2361
2362
2363static inline int check_sticky(struct inode *dir, struct inode *inode)
2364{
2365 kuid_t fsuid = current_fsuid();
2366
2367 if (!(dir->i_mode & S_ISVTX))
2368 return 0;
2369 if (uid_eq(inode->i_uid, fsuid))
2370 return 0;
2371 if (uid_eq(dir->i_uid, fsuid))
2372 return 0;
2373 return !inode_capable(inode, CAP_FOWNER);
2374}
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395static int may_delete(struct inode *dir, struct dentry *victim, bool isdir)
2396{
2397 struct inode *inode = victim->d_inode;
2398 int error;
2399
2400 if (d_is_negative(victim))
2401 return -ENOENT;
2402 BUG_ON(!inode);
2403
2404 BUG_ON(victim->d_parent->d_inode != dir);
2405 audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
2406
2407 error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
2408 if (error)
2409 return error;
2410 if (IS_APPEND(dir))
2411 return -EPERM;
2412
2413 if (check_sticky(dir, inode) || IS_APPEND(inode) ||
2414 IS_IMMUTABLE(inode) || IS_SWAPFILE(inode))
2415 return -EPERM;
2416 if (isdir) {
2417 if (!d_is_directory(victim) && !d_is_autodir(victim))
2418 return -ENOTDIR;
2419 if (IS_ROOT(victim))
2420 return -EBUSY;
2421 } else if (d_is_directory(victim) || d_is_autodir(victim))
2422 return -EISDIR;
2423 if (IS_DEADDIR(dir))
2424 return -ENOENT;
2425 if (victim->d_flags & DCACHE_NFSFS_RENAMED)
2426 return -EBUSY;
2427 return 0;
2428}
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438static inline int may_create(struct inode *dir, struct dentry *child)
2439{
2440 audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
2441 if (child->d_inode)
2442 return -EEXIST;
2443 if (IS_DEADDIR(dir))
2444 return -ENOENT;
2445 return inode_permission(dir, MAY_WRITE | MAY_EXEC);
2446}
2447
2448
2449
2450
2451struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
2452{
2453 struct dentry *p;
2454
2455 if (p1 == p2) {
2456 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
2457 return NULL;
2458 }
2459
2460 mutex_lock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
2461
2462 p = d_ancestor(p2, p1);
2463 if (p) {
2464 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_PARENT);
2465 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_CHILD);
2466 return p;
2467 }
2468
2469 p = d_ancestor(p1, p2);
2470 if (p) {
2471 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
2472 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
2473 return p;
2474 }
2475
2476 mutex_lock_nested(&p1->d_inode->i_mutex, I_MUTEX_PARENT);
2477 mutex_lock_nested(&p2->d_inode->i_mutex, I_MUTEX_CHILD);
2478 return NULL;
2479}
2480
2481void unlock_rename(struct dentry *p1, struct dentry *p2)
2482{
2483 mutex_unlock(&p1->d_inode->i_mutex);
2484 if (p1 != p2) {
2485 mutex_unlock(&p2->d_inode->i_mutex);
2486 mutex_unlock(&p1->d_inode->i_sb->s_vfs_rename_mutex);
2487 }
2488}
2489
2490int vfs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
2491 bool want_excl)
2492{
2493 int error = may_create(dir, dentry);
2494 if (error)
2495 return error;
2496
2497 if (!dir->i_op->create)
2498 return -EACCES;
2499 mode &= S_IALLUGO;
2500 mode |= S_IFREG;
2501 error = security_inode_create(dir, dentry, mode);
2502 if (error)
2503 return error;
2504 error = dir->i_op->create(dir, dentry, mode, want_excl);
2505 if (!error)
2506 fsnotify_create(dir, dentry);
2507 return error;
2508}
2509
2510static int may_open(struct path *path, int acc_mode, int flag)
2511{
2512 struct dentry *dentry = path->dentry;
2513 struct inode *inode = dentry->d_inode;
2514 int error;
2515
2516
2517 if (!acc_mode)
2518 return 0;
2519
2520 if (!inode)
2521 return -ENOENT;
2522
2523 switch (inode->i_mode & S_IFMT) {
2524 case S_IFLNK:
2525 return -ELOOP;
2526 case S_IFDIR:
2527 if (acc_mode & MAY_WRITE)
2528 return -EISDIR;
2529 break;
2530 case S_IFBLK:
2531 case S_IFCHR:
2532 if (path->mnt->mnt_flags & MNT_NODEV)
2533 return -EACCES;
2534
2535 case S_IFIFO:
2536 case S_IFSOCK:
2537 flag &= ~O_TRUNC;
2538 break;
2539 }
2540
2541 error = inode_permission(inode, acc_mode);
2542 if (error)
2543 return error;
2544
2545
2546
2547
2548 if (IS_APPEND(inode)) {
2549 if ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
2550 return -EPERM;
2551 if (flag & O_TRUNC)
2552 return -EPERM;
2553 }
2554
2555
2556 if (flag & O_NOATIME && !inode_owner_or_capable(inode))
2557 return -EPERM;
2558
2559 return 0;
2560}
2561
2562static int handle_truncate(struct file *filp)
2563{
2564 struct path *path = &filp->f_path;
2565 struct inode *inode = path->dentry->d_inode;
2566 int error = get_write_access(inode);
2567 if (error)
2568 return error;
2569
2570
2571
2572 error = locks_verify_locked(inode);
2573 if (!error)
2574 error = security_path_truncate(path);
2575 if (!error) {
2576 error = do_truncate(path->dentry, 0,
2577 ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
2578 filp);
2579 }
2580 put_write_access(inode);
2581 return error;
2582}
2583
2584static inline int open_to_namei_flags(int flag)
2585{
2586 if ((flag & O_ACCMODE) == 3)
2587 flag--;
2588 return flag;
2589}
2590
2591static int may_o_create(struct path *dir, struct dentry *dentry, umode_t mode)
2592{
2593 int error = security_path_mknod(dir, dentry, mode, 0);
2594 if (error)
2595 return error;
2596
2597 error = inode_permission(dir->dentry->d_inode, MAY_WRITE | MAY_EXEC);
2598 if (error)
2599 return error;
2600
2601 return security_inode_create(dir->dentry->d_inode, dentry, mode);
2602}
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617static int atomic_open(struct nameidata *nd, struct dentry *dentry,
2618 struct path *path, struct file *file,
2619 const struct open_flags *op,
2620 bool got_write, bool need_lookup,
2621 int *opened)
2622{
2623 struct inode *dir = nd->path.dentry->d_inode;
2624 unsigned open_flag = open_to_namei_flags(op->open_flag);
2625 umode_t mode;
2626 int error;
2627 int acc_mode;
2628 int create_error = 0;
2629 struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
2630 bool excl;
2631
2632 BUG_ON(dentry->d_inode);
2633
2634
2635 if (unlikely(IS_DEADDIR(dir))) {
2636 error = -ENOENT;
2637 goto out;
2638 }
2639
2640 mode = op->mode;
2641 if ((open_flag & O_CREAT) && !IS_POSIXACL(dir))
2642 mode &= ~current_umask();
2643
2644 excl = (open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT);
2645 if (excl)
2646 open_flag &= ~O_TRUNC;
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657 if (((open_flag & (O_CREAT | O_TRUNC)) ||
2658 (open_flag & O_ACCMODE) != O_RDONLY) && unlikely(!got_write)) {
2659 if (!(open_flag & O_CREAT)) {
2660
2661
2662
2663
2664 goto no_open;
2665 } else if (open_flag & (O_EXCL | O_TRUNC)) {
2666
2667 create_error = -EROFS;
2668 goto no_open;
2669 } else {
2670
2671 create_error = -EROFS;
2672 open_flag &= ~O_CREAT;
2673 }
2674 }
2675
2676 if (open_flag & O_CREAT) {
2677 error = may_o_create(&nd->path, dentry, mode);
2678 if (error) {
2679 create_error = error;
2680 if (open_flag & O_EXCL)
2681 goto no_open;
2682 open_flag &= ~O_CREAT;
2683 }
2684 }
2685
2686 if (nd->flags & LOOKUP_DIRECTORY)
2687 open_flag |= O_DIRECTORY;
2688
2689 file->f_path.dentry = DENTRY_NOT_SET;
2690 file->f_path.mnt = nd->path.mnt;
2691 error = dir->i_op->atomic_open(dir, dentry, file, open_flag, mode,
2692 opened);
2693 if (error < 0) {
2694 if (create_error && error == -ENOENT)
2695 error = create_error;
2696 goto out;
2697 }
2698
2699 if (error) {
2700 if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
2701 error = -EIO;
2702 goto out;
2703 }
2704 if (file->f_path.dentry) {
2705 dput(dentry);
2706 dentry = file->f_path.dentry;
2707 }
2708 if (*opened & FILE_CREATED)
2709 fsnotify_create(dir, dentry);
2710 if (!dentry->d_inode) {
2711 WARN_ON(*opened & FILE_CREATED);
2712 if (create_error) {
2713 error = create_error;
2714 goto out;
2715 }
2716 } else {
2717 if (excl && !(*opened & FILE_CREATED)) {
2718 error = -EEXIST;
2719 goto out;
2720 }
2721 }
2722 goto looked_up;
2723 }
2724
2725
2726
2727
2728
2729 acc_mode = op->acc_mode;
2730 if (*opened & FILE_CREATED) {
2731 WARN_ON(!(open_flag & O_CREAT));
2732 fsnotify_create(dir, dentry);
2733 acc_mode = MAY_OPEN;
2734 }
2735 error = may_open(&file->f_path, acc_mode, open_flag);
2736 if (error)
2737 fput(file);
2738
2739out:
2740 dput(dentry);
2741 return error;
2742
2743no_open:
2744 if (need_lookup) {
2745 dentry = lookup_real(dir, dentry, nd->flags);
2746 if (IS_ERR(dentry))
2747 return PTR_ERR(dentry);
2748
2749 if (create_error) {
2750 int open_flag = op->open_flag;
2751
2752 error = create_error;
2753 if ((open_flag & O_EXCL)) {
2754 if (!dentry->d_inode)
2755 goto out;
2756 } else if (!dentry->d_inode) {
2757 goto out;
2758 } else if ((open_flag & O_TRUNC) &&
2759 S_ISREG(dentry->d_inode->i_mode)) {
2760 goto out;
2761 }
2762
2763 }
2764 }
2765looked_up:
2766 path->dentry = dentry;
2767 path->mnt = nd->path.mnt;
2768 return 1;
2769}
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789static int lookup_open(struct nameidata *nd, struct path *path,
2790 struct file *file,
2791 const struct open_flags *op,
2792 bool got_write, int *opened)
2793{
2794 struct dentry *dir = nd->path.dentry;
2795 struct inode *dir_inode = dir->d_inode;
2796 struct dentry *dentry;
2797 int error;
2798 bool need_lookup;
2799
2800 *opened &= ~FILE_CREATED;
2801 dentry = lookup_dcache(&nd->last, dir, nd->flags, &need_lookup);
2802 if (IS_ERR(dentry))
2803 return PTR_ERR(dentry);
2804
2805
2806 if (!need_lookup && dentry->d_inode)
2807 goto out_no_open;
2808
2809 if ((nd->flags & LOOKUP_OPEN) && dir_inode->i_op->atomic_open) {
2810 return atomic_open(nd, dentry, path, file, op, got_write,
2811 need_lookup, opened);
2812 }
2813
2814 if (need_lookup) {
2815 BUG_ON(dentry->d_inode);
2816
2817 dentry = lookup_real(dir_inode, dentry, nd->flags);
2818 if (IS_ERR(dentry))
2819 return PTR_ERR(dentry);
2820 }
2821
2822
2823 if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
2824 umode_t mode = op->mode;
2825 if (!IS_POSIXACL(dir->d_inode))
2826 mode &= ~current_umask();
2827
2828
2829
2830
2831
2832
2833
2834 if (!got_write) {
2835 error = -EROFS;
2836 goto out_dput;
2837 }
2838 *opened |= FILE_CREATED;
2839 error = security_path_mknod(&nd->path, dentry, mode, 0);
2840 if (error)
2841 goto out_dput;
2842 error = vfs_create(dir->d_inode, dentry, mode,
2843 nd->flags & LOOKUP_EXCL);
2844 if (error)
2845 goto out_dput;
2846 }
2847out_no_open:
2848 path->dentry = dentry;
2849 path->mnt = nd->path.mnt;
2850 return 1;
2851
2852out_dput:
2853 dput(dentry);
2854 return error;
2855}
2856
2857
2858
2859
2860static int do_last(struct nameidata *nd, struct path *path,
2861 struct file *file, const struct open_flags *op,
2862 int *opened, struct filename *name)
2863{
2864 struct dentry *dir = nd->path.dentry;
2865 int open_flag = op->open_flag;
2866 bool will_truncate = (open_flag & O_TRUNC) != 0;
2867 bool got_write = false;
2868 int acc_mode = op->acc_mode;
2869 struct inode *inode;
2870 bool symlink_ok = false;
2871 struct path save_parent = { .dentry = NULL, .mnt = NULL };
2872 bool retried = false;
2873 int error;
2874
2875 nd->flags &= ~LOOKUP_PARENT;
2876 nd->flags |= op->intent;
2877
2878 if (nd->last_type != LAST_NORM) {
2879 error = handle_dots(nd, nd->last_type);
2880 if (error)
2881 return error;
2882 goto finish_open;
2883 }
2884
2885 if (!(open_flag & O_CREAT)) {
2886 if (nd->last.name[nd->last.len])
2887 nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
2888 if (open_flag & O_PATH && !(nd->flags & LOOKUP_FOLLOW))
2889 symlink_ok = true;
2890
2891 error = lookup_fast(nd, path, &inode);
2892 if (likely(!error))
2893 goto finish_lookup;
2894
2895 if (error < 0)
2896 goto out;
2897
2898 BUG_ON(nd->inode != dir->d_inode);
2899 } else {
2900
2901
2902
2903
2904
2905
2906 error = complete_walk(nd);
2907 if (error)
2908 return error;
2909
2910 audit_inode(name, dir, LOOKUP_PARENT);
2911 error = -EISDIR;
2912
2913 if (nd->last.name[nd->last.len])
2914 goto out;
2915 }
2916
2917retry_lookup:
2918 if (op->open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
2919 error = mnt_want_write(nd->path.mnt);
2920 if (!error)
2921 got_write = true;
2922
2923
2924
2925
2926
2927 }
2928 mutex_lock(&dir->d_inode->i_mutex);
2929 error = lookup_open(nd, path, file, op, got_write, opened);
2930 mutex_unlock(&dir->d_inode->i_mutex);
2931
2932 if (error <= 0) {
2933 if (error)
2934 goto out;
2935
2936 if ((*opened & FILE_CREATED) ||
2937 !S_ISREG(file_inode(file)->i_mode))
2938 will_truncate = false;
2939
2940 audit_inode(name, file->f_path.dentry, 0);
2941 goto opened;
2942 }
2943
2944 if (*opened & FILE_CREATED) {
2945
2946 open_flag &= ~O_TRUNC;
2947 will_truncate = false;
2948 acc_mode = MAY_OPEN;
2949 path_to_nameidata(path, nd);
2950 goto finish_open_created;
2951 }
2952
2953
2954
2955
2956 if (d_is_positive(path->dentry))
2957 audit_inode(name, path->dentry, 0);
2958
2959
2960
2961
2962
2963
2964 if (got_write) {
2965 mnt_drop_write(nd->path.mnt);
2966 got_write = false;
2967 }
2968
2969 error = -EEXIST;
2970 if ((open_flag & (O_EXCL | O_CREAT)) == (O_EXCL | O_CREAT))
2971 goto exit_dput;
2972
2973 error = follow_managed(path, nd->flags);
2974 if (error < 0)
2975 goto exit_dput;
2976
2977 if (error)
2978 nd->flags |= LOOKUP_JUMPED;
2979
2980 BUG_ON(nd->flags & LOOKUP_RCU);
2981 inode = path->dentry->d_inode;
2982finish_lookup:
2983
2984 error = -ENOENT;
2985 if (d_is_negative(path->dentry)) {
2986 path_to_nameidata(path, nd);
2987 goto out;
2988 }
2989
2990 if (should_follow_link(path->dentry, !symlink_ok)) {
2991 if (nd->flags & LOOKUP_RCU) {
2992 if (unlikely(unlazy_walk(nd, path->dentry))) {
2993 error = -ECHILD;
2994 goto out;
2995 }
2996 }
2997 BUG_ON(inode != path->dentry->d_inode);
2998 return 1;
2999 }
3000
3001 if ((nd->flags & LOOKUP_RCU) || nd->path.mnt != path->mnt) {
3002 path_to_nameidata(path, nd);
3003 } else {
3004 save_parent.dentry = nd->path.dentry;
3005 save_parent.mnt = mntget(path->mnt);
3006 nd->path.dentry = path->dentry;
3007
3008 }
3009 nd->inode = inode;
3010
3011finish_open:
3012 error = complete_walk(nd);
3013 if (error) {
3014 path_put(&save_parent);
3015 return error;
3016 }
3017 audit_inode(name, nd->path.dentry, 0);
3018 error = -EISDIR;
3019 if ((open_flag & O_CREAT) &&
3020 (d_is_directory(nd->path.dentry) || d_is_autodir(nd->path.dentry)))
3021 goto out;
3022 error = -ENOTDIR;
3023 if ((nd->flags & LOOKUP_DIRECTORY) && !d_is_directory(nd->path.dentry))
3024 goto out;
3025 if (!S_ISREG(nd->inode->i_mode))
3026 will_truncate = false;
3027
3028 if (will_truncate) {
3029 error = mnt_want_write(nd->path.mnt);
3030 if (error)
3031 goto out;
3032 got_write = true;
3033 }
3034finish_open_created:
3035 error = may_open(&nd->path, acc_mode, open_flag);
3036 if (error)
3037 goto out;
3038 file->f_path.mnt = nd->path.mnt;
3039 error = finish_open(file, nd->path.dentry, NULL, opened);
3040 if (error) {
3041 if (error == -EOPENSTALE)
3042 goto stale_open;
3043 goto out;
3044 }
3045opened:
3046 error = open_check_o_direct(file);
3047 if (error)
3048 goto exit_fput;
3049 error = ima_file_check(file, op->acc_mode);
3050 if (error)
3051 goto exit_fput;
3052
3053 if (will_truncate) {
3054 error = handle_truncate(file);
3055 if (error)
3056 goto exit_fput;
3057 }
3058out:
3059 if (got_write)
3060 mnt_drop_write(nd->path.mnt);
3061 path_put(&save_parent);
3062 terminate_walk(nd);
3063 return error;
3064
3065exit_dput:
3066 path_put_conditional(path, nd);
3067 goto out;
3068exit_fput:
3069 fput(file);
3070 goto out;
3071
3072stale_open:
3073
3074 if (!save_parent.dentry || retried)
3075 goto out;
3076
3077 BUG_ON(save_parent.dentry != dir);
3078 path_put(&nd->path);
3079 nd->path = save_parent;
3080 nd->inode = dir->d_inode;
3081 save_parent.mnt = NULL;
3082 save_parent.dentry = NULL;
3083 if (got_write) {
3084 mnt_drop_write(nd->path.mnt);
3085 got_write = false;
3086 }
3087 retried = true;
3088 goto retry_lookup;
3089}
3090
3091static int do_tmpfile(int dfd, struct filename *pathname,
3092 struct nameidata *nd, int flags,
3093 const struct open_flags *op,
3094 struct file *file, int *opened)
3095{
3096 static const struct qstr name = QSTR_INIT("/", 1);
3097 struct dentry *dentry, *child;
3098 struct inode *dir;
3099 int error = path_lookupat(dfd, pathname->name,
3100 flags | LOOKUP_DIRECTORY, nd);
3101 if (unlikely(error))
3102 return error;
3103 error = mnt_want_write(nd->path.mnt);
3104 if (unlikely(error))
3105 goto out;
3106
3107 error = inode_permission(nd->inode, MAY_WRITE | MAY_EXEC);
3108 if (error)
3109 goto out2;
3110 dentry = nd->path.dentry;
3111 dir = dentry->d_inode;
3112 if (!dir->i_op->tmpfile) {
3113 error = -EOPNOTSUPP;
3114 goto out2;
3115 }
3116 child = d_alloc(dentry, &name);
3117 if (unlikely(!child)) {
3118 error = -ENOMEM;
3119 goto out2;
3120 }
3121 nd->flags &= ~LOOKUP_DIRECTORY;
3122 nd->flags |= op->intent;
3123 dput(nd->path.dentry);
3124 nd->path.dentry = child;
3125 error = dir->i_op->tmpfile(dir, nd->path.dentry, op->mode);
3126 if (error)
3127 goto out2;
3128 audit_inode(pathname, nd->path.dentry, 0);
3129 error = may_open(&nd->path, op->acc_mode, op->open_flag);
3130 if (error)
3131 goto out2;
3132 file->f_path.mnt = nd->path.mnt;
3133 error = finish_open(file, nd->path.dentry, NULL, opened);
3134 if (error)
3135 goto out2;
3136 error = open_check_o_direct(file);
3137 if (error) {
3138 fput(file);
3139 } else if (!(op->open_flag & O_EXCL)) {
3140 struct inode *inode = file_inode(file);
3141 spin_lock(&inode->i_lock);
3142 inode->i_state |= I_LINKABLE;
3143 spin_unlock(&inode->i_lock);
3144 }
3145out2:
3146 mnt_drop_write(nd->path.mnt);
3147out:
3148 path_put(&nd->path);
3149 return error;
3150}
3151
3152static struct file *path_openat(int dfd, struct filename *pathname,
3153 struct nameidata *nd, const struct open_flags *op, int flags)
3154{
3155 struct file *base = NULL;
3156 struct file *file;
3157 struct path path;
3158 int opened = 0;
3159 int error;
3160
3161 file = get_empty_filp();
3162 if (IS_ERR(file))
3163 return file;
3164
3165 file->f_flags = op->open_flag;
3166
3167 if (unlikely(file->f_flags & __O_TMPFILE)) {
3168 error = do_tmpfile(dfd, pathname, nd, flags, op, file, &opened);
3169 goto out;
3170 }
3171
3172 error = path_init(dfd, pathname->name, flags | LOOKUP_PARENT, nd, &base);
3173 if (unlikely(error))
3174 goto out;
3175
3176 current->total_link_count = 0;
3177 error = link_path_walk(pathname->name, nd);
3178 if (unlikely(error))
3179 goto out;
3180
3181 error = do_last(nd, &path, file, op, &opened, pathname);
3182 while (unlikely(error > 0)) {
3183 struct path link = path;
3184 void *cookie;
3185 if (!(nd->flags & LOOKUP_FOLLOW)) {
3186 path_put_conditional(&path, nd);
3187 path_put(&nd->path);
3188 error = -ELOOP;
3189 break;
3190 }
3191 error = may_follow_link(&link, nd);
3192 if (unlikely(error))
3193 break;
3194 nd->flags |= LOOKUP_PARENT;
3195 nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3196 error = follow_link(&link, nd, &cookie);
3197 if (unlikely(error))
3198 break;
3199 error = do_last(nd, &path, file, op, &opened, pathname);
3200 put_link(nd, &link, cookie);
3201 }
3202out:
3203 if (nd->root.mnt && !(nd->flags & LOOKUP_ROOT))
3204 path_put(&nd->root);
3205 if (base)
3206 fput(base);
3207 if (!(opened & FILE_OPENED)) {
3208 BUG_ON(!error);
3209 put_filp(file);
3210 }
3211 if (unlikely(error)) {
3212 if (error == -EOPENSTALE) {
3213 if (flags & LOOKUP_RCU)
3214 error = -ECHILD;
3215 else
3216 error = -ESTALE;
3217 }
3218 file = ERR_PTR(error);
3219 }
3220 return file;
3221}
3222
3223struct file *do_filp_open(int dfd, struct filename *pathname,
3224 const struct open_flags *op)
3225{
3226 struct nameidata nd;
3227 int flags = op->lookup_flags;
3228 struct file *filp;
3229
3230 filp = path_openat(dfd, pathname, &nd, op, flags | LOOKUP_RCU);
3231 if (unlikely(filp == ERR_PTR(-ECHILD)))
3232 filp = path_openat(dfd, pathname, &nd, op, flags);
3233 if (unlikely(filp == ERR_PTR(-ESTALE)))
3234 filp = path_openat(dfd, pathname, &nd, op, flags | LOOKUP_REVAL);
3235 return filp;
3236}
3237
3238struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
3239 const char *name, const struct open_flags *op)
3240{
3241 struct nameidata nd;
3242 struct file *file;
3243 struct filename filename = { .name = name };
3244 int flags = op->lookup_flags | LOOKUP_ROOT;
3245
3246 nd.root.mnt = mnt;
3247 nd.root.dentry = dentry;
3248
3249 if (d_is_symlink(dentry) && op->intent & LOOKUP_OPEN)
3250 return ERR_PTR(-ELOOP);
3251
3252 file = path_openat(-1, &filename, &nd, op, flags | LOOKUP_RCU);
3253 if (unlikely(file == ERR_PTR(-ECHILD)))
3254 file = path_openat(-1, &filename, &nd, op, flags);
3255 if (unlikely(file == ERR_PTR(-ESTALE)))
3256 file = path_openat(-1, &filename, &nd, op, flags | LOOKUP_REVAL);
3257 return file;
3258}
3259
3260struct dentry *kern_path_create(int dfd, const char *pathname,
3261 struct path *path, unsigned int lookup_flags)
3262{
3263 struct dentry *dentry = ERR_PTR(-EEXIST);
3264 struct nameidata nd;
3265 int err2;
3266 int error;
3267 bool is_dir = (lookup_flags & LOOKUP_DIRECTORY);
3268
3269
3270
3271
3272
3273 lookup_flags &= LOOKUP_REVAL;
3274
3275 error = do_path_lookup(dfd, pathname, LOOKUP_PARENT|lookup_flags, &nd);
3276 if (error)
3277 return ERR_PTR(error);
3278
3279
3280
3281
3282
3283 if (nd.last_type != LAST_NORM)
3284 goto out;
3285 nd.flags &= ~LOOKUP_PARENT;
3286 nd.flags |= LOOKUP_CREATE | LOOKUP_EXCL;
3287
3288
3289 err2 = mnt_want_write(nd.path.mnt);
3290
3291
3292
3293 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
3294 dentry = lookup_hash(&nd);
3295 if (IS_ERR(dentry))
3296 goto unlock;
3297
3298 error = -EEXIST;
3299 if (d_is_positive(dentry))
3300 goto fail;
3301
3302
3303
3304
3305
3306
3307
3308 if (unlikely(!is_dir && nd.last.name[nd.last.len])) {
3309 error = -ENOENT;
3310 goto fail;
3311 }
3312 if (unlikely(err2)) {
3313 error = err2;
3314 goto fail;
3315 }
3316 *path = nd.path;
3317 return dentry;
3318fail:
3319 dput(dentry);
3320 dentry = ERR_PTR(error);
3321unlock:
3322 mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
3323 if (!err2)
3324 mnt_drop_write(nd.path.mnt);
3325out:
3326 path_put(&nd.path);
3327 return dentry;
3328}
3329EXPORT_SYMBOL(kern_path_create);
3330
3331void done_path_create(struct path *path, struct dentry *dentry)
3332{
3333 dput(dentry);
3334 mutex_unlock(&path->dentry->d_inode->i_mutex);
3335 mnt_drop_write(path->mnt);
3336 path_put(path);
3337}
3338EXPORT_SYMBOL(done_path_create);
3339
3340struct dentry *user_path_create(int dfd, const char __user *pathname,
3341 struct path *path, unsigned int lookup_flags)
3342{
3343 struct filename *tmp = getname(pathname);
3344 struct dentry *res;
3345 if (IS_ERR(tmp))
3346 return ERR_CAST(tmp);
3347 res = kern_path_create(dfd, tmp->name, path, lookup_flags);
3348 putname(tmp);
3349 return res;
3350}
3351EXPORT_SYMBOL(user_path_create);
3352
3353int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
3354{
3355 int error = may_create(dir, dentry);
3356
3357 if (error)
3358 return error;
3359
3360 if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD))
3361 return -EPERM;
3362
3363 if (!dir->i_op->mknod)
3364 return -EPERM;
3365
3366 error = devcgroup_inode_mknod(mode, dev);
3367 if (error)
3368 return error;
3369
3370 error = security_inode_mknod(dir, dentry, mode, dev);
3371 if (error)
3372 return error;
3373
3374 error = dir->i_op->mknod(dir, dentry, mode, dev);
3375 if (!error)
3376 fsnotify_create(dir, dentry);
3377 return error;
3378}
3379
3380static int may_mknod(umode_t mode)
3381{
3382 switch (mode & S_IFMT) {
3383 case S_IFREG:
3384 case S_IFCHR:
3385 case S_IFBLK:
3386 case S_IFIFO:
3387 case S_IFSOCK:
3388 case 0:
3389 return 0;
3390 case S_IFDIR:
3391 return -EPERM;
3392 default:
3393 return -EINVAL;
3394 }
3395}
3396
3397SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
3398 unsigned, dev)
3399{
3400 struct dentry *dentry;
3401 struct path path;
3402 int error;
3403 unsigned int lookup_flags = 0;
3404
3405 error = may_mknod(mode);
3406 if (error)
3407 return error;
3408retry:
3409 dentry = user_path_create(dfd, filename, &path, lookup_flags);
3410 if (IS_ERR(dentry))
3411 return PTR_ERR(dentry);
3412
3413 if (!IS_POSIXACL(path.dentry->d_inode))
3414 mode &= ~current_umask();
3415 error = security_path_mknod(&path, dentry, mode, dev);
3416 if (error)
3417 goto out;
3418 switch (mode & S_IFMT) {
3419 case 0: case S_IFREG:
3420 error = vfs_create(path.dentry->d_inode,dentry,mode,true);
3421 break;
3422 case S_IFCHR: case S_IFBLK:
3423 error = vfs_mknod(path.dentry->d_inode,dentry,mode,
3424 new_decode_dev(dev));
3425 break;
3426 case S_IFIFO: case S_IFSOCK:
3427 error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
3428 break;
3429 }
3430out:
3431 done_path_create(&path, dentry);
3432 if (retry_estale(error, lookup_flags)) {
3433 lookup_flags |= LOOKUP_REVAL;
3434 goto retry;
3435 }
3436 return error;
3437}
3438
3439SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3440{
3441 return sys_mknodat(AT_FDCWD, filename, mode, dev);
3442}
3443
3444int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
3445{
3446 int error = may_create(dir, dentry);
3447 unsigned max_links = dir->i_sb->s_max_links;
3448
3449 if (error)
3450 return error;
3451
3452 if (!dir->i_op->mkdir)
3453 return -EPERM;
3454
3455 mode &= (S_IRWXUGO|S_ISVTX);
3456 error = security_inode_mkdir(dir, dentry, mode);
3457 if (error)
3458 return error;
3459
3460 if (max_links && dir->i_nlink >= max_links)
3461 return -EMLINK;
3462
3463 error = dir->i_op->mkdir(dir, dentry, mode);
3464 if (!error)
3465 fsnotify_mkdir(dir, dentry);
3466 return error;
3467}
3468
3469SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
3470{
3471 struct dentry *dentry;
3472 struct path path;
3473 int error;
3474 unsigned int lookup_flags = LOOKUP_DIRECTORY;
3475
3476retry:
3477 dentry = user_path_create(dfd, pathname, &path, lookup_flags);
3478 if (IS_ERR(dentry))
3479 return PTR_ERR(dentry);
3480
3481 if (!IS_POSIXACL(path.dentry->d_inode))
3482 mode &= ~current_umask();
3483 error = security_path_mkdir(&path, dentry, mode);
3484 if (!error)
3485 error = vfs_mkdir(path.dentry->d_inode, dentry, mode);
3486 done_path_create(&path, dentry);
3487 if (retry_estale(error, lookup_flags)) {
3488 lookup_flags |= LOOKUP_REVAL;
3489 goto retry;
3490 }
3491 return error;
3492}
3493
3494SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
3495{
3496 return sys_mkdirat(AT_FDCWD, pathname, mode);
3497}
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514void dentry_unhash(struct dentry *dentry)
3515{
3516 shrink_dcache_parent(dentry);
3517 spin_lock(&dentry->d_lock);
3518 if (dentry->d_lockref.count == 1)
3519 __d_drop(dentry);
3520 spin_unlock(&dentry->d_lock);
3521}
3522
3523int vfs_rmdir(struct inode *dir, struct dentry *dentry)
3524{
3525 int error = may_delete(dir, dentry, 1);
3526
3527 if (error)
3528 return error;
3529
3530 if (!dir->i_op->rmdir)
3531 return -EPERM;
3532
3533 dget(dentry);
3534 mutex_lock(&dentry->d_inode->i_mutex);
3535
3536 error = -EBUSY;
3537 if (d_mountpoint(dentry))
3538 goto out;
3539
3540 error = security_inode_rmdir(dir, dentry);
3541 if (error)
3542 goto out;
3543
3544 shrink_dcache_parent(dentry);
3545 error = dir->i_op->rmdir(dir, dentry);
3546 if (error)
3547 goto out;
3548
3549 dentry->d_inode->i_flags |= S_DEAD;
3550 dont_mount(dentry);
3551
3552out:
3553 mutex_unlock(&dentry->d_inode->i_mutex);
3554 dput(dentry);
3555 if (!error)
3556 d_delete(dentry);
3557 return error;
3558}
3559
3560static long do_rmdir(int dfd, const char __user *pathname)
3561{
3562 int error = 0;
3563 struct filename *name;
3564 struct dentry *dentry;
3565 struct nameidata nd;
3566 unsigned int lookup_flags = 0;
3567retry:
3568 name = user_path_parent(dfd, pathname, &nd, lookup_flags);
3569 if (IS_ERR(name))
3570 return PTR_ERR(name);
3571
3572 switch(nd.last_type) {
3573 case LAST_DOTDOT:
3574 error = -ENOTEMPTY;
3575 goto exit1;
3576 case LAST_DOT:
3577 error = -EINVAL;
3578 goto exit1;
3579 case LAST_ROOT:
3580 error = -EBUSY;
3581 goto exit1;
3582 }
3583
3584 nd.flags &= ~LOOKUP_PARENT;
3585 error = mnt_want_write(nd.path.mnt);
3586 if (error)
3587 goto exit1;
3588
3589 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
3590 dentry = lookup_hash(&nd);
3591 error = PTR_ERR(dentry);
3592 if (IS_ERR(dentry))
3593 goto exit2;
3594 if (!dentry->d_inode) {
3595 error = -ENOENT;
3596 goto exit3;
3597 }
3598 error = security_path_rmdir(&nd.path, dentry);
3599 if (error)
3600 goto exit3;
3601 error = vfs_rmdir(nd.path.dentry->d_inode, dentry);
3602exit3:
3603 dput(dentry);
3604exit2:
3605 mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
3606 mnt_drop_write(nd.path.mnt);
3607exit1:
3608 path_put(&nd.path);
3609 putname(name);
3610 if (retry_estale(error, lookup_flags)) {
3611 lookup_flags |= LOOKUP_REVAL;
3612 goto retry;
3613 }
3614 return error;
3615}
3616
3617SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
3618{
3619 return do_rmdir(AT_FDCWD, pathname);
3620}
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegated_inode)
3641{
3642 struct inode *target = dentry->d_inode;
3643 int error = may_delete(dir, dentry, 0);
3644
3645 if (error)
3646 return error;
3647
3648 if (!dir->i_op->unlink)
3649 return -EPERM;
3650
3651 mutex_lock(&target->i_mutex);
3652 if (d_mountpoint(dentry))
3653 error = -EBUSY;
3654 else {
3655 error = security_inode_unlink(dir, dentry);
3656 if (!error) {
3657 error = try_break_deleg(target, delegated_inode);
3658 if (error)
3659 goto out;
3660 error = dir->i_op->unlink(dir, dentry);
3661 if (!error)
3662 dont_mount(dentry);
3663 }
3664 }
3665out:
3666 mutex_unlock(&target->i_mutex);
3667
3668
3669 if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) {
3670 fsnotify_link_count(target);
3671 d_delete(dentry);
3672 }
3673
3674 return error;
3675}
3676
3677
3678
3679
3680
3681
3682
3683static long do_unlinkat(int dfd, const char __user *pathname)
3684{
3685 int error;
3686 struct filename *name;
3687 struct dentry *dentry;
3688 struct nameidata nd;
3689 struct inode *inode = NULL;
3690 struct inode *delegated_inode = NULL;
3691 unsigned int lookup_flags = 0;
3692retry:
3693 name = user_path_parent(dfd, pathname, &nd, lookup_flags);
3694 if (IS_ERR(name))
3695 return PTR_ERR(name);
3696
3697 error = -EISDIR;
3698 if (nd.last_type != LAST_NORM)
3699 goto exit1;
3700
3701 nd.flags &= ~LOOKUP_PARENT;
3702 error = mnt_want_write(nd.path.mnt);
3703 if (error)
3704 goto exit1;
3705retry_deleg:
3706 mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
3707 dentry = lookup_hash(&nd);
3708 error = PTR_ERR(dentry);
3709 if (!IS_ERR(dentry)) {
3710
3711 if (nd.last.name[nd.last.len])
3712 goto slashes;
3713 inode = dentry->d_inode;
3714 if (d_is_negative(dentry))
3715 goto slashes;
3716 ihold(inode);
3717 error = security_path_unlink(&nd.path, dentry);
3718 if (error)
3719 goto exit2;
3720 error = vfs_unlink(nd.path.dentry->d_inode, dentry, &delegated_inode);
3721exit2:
3722 dput(dentry);
3723 }
3724 mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
3725 if (inode)
3726 iput(inode);
3727 inode = NULL;
3728 if (delegated_inode) {
3729 error = break_deleg_wait(&delegated_inode);
3730 if (!error)
3731 goto retry_deleg;
3732 }
3733 mnt_drop_write(nd.path.mnt);
3734exit1:
3735 path_put(&nd.path);
3736 putname(name);
3737 if (retry_estale(error, lookup_flags)) {
3738 lookup_flags |= LOOKUP_REVAL;
3739 inode = NULL;
3740 goto retry;
3741 }
3742 return error;
3743
3744slashes:
3745 if (d_is_negative(dentry))
3746 error = -ENOENT;
3747 else if (d_is_directory(dentry) || d_is_autodir(dentry))
3748 error = -EISDIR;
3749 else
3750 error = -ENOTDIR;
3751 goto exit2;
3752}
3753
3754SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
3755{
3756 if ((flag & ~AT_REMOVEDIR) != 0)
3757 return -EINVAL;
3758
3759 if (flag & AT_REMOVEDIR)
3760 return do_rmdir(dfd, pathname);
3761
3762 return do_unlinkat(dfd, pathname);
3763}
3764
3765SYSCALL_DEFINE1(unlink, const char __user *, pathname)
3766{
3767 return do_unlinkat(AT_FDCWD, pathname);
3768}
3769
3770int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
3771{
3772 int error = may_create(dir, dentry);
3773
3774 if (error)
3775 return error;
3776
3777 if (!dir->i_op->symlink)
3778 return -EPERM;
3779
3780 error = security_inode_symlink(dir, dentry, oldname);
3781 if (error)
3782 return error;
3783
3784 error = dir->i_op->symlink(dir, dentry, oldname);
3785 if (!error)
3786 fsnotify_create(dir, dentry);
3787 return error;
3788}
3789
3790SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
3791 int, newdfd, const char __user *, newname)
3792{
3793 int error;
3794 struct filename *from;
3795 struct dentry *dentry;
3796 struct path path;
3797 unsigned int lookup_flags = 0;
3798
3799 from = getname(oldname);
3800 if (IS_ERR(from))
3801 return PTR_ERR(from);
3802retry:
3803 dentry = user_path_create(newdfd, newname, &path, lookup_flags);
3804 error = PTR_ERR(dentry);
3805 if (IS_ERR(dentry))
3806 goto out_putname;
3807
3808 error = security_path_symlink(&path, dentry, from->name);
3809 if (!error)
3810 error = vfs_symlink(path.dentry->d_inode, dentry, from->name);
3811 done_path_create(&path, dentry);
3812 if (retry_estale(error, lookup_flags)) {
3813 lookup_flags |= LOOKUP_REVAL;
3814 goto retry;
3815 }
3816out_putname:
3817 putname(from);
3818 return error;
3819}
3820
3821SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
3822{
3823 return sys_symlinkat(oldname, AT_FDCWD, newname);
3824}
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry, struct inode **delegated_inode)
3846{
3847 struct inode *inode = old_dentry->d_inode;
3848 unsigned max_links = dir->i_sb->s_max_links;
3849 int error;
3850
3851 if (!inode)
3852 return -ENOENT;
3853
3854 error = may_create(dir, new_dentry);
3855 if (error)
3856 return error;
3857
3858 if (dir->i_sb != inode->i_sb)
3859 return -EXDEV;
3860
3861
3862
3863
3864 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
3865 return -EPERM;
3866 if (!dir->i_op->link)
3867 return -EPERM;
3868 if (S_ISDIR(inode->i_mode))
3869 return -EPERM;
3870
3871 error = security_inode_link(old_dentry, dir, new_dentry);
3872 if (error)
3873 return error;
3874
3875 mutex_lock(&inode->i_mutex);
3876
3877 if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
3878 error = -ENOENT;
3879 else if (max_links && inode->i_nlink >= max_links)
3880 error = -EMLINK;
3881 else {
3882 error = try_break_deleg(inode, delegated_inode);
3883 if (!error)
3884 error = dir->i_op->link(old_dentry, dir, new_dentry);
3885 }
3886
3887 if (!error && (inode->i_state & I_LINKABLE)) {
3888 spin_lock(&inode->i_lock);
3889 inode->i_state &= ~I_LINKABLE;
3890 spin_unlock(&inode->i_lock);
3891 }
3892 mutex_unlock(&inode->i_mutex);
3893 if (!error)
3894 fsnotify_link(dir, inode, new_dentry);
3895 return error;
3896}
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
3908 int, newdfd, const char __user *, newname, int, flags)
3909{
3910 struct dentry *new_dentry;
3911 struct path old_path, new_path;
3912 struct inode *delegated_inode = NULL;
3913 int how = 0;
3914 int error;
3915
3916 if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0)
3917 return -EINVAL;
3918
3919
3920
3921
3922
3923 if (flags & AT_EMPTY_PATH) {
3924 if (!capable(CAP_DAC_READ_SEARCH))
3925 return -ENOENT;
3926 how = LOOKUP_EMPTY;
3927 }
3928
3929 if (flags & AT_SYMLINK_FOLLOW)
3930 how |= LOOKUP_FOLLOW;
3931retry:
3932 error = user_path_at(olddfd, oldname, how, &old_path);
3933 if (error)
3934 return error;
3935
3936 new_dentry = user_path_create(newdfd, newname, &new_path,
3937 (how & LOOKUP_REVAL));
3938 error = PTR_ERR(new_dentry);
3939 if (IS_ERR(new_dentry))
3940 goto out;
3941
3942 error = -EXDEV;
3943 if (old_path.mnt != new_path.mnt)
3944 goto out_dput;
3945 error = may_linkat(&old_path);
3946 if (unlikely(error))
3947 goto out_dput;
3948 error = security_path_link(old_path.dentry, &new_path, new_dentry);
3949 if (error)
3950 goto out_dput;
3951 error = vfs_link(old_path.dentry, new_path.dentry->d_inode, new_dentry, &delegated_inode);
3952out_dput:
3953 done_path_create(&new_path, new_dentry);
3954 if (delegated_inode) {
3955 error = break_deleg_wait(&delegated_inode);
3956 if (!error) {
3957 path_put(&old_path);
3958 goto retry;
3959 }
3960 }
3961 if (retry_estale(error, how)) {
3962 path_put(&old_path);
3963 how |= LOOKUP_REVAL;
3964 goto retry;
3965 }
3966out:
3967 path_put(&old_path);
3968
3969 return error;
3970}
3971
3972SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
3973{
3974 return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
3975}
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
4006 struct inode *new_dir, struct dentry *new_dentry)
4007{
4008 int error = 0;
4009 struct inode *target = new_dentry->d_inode;
4010 unsigned max_links = new_dir->i_sb->s_max_links;
4011
4012
4013
4014
4015
4016 if (new_dir != old_dir) {
4017 error = inode_permission(old_dentry->d_inode, MAY_WRITE);
4018 if (error)
4019 return error;
4020 }
4021
4022 error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
4023 if (error)
4024 return error;
4025
4026 dget(new_dentry);
4027 if (target)
4028 mutex_lock(&target->i_mutex);
4029
4030 error = -EBUSY;
4031 if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry))
4032 goto out;
4033
4034 error = -EMLINK;
4035 if (max_links && !target && new_dir != old_dir &&
4036 new_dir->i_nlink >= max_links)
4037 goto out;
4038
4039 if (target)
4040 shrink_dcache_parent(new_dentry);
4041 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
4042 if (error)
4043 goto out;
4044
4045 if (target) {
4046 target->i_flags |= S_DEAD;
4047 dont_mount(new_dentry);
4048 }
4049out:
4050 if (target)
4051 mutex_unlock(&target->i_mutex);
4052 dput(new_dentry);
4053 if (!error)
4054 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
4055 d_move(old_dentry,new_dentry);
4056 return error;
4057}
4058
4059static int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
4060 struct inode *new_dir, struct dentry *new_dentry,
4061 struct inode **delegated_inode)
4062{
4063 struct inode *target = new_dentry->d_inode;
4064 struct inode *source = old_dentry->d_inode;
4065 int error;
4066
4067 error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
4068 if (error)
4069 return error;
4070
4071 dget(new_dentry);
4072 lock_two_nondirectories(source, target);
4073
4074 error = -EBUSY;
4075 if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
4076 goto out;
4077
4078 error = try_break_deleg(source, delegated_inode);
4079 if (error)
4080 goto out;
4081 if (target) {
4082 error = try_break_deleg(target, delegated_inode);
4083 if (error)
4084 goto out;
4085 }
4086 error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
4087 if (error)
4088 goto out;
4089
4090 if (target)
4091 dont_mount(new_dentry);
4092 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE))
4093 d_move(old_dentry, new_dentry);
4094out:
4095 unlock_two_nondirectories(source, target);
4096 dput(new_dentry);
4097 return error;
4098}
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
4122 struct inode *new_dir, struct dentry *new_dentry,
4123 struct inode **delegated_inode)
4124{
4125 int error;
4126 int is_dir = d_is_directory(old_dentry) || d_is_autodir(old_dentry);
4127 const unsigned char *old_name;
4128
4129 if (old_dentry->d_inode == new_dentry->d_inode)
4130 return 0;
4131
4132 error = may_delete(old_dir, old_dentry, is_dir);
4133 if (error)
4134 return error;
4135
4136 if (!new_dentry->d_inode)
4137 error = may_create(new_dir, new_dentry);
4138 else
4139 error = may_delete(new_dir, new_dentry, is_dir);
4140 if (error)
4141 return error;
4142
4143 if (!old_dir->i_op->rename)
4144 return -EPERM;
4145
4146 old_name = fsnotify_oldname_init(old_dentry->d_name.name);
4147
4148 if (is_dir)
4149 error = vfs_rename_dir(old_dir,old_dentry,new_dir,new_dentry);
4150 else
4151 error = vfs_rename_other(old_dir,old_dentry,new_dir,new_dentry,delegated_inode);
4152 if (!error)
4153 fsnotify_move(old_dir, new_dir, old_name, is_dir,
4154 new_dentry->d_inode, old_dentry);
4155 fsnotify_oldname_free(old_name);
4156
4157 return error;
4158}
4159
4160SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
4161 int, newdfd, const char __user *, newname)
4162{
4163 struct dentry *old_dir, *new_dir;
4164 struct dentry *old_dentry, *new_dentry;
4165 struct dentry *trap;
4166 struct nameidata oldnd, newnd;
4167 struct inode *delegated_inode = NULL;
4168 struct filename *from;
4169 struct filename *to;
4170 unsigned int lookup_flags = 0;
4171 bool should_retry = false;
4172 int error;
4173retry:
4174 from = user_path_parent(olddfd, oldname, &oldnd, lookup_flags);
4175 if (IS_ERR(from)) {
4176 error = PTR_ERR(from);
4177 goto exit;
4178 }
4179
4180 to = user_path_parent(newdfd, newname, &newnd, lookup_flags);
4181 if (IS_ERR(to)) {
4182 error = PTR_ERR(to);
4183 goto exit1;
4184 }
4185
4186 error = -EXDEV;
4187 if (oldnd.path.mnt != newnd.path.mnt)
4188 goto exit2;
4189
4190 old_dir = oldnd.path.dentry;
4191 error = -EBUSY;
4192 if (oldnd.last_type != LAST_NORM)
4193 goto exit2;
4194
4195 new_dir = newnd.path.dentry;
4196 if (newnd.last_type != LAST_NORM)
4197 goto exit2;
4198
4199 error = mnt_want_write(oldnd.path.mnt);
4200 if (error)
4201 goto exit2;
4202
4203 oldnd.flags &= ~LOOKUP_PARENT;
4204 newnd.flags &= ~LOOKUP_PARENT;
4205 newnd.flags |= LOOKUP_RENAME_TARGET;
4206
4207retry_deleg:
4208 trap = lock_rename(new_dir, old_dir);
4209
4210 old_dentry = lookup_hash(&oldnd);
4211 error = PTR_ERR(old_dentry);
4212 if (IS_ERR(old_dentry))
4213 goto exit3;
4214
4215 error = -ENOENT;
4216 if (d_is_negative(old_dentry))
4217 goto exit4;
4218
4219 if (!d_is_directory(old_dentry) && !d_is_autodir(old_dentry)) {
4220 error = -ENOTDIR;
4221 if (oldnd.last.name[oldnd.last.len])
4222 goto exit4;
4223 if (newnd.last.name[newnd.last.len])
4224 goto exit4;
4225 }
4226
4227 error = -EINVAL;
4228 if (old_dentry == trap)
4229 goto exit4;
4230 new_dentry = lookup_hash(&newnd);
4231 error = PTR_ERR(new_dentry);
4232 if (IS_ERR(new_dentry))
4233 goto exit4;
4234
4235 error = -ENOTEMPTY;
4236 if (new_dentry == trap)
4237 goto exit5;
4238
4239 error = security_path_rename(&oldnd.path, old_dentry,
4240 &newnd.path, new_dentry);
4241 if (error)
4242 goto exit5;
4243 error = vfs_rename(old_dir->d_inode, old_dentry,
4244 new_dir->d_inode, new_dentry,
4245 &delegated_inode);
4246exit5:
4247 dput(new_dentry);
4248exit4:
4249 dput(old_dentry);
4250exit3:
4251 unlock_rename(new_dir, old_dir);
4252 if (delegated_inode) {
4253 error = break_deleg_wait(&delegated_inode);
4254 if (!error)
4255 goto retry_deleg;
4256 }
4257 mnt_drop_write(oldnd.path.mnt);
4258exit2:
4259 if (retry_estale(error, lookup_flags))
4260 should_retry = true;
4261 path_put(&newnd.path);
4262 putname(to);
4263exit1:
4264 path_put(&oldnd.path);
4265 putname(from);
4266 if (should_retry) {
4267 should_retry = false;
4268 lookup_flags |= LOOKUP_REVAL;
4269 goto retry;
4270 }
4271exit:
4272 return error;
4273}
4274
4275SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4276{
4277 return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);
4278}
4279
4280int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link)
4281{
4282 int len;
4283
4284 len = PTR_ERR(link);
4285 if (IS_ERR(link))
4286 goto out;
4287
4288 len = strlen(link);
4289 if (len > (unsigned) buflen)
4290 len = buflen;
4291 if (copy_to_user(buffer, link, len))
4292 len = -EFAULT;
4293out:
4294 return len;
4295}
4296
4297
4298
4299
4300
4301
4302int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
4303{
4304 struct nameidata nd;
4305 void *cookie;
4306 int res;
4307
4308 nd.depth = 0;
4309 cookie = dentry->d_inode->i_op->follow_link(dentry, &nd);
4310 if (IS_ERR(cookie))
4311 return PTR_ERR(cookie);
4312
4313 res = vfs_readlink(dentry, buffer, buflen, nd_get_link(&nd));
4314 if (dentry->d_inode->i_op->put_link)
4315 dentry->d_inode->i_op->put_link(dentry, &nd, cookie);
4316 return res;
4317}
4318
4319
4320static char *page_getlink(struct dentry * dentry, struct page **ppage)
4321{
4322 char *kaddr;
4323 struct page *page;
4324 struct address_space *mapping = dentry->d_inode->i_mapping;
4325 page = read_mapping_page(mapping, 0, NULL);
4326 if (IS_ERR(page))
4327 return (char*)page;
4328 *ppage = page;
4329 kaddr = kmap(page);
4330 nd_terminate_link(kaddr, dentry->d_inode->i_size, PAGE_SIZE - 1);
4331 return kaddr;
4332}
4333
4334int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
4335{
4336 struct page *page = NULL;
4337 char *s = page_getlink(dentry, &page);
4338 int res = vfs_readlink(dentry,buffer,buflen,s);
4339 if (page) {
4340 kunmap(page);
4341 page_cache_release(page);
4342 }
4343 return res;
4344}
4345
4346void *page_follow_link_light(struct dentry *dentry, struct nameidata *nd)
4347{
4348 struct page *page = NULL;
4349 nd_set_link(nd, page_getlink(dentry, &page));
4350 return page;
4351}
4352
4353void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
4354{
4355 struct page *page = cookie;
4356
4357 if (page) {
4358 kunmap(page);
4359 page_cache_release(page);
4360 }
4361}
4362
4363
4364
4365
4366int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
4367{
4368 struct address_space *mapping = inode->i_mapping;
4369 struct page *page;
4370 void *fsdata;
4371 int err;
4372 char *kaddr;
4373 unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
4374 if (nofs)
4375 flags |= AOP_FLAG_NOFS;
4376
4377retry:
4378 err = pagecache_write_begin(NULL, mapping, 0, len-1,
4379 flags, &page, &fsdata);
4380 if (err)
4381 goto fail;
4382
4383 kaddr = kmap_atomic(page);
4384 memcpy(kaddr, symname, len-1);
4385 kunmap_atomic(kaddr);
4386
4387 err = pagecache_write_end(NULL, mapping, 0, len-1, len-1,
4388 page, fsdata);
4389 if (err < 0)
4390 goto fail;
4391 if (err < len-1)
4392 goto retry;
4393
4394 mark_inode_dirty(inode);
4395 return 0;
4396fail:
4397 return err;
4398}
4399
4400int page_symlink(struct inode *inode, const char *symname, int len)
4401{
4402 return __page_symlink(inode, symname, len,
4403 !(mapping_gfp_mask(inode->i_mapping) & __GFP_FS));
4404}
4405
4406const struct inode_operations page_symlink_inode_operations = {
4407 .readlink = generic_readlink,
4408 .follow_link = page_follow_link_light,
4409 .put_link = page_put_link,
4410};
4411
4412EXPORT_SYMBOL(user_path_at);
4413EXPORT_SYMBOL(follow_down_one);
4414EXPORT_SYMBOL(follow_down);
4415EXPORT_SYMBOL(follow_up);
4416EXPORT_SYMBOL(get_write_access);
4417EXPORT_SYMBOL(lock_rename);
4418EXPORT_SYMBOL(lookup_one_len);
4419EXPORT_SYMBOL(page_follow_link_light);
4420EXPORT_SYMBOL(page_put_link);
4421EXPORT_SYMBOL(page_readlink);
4422EXPORT_SYMBOL(__page_symlink);
4423EXPORT_SYMBOL(page_symlink);
4424EXPORT_SYMBOL(page_symlink_inode_operations);
4425EXPORT_SYMBOL(kern_path);
4426EXPORT_SYMBOL(vfs_path_lookup);
4427EXPORT_SYMBOL(inode_permission);
4428EXPORT_SYMBOL(unlock_rename);
4429EXPORT_SYMBOL(vfs_create);
4430EXPORT_SYMBOL(vfs_link);
4431EXPORT_SYMBOL(vfs_mkdir);
4432EXPORT_SYMBOL(vfs_mknod);
4433EXPORT_SYMBOL(generic_permission);
4434EXPORT_SYMBOL(vfs_readlink);
4435EXPORT_SYMBOL(vfs_rename);
4436EXPORT_SYMBOL(vfs_rmdir);
4437EXPORT_SYMBOL(vfs_symlink);
4438EXPORT_SYMBOL(vfs_unlink);
4439EXPORT_SYMBOL(dentry_unhash);
4440EXPORT_SYMBOL(generic_readlink);
4441