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