0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #include <linux/init.h>
0019 #include <linux/export.h>
0020 #include <linux/kernel.h>
0021 #include <linux/slab.h>
0022 #include <linux/fs.h>
0023 #include <linux/namei.h>
0024 #include <linux/pagemap.h>
0025 #include <linux/sched/mm.h>
0026 #include <linux/fsnotify.h>
0027 #include <linux/personality.h>
0028 #include <linux/security.h>
0029 #include <linux/ima.h>
0030 #include <linux/syscalls.h>
0031 #include <linux/mount.h>
0032 #include <linux/audit.h>
0033 #include <linux/capability.h>
0034 #include <linux/file.h>
0035 #include <linux/fcntl.h>
0036 #include <linux/device_cgroup.h>
0037 #include <linux/fs_struct.h>
0038 #include <linux/posix_acl.h>
0039 #include <linux/hash.h>
0040 #include <linux/bitops.h>
0041 #include <linux/init_task.h>
0042 #include <linux/uaccess.h>
0043
0044 #include "internal.h"
0045 #include "mount.h"
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 #define EMBEDDED_NAME_MAX (PATH_MAX - offsetof(struct filename, iname))
0127
0128 struct filename *
0129 getname_flags(const char __user *filename, int flags, int *empty)
0130 {
0131 struct filename *result;
0132 char *kname;
0133 int len;
0134
0135 result = audit_reusename(filename);
0136 if (result)
0137 return result;
0138
0139 result = __getname();
0140 if (unlikely(!result))
0141 return ERR_PTR(-ENOMEM);
0142
0143
0144
0145
0146
0147 kname = (char *)result->iname;
0148 result->name = kname;
0149
0150 len = strncpy_from_user(kname, filename, EMBEDDED_NAME_MAX);
0151 if (unlikely(len < 0)) {
0152 __putname(result);
0153 return ERR_PTR(len);
0154 }
0155
0156
0157
0158
0159
0160
0161
0162 if (unlikely(len == EMBEDDED_NAME_MAX)) {
0163 const size_t size = offsetof(struct filename, iname[1]);
0164 kname = (char *)result;
0165
0166
0167
0168
0169
0170
0171 result = kzalloc(size, GFP_KERNEL);
0172 if (unlikely(!result)) {
0173 __putname(kname);
0174 return ERR_PTR(-ENOMEM);
0175 }
0176 result->name = kname;
0177 len = strncpy_from_user(kname, filename, PATH_MAX);
0178 if (unlikely(len < 0)) {
0179 __putname(kname);
0180 kfree(result);
0181 return ERR_PTR(len);
0182 }
0183 if (unlikely(len == PATH_MAX)) {
0184 __putname(kname);
0185 kfree(result);
0186 return ERR_PTR(-ENAMETOOLONG);
0187 }
0188 }
0189
0190 result->refcnt = 1;
0191
0192 if (unlikely(!len)) {
0193 if (empty)
0194 *empty = 1;
0195 if (!(flags & LOOKUP_EMPTY)) {
0196 putname(result);
0197 return ERR_PTR(-ENOENT);
0198 }
0199 }
0200
0201 result->uptr = filename;
0202 result->aname = NULL;
0203 audit_getname(result);
0204 return result;
0205 }
0206
0207 struct filename *
0208 getname_uflags(const char __user *filename, int uflags)
0209 {
0210 int flags = (uflags & AT_EMPTY_PATH) ? LOOKUP_EMPTY : 0;
0211
0212 return getname_flags(filename, flags, NULL);
0213 }
0214
0215 struct filename *
0216 getname(const char __user * filename)
0217 {
0218 return getname_flags(filename, 0, NULL);
0219 }
0220
0221 struct filename *
0222 getname_kernel(const char * filename)
0223 {
0224 struct filename *result;
0225 int len = strlen(filename) + 1;
0226
0227 result = __getname();
0228 if (unlikely(!result))
0229 return ERR_PTR(-ENOMEM);
0230
0231 if (len <= EMBEDDED_NAME_MAX) {
0232 result->name = (char *)result->iname;
0233 } else if (len <= PATH_MAX) {
0234 const size_t size = offsetof(struct filename, iname[1]);
0235 struct filename *tmp;
0236
0237 tmp = kmalloc(size, GFP_KERNEL);
0238 if (unlikely(!tmp)) {
0239 __putname(result);
0240 return ERR_PTR(-ENOMEM);
0241 }
0242 tmp->name = (char *)result;
0243 result = tmp;
0244 } else {
0245 __putname(result);
0246 return ERR_PTR(-ENAMETOOLONG);
0247 }
0248 memcpy((char *)result->name, filename, len);
0249 result->uptr = NULL;
0250 result->aname = NULL;
0251 result->refcnt = 1;
0252 audit_getname(result);
0253
0254 return result;
0255 }
0256
0257 void putname(struct filename *name)
0258 {
0259 if (IS_ERR(name))
0260 return;
0261
0262 BUG_ON(name->refcnt <= 0);
0263
0264 if (--name->refcnt > 0)
0265 return;
0266
0267 if (name->name != name->iname) {
0268 __putname(name->name);
0269 kfree(name);
0270 } else
0271 __putname(name);
0272 }
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290 static int check_acl(struct user_namespace *mnt_userns,
0291 struct inode *inode, int mask)
0292 {
0293 #ifdef CONFIG_FS_POSIX_ACL
0294 struct posix_acl *acl;
0295
0296 if (mask & MAY_NOT_BLOCK) {
0297 acl = get_cached_acl_rcu(inode, ACL_TYPE_ACCESS);
0298 if (!acl)
0299 return -EAGAIN;
0300
0301 if (is_uncached_acl(acl))
0302 return -ECHILD;
0303 return posix_acl_permission(mnt_userns, inode, acl, mask);
0304 }
0305
0306 acl = get_acl(inode, ACL_TYPE_ACCESS);
0307 if (IS_ERR(acl))
0308 return PTR_ERR(acl);
0309 if (acl) {
0310 int error = posix_acl_permission(mnt_userns, inode, acl, mask);
0311 posix_acl_release(acl);
0312 return error;
0313 }
0314 #endif
0315
0316 return -EAGAIN;
0317 }
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335 static int acl_permission_check(struct user_namespace *mnt_userns,
0336 struct inode *inode, int mask)
0337 {
0338 unsigned int mode = inode->i_mode;
0339 kuid_t i_uid;
0340
0341
0342 i_uid = i_uid_into_mnt(mnt_userns, inode);
0343 if (likely(uid_eq(current_fsuid(), i_uid))) {
0344 mask &= 7;
0345 mode >>= 6;
0346 return (mask & ~mode) ? -EACCES : 0;
0347 }
0348
0349
0350 if (IS_POSIXACL(inode) && (mode & S_IRWXG)) {
0351 int error = check_acl(mnt_userns, inode, mask);
0352 if (error != -EAGAIN)
0353 return error;
0354 }
0355
0356
0357 mask &= 7;
0358
0359
0360
0361
0362
0363
0364 if (mask & (mode ^ (mode >> 3))) {
0365 kgid_t kgid = i_gid_into_mnt(mnt_userns, inode);
0366 if (in_group_p(kgid))
0367 mode >>= 3;
0368 }
0369
0370
0371 return (mask & ~mode) ? -EACCES : 0;
0372 }
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396 int generic_permission(struct user_namespace *mnt_userns, struct inode *inode,
0397 int mask)
0398 {
0399 int ret;
0400
0401
0402
0403
0404 ret = acl_permission_check(mnt_userns, inode, mask);
0405 if (ret != -EACCES)
0406 return ret;
0407
0408 if (S_ISDIR(inode->i_mode)) {
0409
0410 if (!(mask & MAY_WRITE))
0411 if (capable_wrt_inode_uidgid(mnt_userns, inode,
0412 CAP_DAC_READ_SEARCH))
0413 return 0;
0414 if (capable_wrt_inode_uidgid(mnt_userns, inode,
0415 CAP_DAC_OVERRIDE))
0416 return 0;
0417 return -EACCES;
0418 }
0419
0420
0421
0422
0423 mask &= MAY_READ | MAY_WRITE | MAY_EXEC;
0424 if (mask == MAY_READ)
0425 if (capable_wrt_inode_uidgid(mnt_userns, inode,
0426 CAP_DAC_READ_SEARCH))
0427 return 0;
0428
0429
0430
0431
0432
0433 if (!(mask & MAY_EXEC) || (inode->i_mode & S_IXUGO))
0434 if (capable_wrt_inode_uidgid(mnt_userns, inode,
0435 CAP_DAC_OVERRIDE))
0436 return 0;
0437
0438 return -EACCES;
0439 }
0440 EXPORT_SYMBOL(generic_permission);
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453 static inline int do_inode_permission(struct user_namespace *mnt_userns,
0454 struct inode *inode, int mask)
0455 {
0456 if (unlikely(!(inode->i_opflags & IOP_FASTPERM))) {
0457 if (likely(inode->i_op->permission))
0458 return inode->i_op->permission(mnt_userns, inode, mask);
0459
0460
0461 spin_lock(&inode->i_lock);
0462 inode->i_opflags |= IOP_FASTPERM;
0463 spin_unlock(&inode->i_lock);
0464 }
0465 return generic_permission(mnt_userns, inode, mask);
0466 }
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476 static int sb_permission(struct super_block *sb, struct inode *inode, int mask)
0477 {
0478 if (unlikely(mask & MAY_WRITE)) {
0479 umode_t mode = inode->i_mode;
0480
0481
0482 if (sb_rdonly(sb) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
0483 return -EROFS;
0484 }
0485 return 0;
0486 }
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500 int inode_permission(struct user_namespace *mnt_userns,
0501 struct inode *inode, int mask)
0502 {
0503 int retval;
0504
0505 retval = sb_permission(inode->i_sb, inode, mask);
0506 if (retval)
0507 return retval;
0508
0509 if (unlikely(mask & MAY_WRITE)) {
0510
0511
0512
0513 if (IS_IMMUTABLE(inode))
0514 return -EPERM;
0515
0516
0517
0518
0519
0520
0521 if (HAS_UNMAPPED_ID(mnt_userns, inode))
0522 return -EACCES;
0523 }
0524
0525 retval = do_inode_permission(mnt_userns, inode, mask);
0526 if (retval)
0527 return retval;
0528
0529 retval = devcgroup_inode_permission(inode, mask);
0530 if (retval)
0531 return retval;
0532
0533 return security_inode_permission(inode, mask);
0534 }
0535 EXPORT_SYMBOL(inode_permission);
0536
0537
0538
0539
0540
0541
0542
0543 void path_get(const struct path *path)
0544 {
0545 mntget(path->mnt);
0546 dget(path->dentry);
0547 }
0548 EXPORT_SYMBOL(path_get);
0549
0550
0551
0552
0553
0554
0555
0556 void path_put(const struct path *path)
0557 {
0558 dput(path->dentry);
0559 mntput(path->mnt);
0560 }
0561 EXPORT_SYMBOL(path_put);
0562
0563 #define EMBEDDED_LEVELS 2
0564 struct nameidata {
0565 struct path path;
0566 struct qstr last;
0567 struct path root;
0568 struct inode *inode;
0569 unsigned int flags, state;
0570 unsigned seq, next_seq, m_seq, r_seq;
0571 int last_type;
0572 unsigned depth;
0573 int total_link_count;
0574 struct saved {
0575 struct path link;
0576 struct delayed_call done;
0577 const char *name;
0578 unsigned seq;
0579 } *stack, internal[EMBEDDED_LEVELS];
0580 struct filename *name;
0581 struct nameidata *saved;
0582 unsigned root_seq;
0583 int dfd;
0584 kuid_t dir_uid;
0585 umode_t dir_mode;
0586 } __randomize_layout;
0587
0588 #define ND_ROOT_PRESET 1
0589 #define ND_ROOT_GRABBED 2
0590 #define ND_JUMPED 4
0591
0592 static void __set_nameidata(struct nameidata *p, int dfd, struct filename *name)
0593 {
0594 struct nameidata *old = current->nameidata;
0595 p->stack = p->internal;
0596 p->depth = 0;
0597 p->dfd = dfd;
0598 p->name = name;
0599 p->path.mnt = NULL;
0600 p->path.dentry = NULL;
0601 p->total_link_count = old ? old->total_link_count : 0;
0602 p->saved = old;
0603 current->nameidata = p;
0604 }
0605
0606 static inline void set_nameidata(struct nameidata *p, int dfd, struct filename *name,
0607 const struct path *root)
0608 {
0609 __set_nameidata(p, dfd, name);
0610 p->state = 0;
0611 if (unlikely(root)) {
0612 p->state = ND_ROOT_PRESET;
0613 p->root = *root;
0614 }
0615 }
0616
0617 static void restore_nameidata(void)
0618 {
0619 struct nameidata *now = current->nameidata, *old = now->saved;
0620
0621 current->nameidata = old;
0622 if (old)
0623 old->total_link_count = now->total_link_count;
0624 if (now->stack != now->internal)
0625 kfree(now->stack);
0626 }
0627
0628 static bool nd_alloc_stack(struct nameidata *nd)
0629 {
0630 struct saved *p;
0631
0632 p= kmalloc_array(MAXSYMLINKS, sizeof(struct saved),
0633 nd->flags & LOOKUP_RCU ? GFP_ATOMIC : GFP_KERNEL);
0634 if (unlikely(!p))
0635 return false;
0636 memcpy(p, nd->internal, sizeof(nd->internal));
0637 nd->stack = p;
0638 return true;
0639 }
0640
0641
0642
0643
0644
0645
0646
0647 static bool path_connected(struct vfsmount *mnt, struct dentry *dentry)
0648 {
0649 struct super_block *sb = mnt->mnt_sb;
0650
0651
0652 if (mnt->mnt_root == sb->s_root)
0653 return true;
0654
0655 return is_subdir(dentry, mnt->mnt_root);
0656 }
0657
0658 static void drop_links(struct nameidata *nd)
0659 {
0660 int i = nd->depth;
0661 while (i--) {
0662 struct saved *last = nd->stack + i;
0663 do_delayed_call(&last->done);
0664 clear_delayed_call(&last->done);
0665 }
0666 }
0667
0668 static void leave_rcu(struct nameidata *nd)
0669 {
0670 nd->flags &= ~LOOKUP_RCU;
0671 nd->seq = nd->next_seq = 0;
0672 rcu_read_unlock();
0673 }
0674
0675 static void terminate_walk(struct nameidata *nd)
0676 {
0677 drop_links(nd);
0678 if (!(nd->flags & LOOKUP_RCU)) {
0679 int i;
0680 path_put(&nd->path);
0681 for (i = 0; i < nd->depth; i++)
0682 path_put(&nd->stack[i].link);
0683 if (nd->state & ND_ROOT_GRABBED) {
0684 path_put(&nd->root);
0685 nd->state &= ~ND_ROOT_GRABBED;
0686 }
0687 } else {
0688 leave_rcu(nd);
0689 }
0690 nd->depth = 0;
0691 nd->path.mnt = NULL;
0692 nd->path.dentry = NULL;
0693 }
0694
0695
0696 static bool __legitimize_path(struct path *path, unsigned seq, unsigned mseq)
0697 {
0698 int res = __legitimize_mnt(path->mnt, mseq);
0699 if (unlikely(res)) {
0700 if (res > 0)
0701 path->mnt = NULL;
0702 path->dentry = NULL;
0703 return false;
0704 }
0705 if (unlikely(!lockref_get_not_dead(&path->dentry->d_lockref))) {
0706 path->dentry = NULL;
0707 return false;
0708 }
0709 return !read_seqcount_retry(&path->dentry->d_seq, seq);
0710 }
0711
0712 static inline bool legitimize_path(struct nameidata *nd,
0713 struct path *path, unsigned seq)
0714 {
0715 return __legitimize_path(path, seq, nd->m_seq);
0716 }
0717
0718 static bool legitimize_links(struct nameidata *nd)
0719 {
0720 int i;
0721 if (unlikely(nd->flags & LOOKUP_CACHED)) {
0722 drop_links(nd);
0723 nd->depth = 0;
0724 return false;
0725 }
0726 for (i = 0; i < nd->depth; i++) {
0727 struct saved *last = nd->stack + i;
0728 if (unlikely(!legitimize_path(nd, &last->link, last->seq))) {
0729 drop_links(nd);
0730 nd->depth = i + 1;
0731 return false;
0732 }
0733 }
0734 return true;
0735 }
0736
0737 static bool legitimize_root(struct nameidata *nd)
0738 {
0739
0740 if (!nd->root.mnt || (nd->state & ND_ROOT_PRESET))
0741 return true;
0742 nd->state |= ND_ROOT_GRABBED;
0743 return legitimize_path(nd, &nd->root, nd->root_seq);
0744 }
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768 static bool try_to_unlazy(struct nameidata *nd)
0769 {
0770 struct dentry *parent = nd->path.dentry;
0771
0772 BUG_ON(!(nd->flags & LOOKUP_RCU));
0773
0774 if (unlikely(!legitimize_links(nd)))
0775 goto out1;
0776 if (unlikely(!legitimize_path(nd, &nd->path, nd->seq)))
0777 goto out;
0778 if (unlikely(!legitimize_root(nd)))
0779 goto out;
0780 leave_rcu(nd);
0781 BUG_ON(nd->inode != parent->d_inode);
0782 return true;
0783
0784 out1:
0785 nd->path.mnt = NULL;
0786 nd->path.dentry = NULL;
0787 out:
0788 leave_rcu(nd);
0789 return false;
0790 }
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804 static bool try_to_unlazy_next(struct nameidata *nd, struct dentry *dentry)
0805 {
0806 int res;
0807 BUG_ON(!(nd->flags & LOOKUP_RCU));
0808
0809 if (unlikely(!legitimize_links(nd)))
0810 goto out2;
0811 res = __legitimize_mnt(nd->path.mnt, nd->m_seq);
0812 if (unlikely(res)) {
0813 if (res > 0)
0814 goto out2;
0815 goto out1;
0816 }
0817 if (unlikely(!lockref_get_not_dead(&nd->path.dentry->d_lockref)))
0818 goto out1;
0819
0820
0821
0822
0823
0824
0825
0826
0827 if (unlikely(!lockref_get_not_dead(&dentry->d_lockref)))
0828 goto out;
0829 if (read_seqcount_retry(&dentry->d_seq, nd->next_seq))
0830 goto out_dput;
0831
0832
0833
0834
0835 if (unlikely(!legitimize_root(nd)))
0836 goto out_dput;
0837 leave_rcu(nd);
0838 return true;
0839
0840 out2:
0841 nd->path.mnt = NULL;
0842 out1:
0843 nd->path.dentry = NULL;
0844 out:
0845 leave_rcu(nd);
0846 return false;
0847 out_dput:
0848 leave_rcu(nd);
0849 dput(dentry);
0850 return false;
0851 }
0852
0853 static inline int d_revalidate(struct dentry *dentry, unsigned int flags)
0854 {
0855 if (unlikely(dentry->d_flags & DCACHE_OP_REVALIDATE))
0856 return dentry->d_op->d_revalidate(dentry, flags);
0857 else
0858 return 1;
0859 }
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871 static int complete_walk(struct nameidata *nd)
0872 {
0873 struct dentry *dentry = nd->path.dentry;
0874 int status;
0875
0876 if (nd->flags & LOOKUP_RCU) {
0877
0878
0879
0880
0881 if (!(nd->state & ND_ROOT_PRESET))
0882 if (!(nd->flags & LOOKUP_IS_SCOPED))
0883 nd->root.mnt = NULL;
0884 nd->flags &= ~LOOKUP_CACHED;
0885 if (!try_to_unlazy(nd))
0886 return -ECHILD;
0887 }
0888
0889 if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) {
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906 if (!path_is_under(&nd->path, &nd->root))
0907 return -EXDEV;
0908 }
0909
0910 if (likely(!(nd->state & ND_JUMPED)))
0911 return 0;
0912
0913 if (likely(!(dentry->d_flags & DCACHE_OP_WEAK_REVALIDATE)))
0914 return 0;
0915
0916 status = dentry->d_op->d_weak_revalidate(dentry, nd->flags);
0917 if (status > 0)
0918 return 0;
0919
0920 if (!status)
0921 status = -ESTALE;
0922
0923 return status;
0924 }
0925
0926 static int set_root(struct nameidata *nd)
0927 {
0928 struct fs_struct *fs = current->fs;
0929
0930
0931
0932
0933
0934
0935 if (WARN_ON(nd->flags & LOOKUP_IS_SCOPED))
0936 return -ENOTRECOVERABLE;
0937
0938 if (nd->flags & LOOKUP_RCU) {
0939 unsigned seq;
0940
0941 do {
0942 seq = read_seqcount_begin(&fs->seq);
0943 nd->root = fs->root;
0944 nd->root_seq = __read_seqcount_begin(&nd->root.dentry->d_seq);
0945 } while (read_seqcount_retry(&fs->seq, seq));
0946 } else {
0947 get_fs_root(fs, &nd->root);
0948 nd->state |= ND_ROOT_GRABBED;
0949 }
0950 return 0;
0951 }
0952
0953 static int nd_jump_root(struct nameidata *nd)
0954 {
0955 if (unlikely(nd->flags & LOOKUP_BENEATH))
0956 return -EXDEV;
0957 if (unlikely(nd->flags & LOOKUP_NO_XDEV)) {
0958
0959 if (nd->path.mnt != NULL && nd->path.mnt != nd->root.mnt)
0960 return -EXDEV;
0961 }
0962 if (!nd->root.mnt) {
0963 int error = set_root(nd);
0964 if (error)
0965 return error;
0966 }
0967 if (nd->flags & LOOKUP_RCU) {
0968 struct dentry *d;
0969 nd->path = nd->root;
0970 d = nd->path.dentry;
0971 nd->inode = d->d_inode;
0972 nd->seq = nd->root_seq;
0973 if (read_seqcount_retry(&d->d_seq, nd->seq))
0974 return -ECHILD;
0975 } else {
0976 path_put(&nd->path);
0977 nd->path = nd->root;
0978 path_get(&nd->path);
0979 nd->inode = nd->path.dentry->d_inode;
0980 }
0981 nd->state |= ND_JUMPED;
0982 return 0;
0983 }
0984
0985
0986
0987
0988
0989 int nd_jump_link(struct path *path)
0990 {
0991 int error = -ELOOP;
0992 struct nameidata *nd = current->nameidata;
0993
0994 if (unlikely(nd->flags & LOOKUP_NO_MAGICLINKS))
0995 goto err;
0996
0997 error = -EXDEV;
0998 if (unlikely(nd->flags & LOOKUP_NO_XDEV)) {
0999 if (nd->path.mnt != path->mnt)
1000 goto err;
1001 }
1002
1003 if (unlikely(nd->flags & LOOKUP_IS_SCOPED))
1004 goto err;
1005
1006 path_put(&nd->path);
1007 nd->path = *path;
1008 nd->inode = nd->path.dentry->d_inode;
1009 nd->state |= ND_JUMPED;
1010 return 0;
1011
1012 err:
1013 path_put(path);
1014 return error;
1015 }
1016
1017 static inline void put_link(struct nameidata *nd)
1018 {
1019 struct saved *last = nd->stack + --nd->depth;
1020 do_delayed_call(&last->done);
1021 if (!(nd->flags & LOOKUP_RCU))
1022 path_put(&last->link);
1023 }
1024
1025 static int sysctl_protected_symlinks __read_mostly;
1026 static int sysctl_protected_hardlinks __read_mostly;
1027 static int sysctl_protected_fifos __read_mostly;
1028 static int sysctl_protected_regular __read_mostly;
1029
1030 #ifdef CONFIG_SYSCTL
1031 static struct ctl_table namei_sysctls[] = {
1032 {
1033 .procname = "protected_symlinks",
1034 .data = &sysctl_protected_symlinks,
1035 .maxlen = sizeof(int),
1036 .mode = 0644,
1037 .proc_handler = proc_dointvec_minmax,
1038 .extra1 = SYSCTL_ZERO,
1039 .extra2 = SYSCTL_ONE,
1040 },
1041 {
1042 .procname = "protected_hardlinks",
1043 .data = &sysctl_protected_hardlinks,
1044 .maxlen = sizeof(int),
1045 .mode = 0644,
1046 .proc_handler = proc_dointvec_minmax,
1047 .extra1 = SYSCTL_ZERO,
1048 .extra2 = SYSCTL_ONE,
1049 },
1050 {
1051 .procname = "protected_fifos",
1052 .data = &sysctl_protected_fifos,
1053 .maxlen = sizeof(int),
1054 .mode = 0644,
1055 .proc_handler = proc_dointvec_minmax,
1056 .extra1 = SYSCTL_ZERO,
1057 .extra2 = SYSCTL_TWO,
1058 },
1059 {
1060 .procname = "protected_regular",
1061 .data = &sysctl_protected_regular,
1062 .maxlen = sizeof(int),
1063 .mode = 0644,
1064 .proc_handler = proc_dointvec_minmax,
1065 .extra1 = SYSCTL_ZERO,
1066 .extra2 = SYSCTL_TWO,
1067 },
1068 { }
1069 };
1070
1071 static int __init init_fs_namei_sysctls(void)
1072 {
1073 register_sysctl_init("fs", namei_sysctls);
1074 return 0;
1075 }
1076 fs_initcall(init_fs_namei_sysctls);
1077
1078 #endif
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095 static inline int may_follow_link(struct nameidata *nd, const struct inode *inode)
1096 {
1097 struct user_namespace *mnt_userns;
1098 kuid_t i_uid;
1099
1100 if (!sysctl_protected_symlinks)
1101 return 0;
1102
1103 mnt_userns = mnt_user_ns(nd->path.mnt);
1104 i_uid = i_uid_into_mnt(mnt_userns, inode);
1105
1106 if (uid_eq(current_cred()->fsuid, i_uid))
1107 return 0;
1108
1109
1110 if ((nd->dir_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH))
1111 return 0;
1112
1113
1114 if (uid_valid(nd->dir_uid) && uid_eq(nd->dir_uid, i_uid))
1115 return 0;
1116
1117 if (nd->flags & LOOKUP_RCU)
1118 return -ECHILD;
1119
1120 audit_inode(nd->name, nd->stack[0].link.dentry, 0);
1121 audit_log_path_denied(AUDIT_ANOM_LINK, "follow_link");
1122 return -EACCES;
1123 }
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138 static bool safe_hardlink_source(struct user_namespace *mnt_userns,
1139 struct inode *inode)
1140 {
1141 umode_t mode = inode->i_mode;
1142
1143
1144 if (!S_ISREG(mode))
1145 return false;
1146
1147
1148 if (mode & S_ISUID)
1149 return false;
1150
1151
1152 if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
1153 return false;
1154
1155
1156 if (inode_permission(mnt_userns, inode, MAY_READ | MAY_WRITE))
1157 return false;
1158
1159 return true;
1160 }
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181 int may_linkat(struct user_namespace *mnt_userns, struct path *link)
1182 {
1183 struct inode *inode = link->dentry->d_inode;
1184
1185
1186 if (!uid_valid(i_uid_into_mnt(mnt_userns, inode)) ||
1187 !gid_valid(i_gid_into_mnt(mnt_userns, inode)))
1188 return -EOVERFLOW;
1189
1190 if (!sysctl_protected_hardlinks)
1191 return 0;
1192
1193
1194
1195
1196 if (safe_hardlink_source(mnt_userns, inode) ||
1197 inode_owner_or_capable(mnt_userns, inode))
1198 return 0;
1199
1200 audit_log_path_denied(AUDIT_ANOM_LINK, "linkat");
1201 return -EPERM;
1202 }
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231 static int may_create_in_sticky(struct user_namespace *mnt_userns,
1232 struct nameidata *nd, struct inode *const inode)
1233 {
1234 umode_t dir_mode = nd->dir_mode;
1235 kuid_t dir_uid = nd->dir_uid;
1236
1237 if ((!sysctl_protected_fifos && S_ISFIFO(inode->i_mode)) ||
1238 (!sysctl_protected_regular && S_ISREG(inode->i_mode)) ||
1239 likely(!(dir_mode & S_ISVTX)) ||
1240 uid_eq(i_uid_into_mnt(mnt_userns, inode), dir_uid) ||
1241 uid_eq(current_fsuid(), i_uid_into_mnt(mnt_userns, inode)))
1242 return 0;
1243
1244 if (likely(dir_mode & 0002) ||
1245 (dir_mode & 0020 &&
1246 ((sysctl_protected_fifos >= 2 && S_ISFIFO(inode->i_mode)) ||
1247 (sysctl_protected_regular >= 2 && S_ISREG(inode->i_mode))))) {
1248 const char *operation = S_ISFIFO(inode->i_mode) ?
1249 "sticky_create_fifo" :
1250 "sticky_create_regular";
1251 audit_log_path_denied(AUDIT_ANOM_CREAT, operation);
1252 return -EACCES;
1253 }
1254 return 0;
1255 }
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267 int follow_up(struct path *path)
1268 {
1269 struct mount *mnt = real_mount(path->mnt);
1270 struct mount *parent;
1271 struct dentry *mountpoint;
1272
1273 read_seqlock_excl(&mount_lock);
1274 parent = mnt->mnt_parent;
1275 if (parent == mnt) {
1276 read_sequnlock_excl(&mount_lock);
1277 return 0;
1278 }
1279 mntget(&parent->mnt);
1280 mountpoint = dget(mnt->mnt_mountpoint);
1281 read_sequnlock_excl(&mount_lock);
1282 dput(path->dentry);
1283 path->dentry = mountpoint;
1284 mntput(path->mnt);
1285 path->mnt = &parent->mnt;
1286 return 1;
1287 }
1288 EXPORT_SYMBOL(follow_up);
1289
1290 static bool choose_mountpoint_rcu(struct mount *m, const struct path *root,
1291 struct path *path, unsigned *seqp)
1292 {
1293 while (mnt_has_parent(m)) {
1294 struct dentry *mountpoint = m->mnt_mountpoint;
1295
1296 m = m->mnt_parent;
1297 if (unlikely(root->dentry == mountpoint &&
1298 root->mnt == &m->mnt))
1299 break;
1300 if (mountpoint != m->mnt.mnt_root) {
1301 path->mnt = &m->mnt;
1302 path->dentry = mountpoint;
1303 *seqp = read_seqcount_begin(&mountpoint->d_seq);
1304 return true;
1305 }
1306 }
1307 return false;
1308 }
1309
1310 static bool choose_mountpoint(struct mount *m, const struct path *root,
1311 struct path *path)
1312 {
1313 bool found;
1314
1315 rcu_read_lock();
1316 while (1) {
1317 unsigned seq, mseq = read_seqbegin(&mount_lock);
1318
1319 found = choose_mountpoint_rcu(m, root, path, &seq);
1320 if (unlikely(!found)) {
1321 if (!read_seqretry(&mount_lock, mseq))
1322 break;
1323 } else {
1324 if (likely(__legitimize_path(path, seq, mseq)))
1325 break;
1326 rcu_read_unlock();
1327 path_put(path);
1328 rcu_read_lock();
1329 }
1330 }
1331 rcu_read_unlock();
1332 return found;
1333 }
1334
1335
1336
1337
1338
1339
1340 static int follow_automount(struct path *path, int *count, unsigned lookup_flags)
1341 {
1342 struct dentry *dentry = path->dentry;
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355 if (!(lookup_flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
1356 LOOKUP_OPEN | LOOKUP_CREATE | LOOKUP_AUTOMOUNT)) &&
1357 dentry->d_inode)
1358 return -EISDIR;
1359
1360 if (count && (*count)++ >= MAXSYMLINKS)
1361 return -ELOOP;
1362
1363 return finish_automount(dentry->d_op->d_automount(path), path);
1364 }
1365
1366
1367
1368
1369
1370
1371
1372 static int __traverse_mounts(struct path *path, unsigned flags, bool *jumped,
1373 int *count, unsigned lookup_flags)
1374 {
1375 struct vfsmount *mnt = path->mnt;
1376 bool need_mntput = false;
1377 int ret = 0;
1378
1379 while (flags & DCACHE_MANAGED_DENTRY) {
1380
1381
1382 if (flags & DCACHE_MANAGE_TRANSIT) {
1383 ret = path->dentry->d_op->d_manage(path, false);
1384 flags = smp_load_acquire(&path->dentry->d_flags);
1385 if (ret < 0)
1386 break;
1387 }
1388
1389 if (flags & DCACHE_MOUNTED) {
1390 struct vfsmount *mounted = lookup_mnt(path);
1391 if (mounted) {
1392 dput(path->dentry);
1393 if (need_mntput)
1394 mntput(path->mnt);
1395 path->mnt = mounted;
1396 path->dentry = dget(mounted->mnt_root);
1397
1398 flags = path->dentry->d_flags;
1399 need_mntput = true;
1400 continue;
1401 }
1402 }
1403
1404 if (!(flags & DCACHE_NEED_AUTOMOUNT))
1405 break;
1406
1407
1408 ret = follow_automount(path, count, lookup_flags);
1409 flags = smp_load_acquire(&path->dentry->d_flags);
1410 if (ret < 0)
1411 break;
1412 }
1413
1414 if (ret == -EISDIR)
1415 ret = 0;
1416
1417 if (need_mntput && path->mnt == mnt)
1418 mntput(path->mnt);
1419 if (!ret && unlikely(d_flags_negative(flags)))
1420 ret = -ENOENT;
1421 *jumped = need_mntput;
1422 return ret;
1423 }
1424
1425 static inline int traverse_mounts(struct path *path, bool *jumped,
1426 int *count, unsigned lookup_flags)
1427 {
1428 unsigned flags = smp_load_acquire(&path->dentry->d_flags);
1429
1430
1431 if (likely(!(flags & DCACHE_MANAGED_DENTRY))) {
1432 *jumped = false;
1433 if (unlikely(d_flags_negative(flags)))
1434 return -ENOENT;
1435 return 0;
1436 }
1437 return __traverse_mounts(path, flags, jumped, count, lookup_flags);
1438 }
1439
1440 int follow_down_one(struct path *path)
1441 {
1442 struct vfsmount *mounted;
1443
1444 mounted = lookup_mnt(path);
1445 if (mounted) {
1446 dput(path->dentry);
1447 mntput(path->mnt);
1448 path->mnt = mounted;
1449 path->dentry = dget(mounted->mnt_root);
1450 return 1;
1451 }
1452 return 0;
1453 }
1454 EXPORT_SYMBOL(follow_down_one);
1455
1456
1457
1458
1459
1460
1461 int follow_down(struct path *path)
1462 {
1463 struct vfsmount *mnt = path->mnt;
1464 bool jumped;
1465 int ret = traverse_mounts(path, &jumped, NULL, 0);
1466
1467 if (path->mnt != mnt)
1468 mntput(mnt);
1469 return ret;
1470 }
1471 EXPORT_SYMBOL(follow_down);
1472
1473
1474
1475
1476
1477 static bool __follow_mount_rcu(struct nameidata *nd, struct path *path)
1478 {
1479 struct dentry *dentry = path->dentry;
1480 unsigned int flags = dentry->d_flags;
1481
1482 if (likely(!(flags & DCACHE_MANAGED_DENTRY)))
1483 return true;
1484
1485 if (unlikely(nd->flags & LOOKUP_NO_XDEV))
1486 return false;
1487
1488 for (;;) {
1489
1490
1491
1492
1493 if (unlikely(flags & DCACHE_MANAGE_TRANSIT)) {
1494 int res = dentry->d_op->d_manage(path, true);
1495 if (res)
1496 return res == -EISDIR;
1497 flags = dentry->d_flags;
1498 }
1499
1500 if (flags & DCACHE_MOUNTED) {
1501 struct mount *mounted = __lookup_mnt(path->mnt, dentry);
1502 if (mounted) {
1503 path->mnt = &mounted->mnt;
1504 dentry = path->dentry = mounted->mnt.mnt_root;
1505 nd->state |= ND_JUMPED;
1506 nd->next_seq = read_seqcount_begin(&dentry->d_seq);
1507 flags = dentry->d_flags;
1508
1509
1510 if (read_seqretry(&mount_lock, nd->m_seq))
1511 return false;
1512 continue;
1513 }
1514 if (read_seqretry(&mount_lock, nd->m_seq))
1515 return false;
1516 }
1517 return !(flags & DCACHE_NEED_AUTOMOUNT);
1518 }
1519 }
1520
1521 static inline int handle_mounts(struct nameidata *nd, struct dentry *dentry,
1522 struct path *path)
1523 {
1524 bool jumped;
1525 int ret;
1526
1527 path->mnt = nd->path.mnt;
1528 path->dentry = dentry;
1529 if (nd->flags & LOOKUP_RCU) {
1530 unsigned int seq = nd->next_seq;
1531 if (likely(__follow_mount_rcu(nd, path)))
1532 return 0;
1533
1534 path->mnt = nd->path.mnt;
1535 path->dentry = dentry;
1536 nd->next_seq = seq;
1537 if (!try_to_unlazy_next(nd, dentry))
1538 return -ECHILD;
1539 }
1540 ret = traverse_mounts(path, &jumped, &nd->total_link_count, nd->flags);
1541 if (jumped) {
1542 if (unlikely(nd->flags & LOOKUP_NO_XDEV))
1543 ret = -EXDEV;
1544 else
1545 nd->state |= ND_JUMPED;
1546 }
1547 if (unlikely(ret)) {
1548 dput(path->dentry);
1549 if (path->mnt != nd->path.mnt)
1550 mntput(path->mnt);
1551 }
1552 return ret;
1553 }
1554
1555
1556
1557
1558
1559 static struct dentry *lookup_dcache(const struct qstr *name,
1560 struct dentry *dir,
1561 unsigned int flags)
1562 {
1563 struct dentry *dentry = d_lookup(dir, name);
1564 if (dentry) {
1565 int error = d_revalidate(dentry, flags);
1566 if (unlikely(error <= 0)) {
1567 if (!error)
1568 d_invalidate(dentry);
1569 dput(dentry);
1570 return ERR_PTR(error);
1571 }
1572 }
1573 return dentry;
1574 }
1575
1576
1577
1578
1579
1580
1581
1582
1583 static struct dentry *__lookup_hash(const struct qstr *name,
1584 struct dentry *base, unsigned int flags)
1585 {
1586 struct dentry *dentry = lookup_dcache(name, base, flags);
1587 struct dentry *old;
1588 struct inode *dir = base->d_inode;
1589
1590 if (dentry)
1591 return dentry;
1592
1593
1594 if (unlikely(IS_DEADDIR(dir)))
1595 return ERR_PTR(-ENOENT);
1596
1597 dentry = d_alloc(base, name);
1598 if (unlikely(!dentry))
1599 return ERR_PTR(-ENOMEM);
1600
1601 old = dir->i_op->lookup(dir, dentry, flags);
1602 if (unlikely(old)) {
1603 dput(dentry);
1604 dentry = old;
1605 }
1606 return dentry;
1607 }
1608
1609 static struct dentry *lookup_fast(struct nameidata *nd)
1610 {
1611 struct dentry *dentry, *parent = nd->path.dentry;
1612 int status = 1;
1613
1614
1615
1616
1617
1618
1619 if (nd->flags & LOOKUP_RCU) {
1620 dentry = __d_lookup_rcu(parent, &nd->last, &nd->next_seq);
1621 if (unlikely(!dentry)) {
1622 if (!try_to_unlazy(nd))
1623 return ERR_PTR(-ECHILD);
1624 return NULL;
1625 }
1626
1627
1628
1629
1630
1631 if (read_seqcount_retry(&parent->d_seq, nd->seq))
1632 return ERR_PTR(-ECHILD);
1633
1634 status = d_revalidate(dentry, nd->flags);
1635 if (likely(status > 0))
1636 return dentry;
1637 if (!try_to_unlazy_next(nd, dentry))
1638 return ERR_PTR(-ECHILD);
1639 if (status == -ECHILD)
1640
1641 status = d_revalidate(dentry, nd->flags);
1642 } else {
1643 dentry = __d_lookup(parent, &nd->last);
1644 if (unlikely(!dentry))
1645 return NULL;
1646 status = d_revalidate(dentry, nd->flags);
1647 }
1648 if (unlikely(status <= 0)) {
1649 if (!status)
1650 d_invalidate(dentry);
1651 dput(dentry);
1652 return ERR_PTR(status);
1653 }
1654 return dentry;
1655 }
1656
1657
1658 static struct dentry *__lookup_slow(const struct qstr *name,
1659 struct dentry *dir,
1660 unsigned int flags)
1661 {
1662 struct dentry *dentry, *old;
1663 struct inode *inode = dir->d_inode;
1664 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
1665
1666
1667 if (unlikely(IS_DEADDIR(inode)))
1668 return ERR_PTR(-ENOENT);
1669 again:
1670 dentry = d_alloc_parallel(dir, name, &wq);
1671 if (IS_ERR(dentry))
1672 return dentry;
1673 if (unlikely(!d_in_lookup(dentry))) {
1674 int error = d_revalidate(dentry, flags);
1675 if (unlikely(error <= 0)) {
1676 if (!error) {
1677 d_invalidate(dentry);
1678 dput(dentry);
1679 goto again;
1680 }
1681 dput(dentry);
1682 dentry = ERR_PTR(error);
1683 }
1684 } else {
1685 old = inode->i_op->lookup(inode, dentry, flags);
1686 d_lookup_done(dentry);
1687 if (unlikely(old)) {
1688 dput(dentry);
1689 dentry = old;
1690 }
1691 }
1692 return dentry;
1693 }
1694
1695 static struct dentry *lookup_slow(const struct qstr *name,
1696 struct dentry *dir,
1697 unsigned int flags)
1698 {
1699 struct inode *inode = dir->d_inode;
1700 struct dentry *res;
1701 inode_lock_shared(inode);
1702 res = __lookup_slow(name, dir, flags);
1703 inode_unlock_shared(inode);
1704 return res;
1705 }
1706
1707 static inline int may_lookup(struct user_namespace *mnt_userns,
1708 struct nameidata *nd)
1709 {
1710 if (nd->flags & LOOKUP_RCU) {
1711 int err = inode_permission(mnt_userns, nd->inode, MAY_EXEC|MAY_NOT_BLOCK);
1712 if (err != -ECHILD || !try_to_unlazy(nd))
1713 return err;
1714 }
1715 return inode_permission(mnt_userns, nd->inode, MAY_EXEC);
1716 }
1717
1718 static int reserve_stack(struct nameidata *nd, struct path *link)
1719 {
1720 if (unlikely(nd->total_link_count++ >= MAXSYMLINKS))
1721 return -ELOOP;
1722
1723 if (likely(nd->depth != EMBEDDED_LEVELS))
1724 return 0;
1725 if (likely(nd->stack != nd->internal))
1726 return 0;
1727 if (likely(nd_alloc_stack(nd)))
1728 return 0;
1729
1730 if (nd->flags & LOOKUP_RCU) {
1731
1732
1733 bool grabbed_link = legitimize_path(nd, link, nd->next_seq);
1734
1735 if (!try_to_unlazy(nd) || !grabbed_link)
1736 return -ECHILD;
1737
1738 if (nd_alloc_stack(nd))
1739 return 0;
1740 }
1741 return -ENOMEM;
1742 }
1743
1744 enum {WALK_TRAILING = 1, WALK_MORE = 2, WALK_NOFOLLOW = 4};
1745
1746 static const char *pick_link(struct nameidata *nd, struct path *link,
1747 struct inode *inode, int flags)
1748 {
1749 struct saved *last;
1750 const char *res;
1751 int error = reserve_stack(nd, link);
1752
1753 if (unlikely(error)) {
1754 if (!(nd->flags & LOOKUP_RCU))
1755 path_put(link);
1756 return ERR_PTR(error);
1757 }
1758 last = nd->stack + nd->depth++;
1759 last->link = *link;
1760 clear_delayed_call(&last->done);
1761 last->seq = nd->next_seq;
1762
1763 if (flags & WALK_TRAILING) {
1764 error = may_follow_link(nd, inode);
1765 if (unlikely(error))
1766 return ERR_PTR(error);
1767 }
1768
1769 if (unlikely(nd->flags & LOOKUP_NO_SYMLINKS) ||
1770 unlikely(link->mnt->mnt_flags & MNT_NOSYMFOLLOW))
1771 return ERR_PTR(-ELOOP);
1772
1773 if (!(nd->flags & LOOKUP_RCU)) {
1774 touch_atime(&last->link);
1775 cond_resched();
1776 } else if (atime_needs_update(&last->link, inode)) {
1777 if (!try_to_unlazy(nd))
1778 return ERR_PTR(-ECHILD);
1779 touch_atime(&last->link);
1780 }
1781
1782 error = security_inode_follow_link(link->dentry, inode,
1783 nd->flags & LOOKUP_RCU);
1784 if (unlikely(error))
1785 return ERR_PTR(error);
1786
1787 res = READ_ONCE(inode->i_link);
1788 if (!res) {
1789 const char * (*get)(struct dentry *, struct inode *,
1790 struct delayed_call *);
1791 get = inode->i_op->get_link;
1792 if (nd->flags & LOOKUP_RCU) {
1793 res = get(NULL, inode, &last->done);
1794 if (res == ERR_PTR(-ECHILD) && try_to_unlazy(nd))
1795 res = get(link->dentry, inode, &last->done);
1796 } else {
1797 res = get(link->dentry, inode, &last->done);
1798 }
1799 if (!res)
1800 goto all_done;
1801 if (IS_ERR(res))
1802 return res;
1803 }
1804 if (*res == '/') {
1805 error = nd_jump_root(nd);
1806 if (unlikely(error))
1807 return ERR_PTR(error);
1808 while (unlikely(*++res == '/'))
1809 ;
1810 }
1811 if (*res)
1812 return res;
1813 all_done:
1814 put_link(nd);
1815 return NULL;
1816 }
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826 static const char *step_into(struct nameidata *nd, int flags,
1827 struct dentry *dentry)
1828 {
1829 struct path path;
1830 struct inode *inode;
1831 int err = handle_mounts(nd, dentry, &path);
1832
1833 if (err < 0)
1834 return ERR_PTR(err);
1835 inode = path.dentry->d_inode;
1836 if (likely(!d_is_symlink(path.dentry)) ||
1837 ((flags & WALK_TRAILING) && !(nd->flags & LOOKUP_FOLLOW)) ||
1838 (flags & WALK_NOFOLLOW)) {
1839
1840 if (nd->flags & LOOKUP_RCU) {
1841 if (read_seqcount_retry(&path.dentry->d_seq, nd->next_seq))
1842 return ERR_PTR(-ECHILD);
1843 if (unlikely(!inode))
1844 return ERR_PTR(-ENOENT);
1845 } else {
1846 dput(nd->path.dentry);
1847 if (nd->path.mnt != path.mnt)
1848 mntput(nd->path.mnt);
1849 }
1850 nd->path = path;
1851 nd->inode = inode;
1852 nd->seq = nd->next_seq;
1853 return NULL;
1854 }
1855 if (nd->flags & LOOKUP_RCU) {
1856
1857 if (read_seqcount_retry(&path.dentry->d_seq, nd->next_seq))
1858 return ERR_PTR(-ECHILD);
1859 } else {
1860 if (path.mnt == nd->path.mnt)
1861 mntget(path.mnt);
1862 }
1863 return pick_link(nd, &path, inode, flags);
1864 }
1865
1866 static struct dentry *follow_dotdot_rcu(struct nameidata *nd)
1867 {
1868 struct dentry *parent, *old;
1869
1870 if (path_equal(&nd->path, &nd->root))
1871 goto in_root;
1872 if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
1873 struct path path;
1874 unsigned seq;
1875 if (!choose_mountpoint_rcu(real_mount(nd->path.mnt),
1876 &nd->root, &path, &seq))
1877 goto in_root;
1878 if (unlikely(nd->flags & LOOKUP_NO_XDEV))
1879 return ERR_PTR(-ECHILD);
1880 nd->path = path;
1881 nd->inode = path.dentry->d_inode;
1882 nd->seq = seq;
1883
1884 if (read_seqretry(&mount_lock, nd->m_seq))
1885 return ERR_PTR(-ECHILD);
1886
1887 }
1888 old = nd->path.dentry;
1889 parent = old->d_parent;
1890 nd->next_seq = read_seqcount_begin(&parent->d_seq);
1891
1892 if (read_seqcount_retry(&old->d_seq, nd->seq))
1893 return ERR_PTR(-ECHILD);
1894 if (unlikely(!path_connected(nd->path.mnt, parent)))
1895 return ERR_PTR(-ECHILD);
1896 return parent;
1897 in_root:
1898 if (read_seqretry(&mount_lock, nd->m_seq))
1899 return ERR_PTR(-ECHILD);
1900 if (unlikely(nd->flags & LOOKUP_BENEATH))
1901 return ERR_PTR(-ECHILD);
1902 nd->next_seq = nd->seq;
1903 return nd->path.dentry;
1904 }
1905
1906 static struct dentry *follow_dotdot(struct nameidata *nd)
1907 {
1908 struct dentry *parent;
1909
1910 if (path_equal(&nd->path, &nd->root))
1911 goto in_root;
1912 if (unlikely(nd->path.dentry == nd->path.mnt->mnt_root)) {
1913 struct path path;
1914
1915 if (!choose_mountpoint(real_mount(nd->path.mnt),
1916 &nd->root, &path))
1917 goto in_root;
1918 path_put(&nd->path);
1919 nd->path = path;
1920 nd->inode = path.dentry->d_inode;
1921 if (unlikely(nd->flags & LOOKUP_NO_XDEV))
1922 return ERR_PTR(-EXDEV);
1923 }
1924
1925 parent = dget_parent(nd->path.dentry);
1926 if (unlikely(!path_connected(nd->path.mnt, parent))) {
1927 dput(parent);
1928 return ERR_PTR(-ENOENT);
1929 }
1930 return parent;
1931
1932 in_root:
1933 if (unlikely(nd->flags & LOOKUP_BENEATH))
1934 return ERR_PTR(-EXDEV);
1935 return dget(nd->path.dentry);
1936 }
1937
1938 static const char *handle_dots(struct nameidata *nd, int type)
1939 {
1940 if (type == LAST_DOTDOT) {
1941 const char *error = NULL;
1942 struct dentry *parent;
1943
1944 if (!nd->root.mnt) {
1945 error = ERR_PTR(set_root(nd));
1946 if (error)
1947 return error;
1948 }
1949 if (nd->flags & LOOKUP_RCU)
1950 parent = follow_dotdot_rcu(nd);
1951 else
1952 parent = follow_dotdot(nd);
1953 if (IS_ERR(parent))
1954 return ERR_CAST(parent);
1955 error = step_into(nd, WALK_NOFOLLOW, parent);
1956 if (unlikely(error))
1957 return error;
1958
1959 if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) {
1960
1961
1962
1963
1964
1965
1966 smp_rmb();
1967 if (__read_seqcount_retry(&mount_lock.seqcount, nd->m_seq))
1968 return ERR_PTR(-EAGAIN);
1969 if (__read_seqcount_retry(&rename_lock.seqcount, nd->r_seq))
1970 return ERR_PTR(-EAGAIN);
1971 }
1972 }
1973 return NULL;
1974 }
1975
1976 static const char *walk_component(struct nameidata *nd, int flags)
1977 {
1978 struct dentry *dentry;
1979
1980
1981
1982
1983
1984 if (unlikely(nd->last_type != LAST_NORM)) {
1985 if (!(flags & WALK_MORE) && nd->depth)
1986 put_link(nd);
1987 return handle_dots(nd, nd->last_type);
1988 }
1989 dentry = lookup_fast(nd);
1990 if (IS_ERR(dentry))
1991 return ERR_CAST(dentry);
1992 if (unlikely(!dentry)) {
1993 dentry = lookup_slow(&nd->last, nd->path.dentry, nd->flags);
1994 if (IS_ERR(dentry))
1995 return ERR_CAST(dentry);
1996 }
1997 if (!(flags & WALK_MORE) && nd->depth)
1998 put_link(nd);
1999 return step_into(nd, flags, dentry);
2000 }
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019 #ifdef CONFIG_DCACHE_WORD_ACCESS
2020
2021 #include <asm/word-at-a-time.h>
2022
2023 #ifdef HASH_MIX
2024
2025
2026
2027 #elif defined(CONFIG_64BIT)
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057 #define HASH_MIX(x, y, a) \
2058 ( x ^= (a), \
2059 y ^= x, x = rol64(x,12),\
2060 x += y, y = rol64(y,45),\
2061 y *= 9 )
2062
2063
2064
2065
2066
2067
2068 static inline unsigned int fold_hash(unsigned long x, unsigned long y)
2069 {
2070 y ^= x * GOLDEN_RATIO_64;
2071 y *= GOLDEN_RATIO_64;
2072 return y >> 32;
2073 }
2074
2075 #else
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087 #define HASH_MIX(x, y, a) \
2088 ( x ^= (a), \
2089 y ^= x, x = rol32(x, 7),\
2090 x += y, y = rol32(y,20),\
2091 y *= 9 )
2092
2093 static inline unsigned int fold_hash(unsigned long x, unsigned long y)
2094 {
2095
2096 return __hash_32(y ^ __hash_32(x));
2097 }
2098
2099 #endif
2100
2101
2102
2103
2104
2105
2106
2107
2108 unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
2109 {
2110 unsigned long a, x = 0, y = (unsigned long)salt;
2111
2112 for (;;) {
2113 if (!len)
2114 goto done;
2115 a = load_unaligned_zeropad(name);
2116 if (len < sizeof(unsigned long))
2117 break;
2118 HASH_MIX(x, y, a);
2119 name += sizeof(unsigned long);
2120 len -= sizeof(unsigned long);
2121 }
2122 x ^= a & bytemask_from_count(len);
2123 done:
2124 return fold_hash(x, y);
2125 }
2126 EXPORT_SYMBOL(full_name_hash);
2127
2128
2129 u64 hashlen_string(const void *salt, const char *name)
2130 {
2131 unsigned long a = 0, x = 0, y = (unsigned long)salt;
2132 unsigned long adata, mask, len;
2133 const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
2134
2135 len = 0;
2136 goto inside;
2137
2138 do {
2139 HASH_MIX(x, y, a);
2140 len += sizeof(unsigned long);
2141 inside:
2142 a = load_unaligned_zeropad(name+len);
2143 } while (!has_zero(a, &adata, &constants));
2144
2145 adata = prep_zero_mask(a, adata, &constants);
2146 mask = create_zero_mask(adata);
2147 x ^= a & zero_bytemask(mask);
2148
2149 return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2150 }
2151 EXPORT_SYMBOL(hashlen_string);
2152
2153
2154
2155
2156
2157 static inline u64 hash_name(const void *salt, const char *name)
2158 {
2159 unsigned long a = 0, b, x = 0, y = (unsigned long)salt;
2160 unsigned long adata, bdata, mask, len;
2161 const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS;
2162
2163 len = 0;
2164 goto inside;
2165
2166 do {
2167 HASH_MIX(x, y, a);
2168 len += sizeof(unsigned long);
2169 inside:
2170 a = load_unaligned_zeropad(name+len);
2171 b = a ^ REPEAT_BYTE('/');
2172 } while (!(has_zero(a, &adata, &constants) | has_zero(b, &bdata, &constants)));
2173
2174 adata = prep_zero_mask(a, adata, &constants);
2175 bdata = prep_zero_mask(b, bdata, &constants);
2176 mask = create_zero_mask(adata | bdata);
2177 x ^= a & zero_bytemask(mask);
2178
2179 return hashlen_create(fold_hash(x, y), len + find_zero(mask));
2180 }
2181
2182 #else
2183
2184
2185 unsigned int full_name_hash(const void *salt, const char *name, unsigned int len)
2186 {
2187 unsigned long hash = init_name_hash(salt);
2188 while (len--)
2189 hash = partial_name_hash((unsigned char)*name++, hash);
2190 return end_name_hash(hash);
2191 }
2192 EXPORT_SYMBOL(full_name_hash);
2193
2194
2195 u64 hashlen_string(const void *salt, const char *name)
2196 {
2197 unsigned long hash = init_name_hash(salt);
2198 unsigned long len = 0, c;
2199
2200 c = (unsigned char)*name;
2201 while (c) {
2202 len++;
2203 hash = partial_name_hash(c, hash);
2204 c = (unsigned char)name[len];
2205 }
2206 return hashlen_create(end_name_hash(hash), len);
2207 }
2208 EXPORT_SYMBOL(hashlen_string);
2209
2210
2211
2212
2213
2214 static inline u64 hash_name(const void *salt, const char *name)
2215 {
2216 unsigned long hash = init_name_hash(salt);
2217 unsigned long len = 0, c;
2218
2219 c = (unsigned char)*name;
2220 do {
2221 len++;
2222 hash = partial_name_hash(c, hash);
2223 c = (unsigned char)name[len];
2224 } while (c && c != '/');
2225 return hashlen_create(end_name_hash(hash), len);
2226 }
2227
2228 #endif
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238 static int link_path_walk(const char *name, struct nameidata *nd)
2239 {
2240 int depth = 0;
2241 int err;
2242
2243 nd->last_type = LAST_ROOT;
2244 nd->flags |= LOOKUP_PARENT;
2245 if (IS_ERR(name))
2246 return PTR_ERR(name);
2247 while (*name=='/')
2248 name++;
2249 if (!*name) {
2250 nd->dir_mode = 0;
2251 return 0;
2252 }
2253
2254
2255 for(;;) {
2256 struct user_namespace *mnt_userns;
2257 const char *link;
2258 u64 hash_len;
2259 int type;
2260
2261 mnt_userns = mnt_user_ns(nd->path.mnt);
2262 err = may_lookup(mnt_userns, nd);
2263 if (err)
2264 return err;
2265
2266 hash_len = hash_name(nd->path.dentry, name);
2267
2268 type = LAST_NORM;
2269 if (name[0] == '.') switch (hashlen_len(hash_len)) {
2270 case 2:
2271 if (name[1] == '.') {
2272 type = LAST_DOTDOT;
2273 nd->state |= ND_JUMPED;
2274 }
2275 break;
2276 case 1:
2277 type = LAST_DOT;
2278 }
2279 if (likely(type == LAST_NORM)) {
2280 struct dentry *parent = nd->path.dentry;
2281 nd->state &= ~ND_JUMPED;
2282 if (unlikely(parent->d_flags & DCACHE_OP_HASH)) {
2283 struct qstr this = { { .hash_len = hash_len }, .name = name };
2284 err = parent->d_op->d_hash(parent, &this);
2285 if (err < 0)
2286 return err;
2287 hash_len = this.hash_len;
2288 name = this.name;
2289 }
2290 }
2291
2292 nd->last.hash_len = hash_len;
2293 nd->last.name = name;
2294 nd->last_type = type;
2295
2296 name += hashlen_len(hash_len);
2297 if (!*name)
2298 goto OK;
2299
2300
2301
2302
2303 do {
2304 name++;
2305 } while (unlikely(*name == '/'));
2306 if (unlikely(!*name)) {
2307 OK:
2308
2309 if (!depth) {
2310 nd->dir_uid = i_uid_into_mnt(mnt_userns, nd->inode);
2311 nd->dir_mode = nd->inode->i_mode;
2312 nd->flags &= ~LOOKUP_PARENT;
2313 return 0;
2314 }
2315
2316 name = nd->stack[--depth].name;
2317 link = walk_component(nd, 0);
2318 } else {
2319
2320 link = walk_component(nd, WALK_MORE);
2321 }
2322 if (unlikely(link)) {
2323 if (IS_ERR(link))
2324 return PTR_ERR(link);
2325
2326 nd->stack[depth++].name = name;
2327 name = link;
2328 continue;
2329 }
2330 if (unlikely(!d_can_lookup(nd->path.dentry))) {
2331 if (nd->flags & LOOKUP_RCU) {
2332 if (!try_to_unlazy(nd))
2333 return -ECHILD;
2334 }
2335 return -ENOTDIR;
2336 }
2337 }
2338 }
2339
2340
2341 static const char *path_init(struct nameidata *nd, unsigned flags)
2342 {
2343 int error;
2344 const char *s = nd->name->name;
2345
2346
2347 if ((flags & (LOOKUP_RCU | LOOKUP_CACHED)) == LOOKUP_CACHED)
2348 return ERR_PTR(-EAGAIN);
2349
2350 if (!*s)
2351 flags &= ~LOOKUP_RCU;
2352 if (flags & LOOKUP_RCU)
2353 rcu_read_lock();
2354 else
2355 nd->seq = nd->next_seq = 0;
2356
2357 nd->flags = flags;
2358 nd->state |= ND_JUMPED;
2359
2360 nd->m_seq = __read_seqcount_begin(&mount_lock.seqcount);
2361 nd->r_seq = __read_seqcount_begin(&rename_lock.seqcount);
2362 smp_rmb();
2363
2364 if (nd->state & ND_ROOT_PRESET) {
2365 struct dentry *root = nd->root.dentry;
2366 struct inode *inode = root->d_inode;
2367 if (*s && unlikely(!d_can_lookup(root)))
2368 return ERR_PTR(-ENOTDIR);
2369 nd->path = nd->root;
2370 nd->inode = inode;
2371 if (flags & LOOKUP_RCU) {
2372 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
2373 nd->root_seq = nd->seq;
2374 } else {
2375 path_get(&nd->path);
2376 }
2377 return s;
2378 }
2379
2380 nd->root.mnt = NULL;
2381
2382
2383 if (*s == '/' && !(flags & LOOKUP_IN_ROOT)) {
2384 error = nd_jump_root(nd);
2385 if (unlikely(error))
2386 return ERR_PTR(error);
2387 return s;
2388 }
2389
2390
2391 if (nd->dfd == AT_FDCWD) {
2392 if (flags & LOOKUP_RCU) {
2393 struct fs_struct *fs = current->fs;
2394 unsigned seq;
2395
2396 do {
2397 seq = read_seqcount_begin(&fs->seq);
2398 nd->path = fs->pwd;
2399 nd->inode = nd->path.dentry->d_inode;
2400 nd->seq = __read_seqcount_begin(&nd->path.dentry->d_seq);
2401 } while (read_seqcount_retry(&fs->seq, seq));
2402 } else {
2403 get_fs_pwd(current->fs, &nd->path);
2404 nd->inode = nd->path.dentry->d_inode;
2405 }
2406 } else {
2407
2408 struct fd f = fdget_raw(nd->dfd);
2409 struct dentry *dentry;
2410
2411 if (!f.file)
2412 return ERR_PTR(-EBADF);
2413
2414 dentry = f.file->f_path.dentry;
2415
2416 if (*s && unlikely(!d_can_lookup(dentry))) {
2417 fdput(f);
2418 return ERR_PTR(-ENOTDIR);
2419 }
2420
2421 nd->path = f.file->f_path;
2422 if (flags & LOOKUP_RCU) {
2423 nd->inode = nd->path.dentry->d_inode;
2424 nd->seq = read_seqcount_begin(&nd->path.dentry->d_seq);
2425 } else {
2426 path_get(&nd->path);
2427 nd->inode = nd->path.dentry->d_inode;
2428 }
2429 fdput(f);
2430 }
2431
2432
2433 if (flags & LOOKUP_IS_SCOPED) {
2434 nd->root = nd->path;
2435 if (flags & LOOKUP_RCU) {
2436 nd->root_seq = nd->seq;
2437 } else {
2438 path_get(&nd->root);
2439 nd->state |= ND_ROOT_GRABBED;
2440 }
2441 }
2442 return s;
2443 }
2444
2445 static inline const char *lookup_last(struct nameidata *nd)
2446 {
2447 if (nd->last_type == LAST_NORM && nd->last.name[nd->last.len])
2448 nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
2449
2450 return walk_component(nd, WALK_TRAILING);
2451 }
2452
2453 static int handle_lookup_down(struct nameidata *nd)
2454 {
2455 if (!(nd->flags & LOOKUP_RCU))
2456 dget(nd->path.dentry);
2457 nd->next_seq = nd->seq;
2458 return PTR_ERR(step_into(nd, WALK_NOFOLLOW, nd->path.dentry));
2459 }
2460
2461
2462 static int path_lookupat(struct nameidata *nd, unsigned flags, struct path *path)
2463 {
2464 const char *s = path_init(nd, flags);
2465 int err;
2466
2467 if (unlikely(flags & LOOKUP_DOWN) && !IS_ERR(s)) {
2468 err = handle_lookup_down(nd);
2469 if (unlikely(err < 0))
2470 s = ERR_PTR(err);
2471 }
2472
2473 while (!(err = link_path_walk(s, nd)) &&
2474 (s = lookup_last(nd)) != NULL)
2475 ;
2476 if (!err && unlikely(nd->flags & LOOKUP_MOUNTPOINT)) {
2477 err = handle_lookup_down(nd);
2478 nd->state &= ~ND_JUMPED;
2479 }
2480 if (!err)
2481 err = complete_walk(nd);
2482
2483 if (!err && nd->flags & LOOKUP_DIRECTORY)
2484 if (!d_can_lookup(nd->path.dentry))
2485 err = -ENOTDIR;
2486 if (!err) {
2487 *path = nd->path;
2488 nd->path.mnt = NULL;
2489 nd->path.dentry = NULL;
2490 }
2491 terminate_walk(nd);
2492 return err;
2493 }
2494
2495 int filename_lookup(int dfd, struct filename *name, unsigned flags,
2496 struct path *path, struct path *root)
2497 {
2498 int retval;
2499 struct nameidata nd;
2500 if (IS_ERR(name))
2501 return PTR_ERR(name);
2502 set_nameidata(&nd, dfd, name, root);
2503 retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
2504 if (unlikely(retval == -ECHILD))
2505 retval = path_lookupat(&nd, flags, path);
2506 if (unlikely(retval == -ESTALE))
2507 retval = path_lookupat(&nd, flags | LOOKUP_REVAL, path);
2508
2509 if (likely(!retval))
2510 audit_inode(name, path->dentry,
2511 flags & LOOKUP_MOUNTPOINT ? AUDIT_INODE_NOEVAL : 0);
2512 restore_nameidata();
2513 return retval;
2514 }
2515
2516
2517 static int path_parentat(struct nameidata *nd, unsigned flags,
2518 struct path *parent)
2519 {
2520 const char *s = path_init(nd, flags);
2521 int err = link_path_walk(s, nd);
2522 if (!err)
2523 err = complete_walk(nd);
2524 if (!err) {
2525 *parent = nd->path;
2526 nd->path.mnt = NULL;
2527 nd->path.dentry = NULL;
2528 }
2529 terminate_walk(nd);
2530 return err;
2531 }
2532
2533
2534 static int filename_parentat(int dfd, struct filename *name,
2535 unsigned int flags, struct path *parent,
2536 struct qstr *last, int *type)
2537 {
2538 int retval;
2539 struct nameidata nd;
2540
2541 if (IS_ERR(name))
2542 return PTR_ERR(name);
2543 set_nameidata(&nd, dfd, name, NULL);
2544 retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
2545 if (unlikely(retval == -ECHILD))
2546 retval = path_parentat(&nd, flags, parent);
2547 if (unlikely(retval == -ESTALE))
2548 retval = path_parentat(&nd, flags | LOOKUP_REVAL, parent);
2549 if (likely(!retval)) {
2550 *last = nd.last;
2551 *type = nd.last_type;
2552 audit_inode(name, parent->dentry, AUDIT_INODE_PARENT);
2553 }
2554 restore_nameidata();
2555 return retval;
2556 }
2557
2558
2559 static struct dentry *__kern_path_locked(struct filename *name, struct path *path)
2560 {
2561 struct dentry *d;
2562 struct qstr last;
2563 int type, error;
2564
2565 error = filename_parentat(AT_FDCWD, name, 0, path, &last, &type);
2566 if (error)
2567 return ERR_PTR(error);
2568 if (unlikely(type != LAST_NORM)) {
2569 path_put(path);
2570 return ERR_PTR(-EINVAL);
2571 }
2572 inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
2573 d = __lookup_hash(&last, path->dentry, 0);
2574 if (IS_ERR(d)) {
2575 inode_unlock(path->dentry->d_inode);
2576 path_put(path);
2577 }
2578 return d;
2579 }
2580
2581 struct dentry *kern_path_locked(const char *name, struct path *path)
2582 {
2583 struct filename *filename = getname_kernel(name);
2584 struct dentry *res = __kern_path_locked(filename, path);
2585
2586 putname(filename);
2587 return res;
2588 }
2589
2590 int kern_path(const char *name, unsigned int flags, struct path *path)
2591 {
2592 struct filename *filename = getname_kernel(name);
2593 int ret = filename_lookup(AT_FDCWD, filename, flags, path, NULL);
2594
2595 putname(filename);
2596 return ret;
2597
2598 }
2599 EXPORT_SYMBOL(kern_path);
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609 int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
2610 const char *name, unsigned int flags,
2611 struct path *path)
2612 {
2613 struct filename *filename;
2614 struct path root = {.mnt = mnt, .dentry = dentry};
2615 int ret;
2616
2617 filename = getname_kernel(name);
2618
2619 ret = filename_lookup(AT_FDCWD, filename, flags, path, &root);
2620 putname(filename);
2621 return ret;
2622 }
2623 EXPORT_SYMBOL(vfs_path_lookup);
2624
2625 static int lookup_one_common(struct user_namespace *mnt_userns,
2626 const char *name, struct dentry *base, int len,
2627 struct qstr *this)
2628 {
2629 this->name = name;
2630 this->len = len;
2631 this->hash = full_name_hash(base, name, len);
2632 if (!len)
2633 return -EACCES;
2634
2635 if (unlikely(name[0] == '.')) {
2636 if (len < 2 || (len == 2 && name[1] == '.'))
2637 return -EACCES;
2638 }
2639
2640 while (len--) {
2641 unsigned int c = *(const unsigned char *)name++;
2642 if (c == '/' || c == '\0')
2643 return -EACCES;
2644 }
2645
2646
2647
2648
2649 if (base->d_flags & DCACHE_OP_HASH) {
2650 int err = base->d_op->d_hash(base, this);
2651 if (err < 0)
2652 return err;
2653 }
2654
2655 return inode_permission(mnt_userns, base->d_inode, MAY_EXEC);
2656 }
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672 struct dentry *try_lookup_one_len(const char *name, struct dentry *base, int len)
2673 {
2674 struct qstr this;
2675 int err;
2676
2677 WARN_ON_ONCE(!inode_is_locked(base->d_inode));
2678
2679 err = lookup_one_common(&init_user_ns, name, base, len, &this);
2680 if (err)
2681 return ERR_PTR(err);
2682
2683 return lookup_dcache(&this, base, 0);
2684 }
2685 EXPORT_SYMBOL(try_lookup_one_len);
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
2699 {
2700 struct dentry *dentry;
2701 struct qstr this;
2702 int err;
2703
2704 WARN_ON_ONCE(!inode_is_locked(base->d_inode));
2705
2706 err = lookup_one_common(&init_user_ns, name, base, len, &this);
2707 if (err)
2708 return ERR_PTR(err);
2709
2710 dentry = lookup_dcache(&this, base, 0);
2711 return dentry ? dentry : __lookup_slow(&this, base, 0);
2712 }
2713 EXPORT_SYMBOL(lookup_one_len);
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727 struct dentry *lookup_one(struct user_namespace *mnt_userns, const char *name,
2728 struct dentry *base, int len)
2729 {
2730 struct dentry *dentry;
2731 struct qstr this;
2732 int err;
2733
2734 WARN_ON_ONCE(!inode_is_locked(base->d_inode));
2735
2736 err = lookup_one_common(mnt_userns, name, base, len, &this);
2737 if (err)
2738 return ERR_PTR(err);
2739
2740 dentry = lookup_dcache(&this, base, 0);
2741 return dentry ? dentry : __lookup_slow(&this, base, 0);
2742 }
2743 EXPORT_SYMBOL(lookup_one);
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758 struct dentry *lookup_one_unlocked(struct user_namespace *mnt_userns,
2759 const char *name, struct dentry *base,
2760 int len)
2761 {
2762 struct qstr this;
2763 int err;
2764 struct dentry *ret;
2765
2766 err = lookup_one_common(mnt_userns, name, base, len, &this);
2767 if (err)
2768 return ERR_PTR(err);
2769
2770 ret = lookup_dcache(&this, base, 0);
2771 if (!ret)
2772 ret = lookup_slow(&this, base, 0);
2773 return ret;
2774 }
2775 EXPORT_SYMBOL(lookup_one_unlocked);
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797 struct dentry *lookup_one_positive_unlocked(struct user_namespace *mnt_userns,
2798 const char *name,
2799 struct dentry *base, int len)
2800 {
2801 struct dentry *ret = lookup_one_unlocked(mnt_userns, name, base, len);
2802
2803 if (!IS_ERR(ret) && d_flags_negative(smp_load_acquire(&ret->d_flags))) {
2804 dput(ret);
2805 ret = ERR_PTR(-ENOENT);
2806 }
2807 return ret;
2808 }
2809 EXPORT_SYMBOL(lookup_one_positive_unlocked);
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823 struct dentry *lookup_one_len_unlocked(const char *name,
2824 struct dentry *base, int len)
2825 {
2826 return lookup_one_unlocked(&init_user_ns, name, base, len);
2827 }
2828 EXPORT_SYMBOL(lookup_one_len_unlocked);
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838 struct dentry *lookup_positive_unlocked(const char *name,
2839 struct dentry *base, int len)
2840 {
2841 return lookup_one_positive_unlocked(&init_user_ns, name, base, len);
2842 }
2843 EXPORT_SYMBOL(lookup_positive_unlocked);
2844
2845 #ifdef CONFIG_UNIX98_PTYS
2846 int path_pts(struct path *path)
2847 {
2848
2849
2850
2851 struct dentry *parent = dget_parent(path->dentry);
2852 struct dentry *child;
2853 struct qstr this = QSTR_INIT("pts", 3);
2854
2855 if (unlikely(!path_connected(path->mnt, parent))) {
2856 dput(parent);
2857 return -ENOENT;
2858 }
2859 dput(path->dentry);
2860 path->dentry = parent;
2861 child = d_hash_and_lookup(parent, &this);
2862 if (!child)
2863 return -ENOENT;
2864
2865 path->dentry = child;
2866 dput(parent);
2867 follow_down(path);
2868 return 0;
2869 }
2870 #endif
2871
2872 int user_path_at_empty(int dfd, const char __user *name, unsigned flags,
2873 struct path *path, int *empty)
2874 {
2875 struct filename *filename = getname_flags(name, flags, empty);
2876 int ret = filename_lookup(dfd, filename, flags, path, NULL);
2877
2878 putname(filename);
2879 return ret;
2880 }
2881 EXPORT_SYMBOL(user_path_at_empty);
2882
2883 int __check_sticky(struct user_namespace *mnt_userns, struct inode *dir,
2884 struct inode *inode)
2885 {
2886 kuid_t fsuid = current_fsuid();
2887
2888 if (uid_eq(i_uid_into_mnt(mnt_userns, inode), fsuid))
2889 return 0;
2890 if (uid_eq(i_uid_into_mnt(mnt_userns, dir), fsuid))
2891 return 0;
2892 return !capable_wrt_inode_uidgid(mnt_userns, inode, CAP_FOWNER);
2893 }
2894 EXPORT_SYMBOL(__check_sticky);
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916 static int may_delete(struct user_namespace *mnt_userns, struct inode *dir,
2917 struct dentry *victim, bool isdir)
2918 {
2919 struct inode *inode = d_backing_inode(victim);
2920 int error;
2921
2922 if (d_is_negative(victim))
2923 return -ENOENT;
2924 BUG_ON(!inode);
2925
2926 BUG_ON(victim->d_parent->d_inode != dir);
2927
2928
2929 if (!uid_valid(i_uid_into_mnt(mnt_userns, inode)) ||
2930 !gid_valid(i_gid_into_mnt(mnt_userns, inode)))
2931 return -EOVERFLOW;
2932
2933 audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
2934
2935 error = inode_permission(mnt_userns, dir, MAY_WRITE | MAY_EXEC);
2936 if (error)
2937 return error;
2938 if (IS_APPEND(dir))
2939 return -EPERM;
2940
2941 if (check_sticky(mnt_userns, dir, inode) || IS_APPEND(inode) ||
2942 IS_IMMUTABLE(inode) || IS_SWAPFILE(inode) ||
2943 HAS_UNMAPPED_ID(mnt_userns, inode))
2944 return -EPERM;
2945 if (isdir) {
2946 if (!d_is_dir(victim))
2947 return -ENOTDIR;
2948 if (IS_ROOT(victim))
2949 return -EBUSY;
2950 } else if (d_is_dir(victim))
2951 return -EISDIR;
2952 if (IS_DEADDIR(dir))
2953 return -ENOENT;
2954 if (victim->d_flags & DCACHE_NFSFS_RENAMED)
2955 return -EBUSY;
2956 return 0;
2957 }
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968 static inline int may_create(struct user_namespace *mnt_userns,
2969 struct inode *dir, struct dentry *child)
2970 {
2971 audit_inode_child(dir, child, AUDIT_TYPE_CHILD_CREATE);
2972 if (child->d_inode)
2973 return -EEXIST;
2974 if (IS_DEADDIR(dir))
2975 return -ENOENT;
2976 if (!fsuidgid_has_mapping(dir->i_sb, mnt_userns))
2977 return -EOVERFLOW;
2978
2979 return inode_permission(mnt_userns, dir, MAY_WRITE | MAY_EXEC);
2980 }
2981
2982
2983
2984
2985 struct dentry *lock_rename(struct dentry *p1, struct dentry *p2)
2986 {
2987 struct dentry *p;
2988
2989 if (p1 == p2) {
2990 inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
2991 return NULL;
2992 }
2993
2994 mutex_lock(&p1->d_sb->s_vfs_rename_mutex);
2995
2996 p = d_ancestor(p2, p1);
2997 if (p) {
2998 inode_lock_nested(p2->d_inode, I_MUTEX_PARENT);
2999 inode_lock_nested(p1->d_inode, I_MUTEX_CHILD);
3000 return p;
3001 }
3002
3003 p = d_ancestor(p1, p2);
3004 if (p) {
3005 inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
3006 inode_lock_nested(p2->d_inode, I_MUTEX_CHILD);
3007 return p;
3008 }
3009
3010 inode_lock_nested(p1->d_inode, I_MUTEX_PARENT);
3011 inode_lock_nested(p2->d_inode, I_MUTEX_PARENT2);
3012 return NULL;
3013 }
3014 EXPORT_SYMBOL(lock_rename);
3015
3016 void unlock_rename(struct dentry *p1, struct dentry *p2)
3017 {
3018 inode_unlock(p1->d_inode);
3019 if (p1 != p2) {
3020 inode_unlock(p2->d_inode);
3021 mutex_unlock(&p1->d_sb->s_vfs_rename_mutex);
3022 }
3023 }
3024 EXPORT_SYMBOL(unlock_rename);
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038 static inline umode_t mode_strip_umask(const struct inode *dir, umode_t mode)
3039 {
3040 if (!IS_POSIXACL(dir))
3041 mode &= ~current_umask();
3042 return mode;
3043 }
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068 static inline umode_t vfs_prepare_mode(struct user_namespace *mnt_userns,
3069 const struct inode *dir, umode_t mode,
3070 umode_t mask_perms, umode_t type)
3071 {
3072 mode = mode_strip_sgid(mnt_userns, dir, mode);
3073 mode = mode_strip_umask(dir, mode);
3074
3075
3076
3077
3078
3079 mode &= (mask_perms & ~S_IFMT);
3080 mode |= (type & S_IFMT);
3081
3082 return mode;
3083 }
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101 int vfs_create(struct user_namespace *mnt_userns, struct inode *dir,
3102 struct dentry *dentry, umode_t mode, bool want_excl)
3103 {
3104 int error = may_create(mnt_userns, dir, dentry);
3105 if (error)
3106 return error;
3107
3108 if (!dir->i_op->create)
3109 return -EACCES;
3110
3111 mode = vfs_prepare_mode(mnt_userns, dir, mode, S_IALLUGO, S_IFREG);
3112 error = security_inode_create(dir, dentry, mode);
3113 if (error)
3114 return error;
3115 error = dir->i_op->create(mnt_userns, dir, dentry, mode, want_excl);
3116 if (!error)
3117 fsnotify_create(dir, dentry);
3118 return error;
3119 }
3120 EXPORT_SYMBOL(vfs_create);
3121
3122 int vfs_mkobj(struct dentry *dentry, umode_t mode,
3123 int (*f)(struct dentry *, umode_t, void *),
3124 void *arg)
3125 {
3126 struct inode *dir = dentry->d_parent->d_inode;
3127 int error = may_create(&init_user_ns, dir, dentry);
3128 if (error)
3129 return error;
3130
3131 mode &= S_IALLUGO;
3132 mode |= S_IFREG;
3133 error = security_inode_create(dir, dentry, mode);
3134 if (error)
3135 return error;
3136 error = f(dentry, mode, arg);
3137 if (!error)
3138 fsnotify_create(dir, dentry);
3139 return error;
3140 }
3141 EXPORT_SYMBOL(vfs_mkobj);
3142
3143 bool may_open_dev(const struct path *path)
3144 {
3145 return !(path->mnt->mnt_flags & MNT_NODEV) &&
3146 !(path->mnt->mnt_sb->s_iflags & SB_I_NODEV);
3147 }
3148
3149 static int may_open(struct user_namespace *mnt_userns, const struct path *path,
3150 int acc_mode, int flag)
3151 {
3152 struct dentry *dentry = path->dentry;
3153 struct inode *inode = dentry->d_inode;
3154 int error;
3155
3156 if (!inode)
3157 return -ENOENT;
3158
3159 switch (inode->i_mode & S_IFMT) {
3160 case S_IFLNK:
3161 return -ELOOP;
3162 case S_IFDIR:
3163 if (acc_mode & MAY_WRITE)
3164 return -EISDIR;
3165 if (acc_mode & MAY_EXEC)
3166 return -EACCES;
3167 break;
3168 case S_IFBLK:
3169 case S_IFCHR:
3170 if (!may_open_dev(path))
3171 return -EACCES;
3172 fallthrough;
3173 case S_IFIFO:
3174 case S_IFSOCK:
3175 if (acc_mode & MAY_EXEC)
3176 return -EACCES;
3177 flag &= ~O_TRUNC;
3178 break;
3179 case S_IFREG:
3180 if ((acc_mode & MAY_EXEC) && path_noexec(path))
3181 return -EACCES;
3182 break;
3183 }
3184
3185 error = inode_permission(mnt_userns, inode, MAY_OPEN | acc_mode);
3186 if (error)
3187 return error;
3188
3189
3190
3191
3192 if (IS_APPEND(inode)) {
3193 if ((flag & O_ACCMODE) != O_RDONLY && !(flag & O_APPEND))
3194 return -EPERM;
3195 if (flag & O_TRUNC)
3196 return -EPERM;
3197 }
3198
3199
3200 if (flag & O_NOATIME && !inode_owner_or_capable(mnt_userns, inode))
3201 return -EPERM;
3202
3203 return 0;
3204 }
3205
3206 static int handle_truncate(struct user_namespace *mnt_userns, struct file *filp)
3207 {
3208 const struct path *path = &filp->f_path;
3209 struct inode *inode = path->dentry->d_inode;
3210 int error = get_write_access(inode);
3211 if (error)
3212 return error;
3213
3214 error = security_path_truncate(path);
3215 if (!error) {
3216 error = do_truncate(mnt_userns, path->dentry, 0,
3217 ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
3218 filp);
3219 }
3220 put_write_access(inode);
3221 return error;
3222 }
3223
3224 static inline int open_to_namei_flags(int flag)
3225 {
3226 if ((flag & O_ACCMODE) == 3)
3227 flag--;
3228 return flag;
3229 }
3230
3231 static int may_o_create(struct user_namespace *mnt_userns,
3232 const struct path *dir, struct dentry *dentry,
3233 umode_t mode)
3234 {
3235 int error = security_path_mknod(dir, dentry, mode, 0);
3236 if (error)
3237 return error;
3238
3239 if (!fsuidgid_has_mapping(dir->dentry->d_sb, mnt_userns))
3240 return -EOVERFLOW;
3241
3242 error = inode_permission(mnt_userns, dir->dentry->d_inode,
3243 MAY_WRITE | MAY_EXEC);
3244 if (error)
3245 return error;
3246
3247 return security_inode_create(dir->dentry->d_inode, dentry, mode);
3248 }
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263 static struct dentry *atomic_open(struct nameidata *nd, struct dentry *dentry,
3264 struct file *file,
3265 int open_flag, umode_t mode)
3266 {
3267 struct dentry *const DENTRY_NOT_SET = (void *) -1UL;
3268 struct inode *dir = nd->path.dentry->d_inode;
3269 int error;
3270
3271 if (nd->flags & LOOKUP_DIRECTORY)
3272 open_flag |= O_DIRECTORY;
3273
3274 file->f_path.dentry = DENTRY_NOT_SET;
3275 file->f_path.mnt = nd->path.mnt;
3276 error = dir->i_op->atomic_open(dir, dentry, file,
3277 open_to_namei_flags(open_flag), mode);
3278 d_lookup_done(dentry);
3279 if (!error) {
3280 if (file->f_mode & FMODE_OPENED) {
3281 if (unlikely(dentry != file->f_path.dentry)) {
3282 dput(dentry);
3283 dentry = dget(file->f_path.dentry);
3284 }
3285 } else if (WARN_ON(file->f_path.dentry == DENTRY_NOT_SET)) {
3286 error = -EIO;
3287 } else {
3288 if (file->f_path.dentry) {
3289 dput(dentry);
3290 dentry = file->f_path.dentry;
3291 }
3292 if (unlikely(d_is_negative(dentry)))
3293 error = -ENOENT;
3294 }
3295 }
3296 if (error) {
3297 dput(dentry);
3298 dentry = ERR_PTR(error);
3299 }
3300 return dentry;
3301 }
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318 static struct dentry *lookup_open(struct nameidata *nd, struct file *file,
3319 const struct open_flags *op,
3320 bool got_write)
3321 {
3322 struct user_namespace *mnt_userns;
3323 struct dentry *dir = nd->path.dentry;
3324 struct inode *dir_inode = dir->d_inode;
3325 int open_flag = op->open_flag;
3326 struct dentry *dentry;
3327 int error, create_error = 0;
3328 umode_t mode = op->mode;
3329 DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
3330
3331 if (unlikely(IS_DEADDIR(dir_inode)))
3332 return ERR_PTR(-ENOENT);
3333
3334 file->f_mode &= ~FMODE_CREATED;
3335 dentry = d_lookup(dir, &nd->last);
3336 for (;;) {
3337 if (!dentry) {
3338 dentry = d_alloc_parallel(dir, &nd->last, &wq);
3339 if (IS_ERR(dentry))
3340 return dentry;
3341 }
3342 if (d_in_lookup(dentry))
3343 break;
3344
3345 error = d_revalidate(dentry, nd->flags);
3346 if (likely(error > 0))
3347 break;
3348 if (error)
3349 goto out_dput;
3350 d_invalidate(dentry);
3351 dput(dentry);
3352 dentry = NULL;
3353 }
3354 if (dentry->d_inode) {
3355
3356 return dentry;
3357 }
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368 if (unlikely(!got_write))
3369 open_flag &= ~O_TRUNC;
3370 mnt_userns = mnt_user_ns(nd->path.mnt);
3371 if (open_flag & O_CREAT) {
3372 if (open_flag & O_EXCL)
3373 open_flag &= ~O_TRUNC;
3374 mode = vfs_prepare_mode(mnt_userns, dir->d_inode, mode, mode, mode);
3375 if (likely(got_write))
3376 create_error = may_o_create(mnt_userns, &nd->path,
3377 dentry, mode);
3378 else
3379 create_error = -EROFS;
3380 }
3381 if (create_error)
3382 open_flag &= ~O_CREAT;
3383 if (dir_inode->i_op->atomic_open) {
3384 dentry = atomic_open(nd, dentry, file, open_flag, mode);
3385 if (unlikely(create_error) && dentry == ERR_PTR(-ENOENT))
3386 dentry = ERR_PTR(create_error);
3387 return dentry;
3388 }
3389
3390 if (d_in_lookup(dentry)) {
3391 struct dentry *res = dir_inode->i_op->lookup(dir_inode, dentry,
3392 nd->flags);
3393 d_lookup_done(dentry);
3394 if (unlikely(res)) {
3395 if (IS_ERR(res)) {
3396 error = PTR_ERR(res);
3397 goto out_dput;
3398 }
3399 dput(dentry);
3400 dentry = res;
3401 }
3402 }
3403
3404
3405 if (!dentry->d_inode && (open_flag & O_CREAT)) {
3406 file->f_mode |= FMODE_CREATED;
3407 audit_inode_child(dir_inode, dentry, AUDIT_TYPE_CHILD_CREATE);
3408 if (!dir_inode->i_op->create) {
3409 error = -EACCES;
3410 goto out_dput;
3411 }
3412
3413 error = dir_inode->i_op->create(mnt_userns, dir_inode, dentry,
3414 mode, open_flag & O_EXCL);
3415 if (error)
3416 goto out_dput;
3417 }
3418 if (unlikely(create_error) && !dentry->d_inode) {
3419 error = create_error;
3420 goto out_dput;
3421 }
3422 return dentry;
3423
3424 out_dput:
3425 dput(dentry);
3426 return ERR_PTR(error);
3427 }
3428
3429 static const char *open_last_lookups(struct nameidata *nd,
3430 struct file *file, const struct open_flags *op)
3431 {
3432 struct dentry *dir = nd->path.dentry;
3433 int open_flag = op->open_flag;
3434 bool got_write = false;
3435 struct dentry *dentry;
3436 const char *res;
3437
3438 nd->flags |= op->intent;
3439
3440 if (nd->last_type != LAST_NORM) {
3441 if (nd->depth)
3442 put_link(nd);
3443 return handle_dots(nd, nd->last_type);
3444 }
3445
3446 if (!(open_flag & O_CREAT)) {
3447 if (nd->last.name[nd->last.len])
3448 nd->flags |= LOOKUP_FOLLOW | LOOKUP_DIRECTORY;
3449
3450 dentry = lookup_fast(nd);
3451 if (IS_ERR(dentry))
3452 return ERR_CAST(dentry);
3453 if (likely(dentry))
3454 goto finish_lookup;
3455
3456 BUG_ON(nd->flags & LOOKUP_RCU);
3457 } else {
3458
3459 if (nd->flags & LOOKUP_RCU) {
3460 if (!try_to_unlazy(nd))
3461 return ERR_PTR(-ECHILD);
3462 }
3463 audit_inode(nd->name, dir, AUDIT_INODE_PARENT);
3464
3465 if (unlikely(nd->last.name[nd->last.len]))
3466 return ERR_PTR(-EISDIR);
3467 }
3468
3469 if (open_flag & (O_CREAT | O_TRUNC | O_WRONLY | O_RDWR)) {
3470 got_write = !mnt_want_write(nd->path.mnt);
3471
3472
3473
3474
3475
3476 }
3477 if (open_flag & O_CREAT)
3478 inode_lock(dir->d_inode);
3479 else
3480 inode_lock_shared(dir->d_inode);
3481 dentry = lookup_open(nd, file, op, got_write);
3482 if (!IS_ERR(dentry) && (file->f_mode & FMODE_CREATED))
3483 fsnotify_create(dir->d_inode, dentry);
3484 if (open_flag & O_CREAT)
3485 inode_unlock(dir->d_inode);
3486 else
3487 inode_unlock_shared(dir->d_inode);
3488
3489 if (got_write)
3490 mnt_drop_write(nd->path.mnt);
3491
3492 if (IS_ERR(dentry))
3493 return ERR_CAST(dentry);
3494
3495 if (file->f_mode & (FMODE_OPENED | FMODE_CREATED)) {
3496 dput(nd->path.dentry);
3497 nd->path.dentry = dentry;
3498 return NULL;
3499 }
3500
3501 finish_lookup:
3502 if (nd->depth)
3503 put_link(nd);
3504 res = step_into(nd, WALK_TRAILING, dentry);
3505 if (unlikely(res))
3506 nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL);
3507 return res;
3508 }
3509
3510
3511
3512
3513 static int do_open(struct nameidata *nd,
3514 struct file *file, const struct open_flags *op)
3515 {
3516 struct user_namespace *mnt_userns;
3517 int open_flag = op->open_flag;
3518 bool do_truncate;
3519 int acc_mode;
3520 int error;
3521
3522 if (!(file->f_mode & (FMODE_OPENED | FMODE_CREATED))) {
3523 error = complete_walk(nd);
3524 if (error)
3525 return error;
3526 }
3527 if (!(file->f_mode & FMODE_CREATED))
3528 audit_inode(nd->name, nd->path.dentry, 0);
3529 mnt_userns = mnt_user_ns(nd->path.mnt);
3530 if (open_flag & O_CREAT) {
3531 if ((open_flag & O_EXCL) && !(file->f_mode & FMODE_CREATED))
3532 return -EEXIST;
3533 if (d_is_dir(nd->path.dentry))
3534 return -EISDIR;
3535 error = may_create_in_sticky(mnt_userns, nd,
3536 d_backing_inode(nd->path.dentry));
3537 if (unlikely(error))
3538 return error;
3539 }
3540 if ((nd->flags & LOOKUP_DIRECTORY) && !d_can_lookup(nd->path.dentry))
3541 return -ENOTDIR;
3542
3543 do_truncate = false;
3544 acc_mode = op->acc_mode;
3545 if (file->f_mode & FMODE_CREATED) {
3546
3547 open_flag &= ~O_TRUNC;
3548 acc_mode = 0;
3549 } else if (d_is_reg(nd->path.dentry) && open_flag & O_TRUNC) {
3550 error = mnt_want_write(nd->path.mnt);
3551 if (error)
3552 return error;
3553 do_truncate = true;
3554 }
3555 error = may_open(mnt_userns, &nd->path, acc_mode, open_flag);
3556 if (!error && !(file->f_mode & FMODE_OPENED))
3557 error = vfs_open(&nd->path, file);
3558 if (!error)
3559 error = ima_file_check(file, op->acc_mode);
3560 if (!error && do_truncate)
3561 error = handle_truncate(mnt_userns, file);
3562 if (unlikely(error > 0)) {
3563 WARN_ON(1);
3564 error = -EINVAL;
3565 }
3566 if (do_truncate)
3567 mnt_drop_write(nd->path.mnt);
3568 return error;
3569 }
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586 struct dentry *vfs_tmpfile(struct user_namespace *mnt_userns,
3587 struct dentry *dentry, umode_t mode, int open_flag)
3588 {
3589 struct dentry *child = NULL;
3590 struct inode *dir = dentry->d_inode;
3591 struct inode *inode;
3592 int error;
3593
3594
3595 error = inode_permission(mnt_userns, dir, MAY_WRITE | MAY_EXEC);
3596 if (error)
3597 goto out_err;
3598 error = -EOPNOTSUPP;
3599 if (!dir->i_op->tmpfile)
3600 goto out_err;
3601 error = -ENOMEM;
3602 child = d_alloc(dentry, &slash_name);
3603 if (unlikely(!child))
3604 goto out_err;
3605 mode = vfs_prepare_mode(mnt_userns, dir, mode, mode, mode);
3606 error = dir->i_op->tmpfile(mnt_userns, dir, child, mode);
3607 if (error)
3608 goto out_err;
3609 error = -ENOENT;
3610 inode = child->d_inode;
3611 if (unlikely(!inode))
3612 goto out_err;
3613 if (!(open_flag & O_EXCL)) {
3614 spin_lock(&inode->i_lock);
3615 inode->i_state |= I_LINKABLE;
3616 spin_unlock(&inode->i_lock);
3617 }
3618 ima_post_create_tmpfile(mnt_userns, inode);
3619 return child;
3620
3621 out_err:
3622 dput(child);
3623 return ERR_PTR(error);
3624 }
3625 EXPORT_SYMBOL(vfs_tmpfile);
3626
3627 static int do_tmpfile(struct nameidata *nd, unsigned flags,
3628 const struct open_flags *op,
3629 struct file *file)
3630 {
3631 struct user_namespace *mnt_userns;
3632 struct dentry *child;
3633 struct path path;
3634 int error = path_lookupat(nd, flags | LOOKUP_DIRECTORY, &path);
3635 if (unlikely(error))
3636 return error;
3637 error = mnt_want_write(path.mnt);
3638 if (unlikely(error))
3639 goto out;
3640 mnt_userns = mnt_user_ns(path.mnt);
3641 child = vfs_tmpfile(mnt_userns, path.dentry, op->mode, op->open_flag);
3642 error = PTR_ERR(child);
3643 if (IS_ERR(child))
3644 goto out2;
3645 dput(path.dentry);
3646 path.dentry = child;
3647 audit_inode(nd->name, child, 0);
3648
3649 error = may_open(mnt_userns, &path, 0, op->open_flag);
3650 if (!error)
3651 error = vfs_open(&path, file);
3652 out2:
3653 mnt_drop_write(path.mnt);
3654 out:
3655 path_put(&path);
3656 return error;
3657 }
3658
3659 static int do_o_path(struct nameidata *nd, unsigned flags, struct file *file)
3660 {
3661 struct path path;
3662 int error = path_lookupat(nd, flags, &path);
3663 if (!error) {
3664 audit_inode(nd->name, path.dentry, 0);
3665 error = vfs_open(&path, file);
3666 path_put(&path);
3667 }
3668 return error;
3669 }
3670
3671 static struct file *path_openat(struct nameidata *nd,
3672 const struct open_flags *op, unsigned flags)
3673 {
3674 struct file *file;
3675 int error;
3676
3677 file = alloc_empty_file(op->open_flag, current_cred());
3678 if (IS_ERR(file))
3679 return file;
3680
3681 if (unlikely(file->f_flags & __O_TMPFILE)) {
3682 error = do_tmpfile(nd, flags, op, file);
3683 } else if (unlikely(file->f_flags & O_PATH)) {
3684 error = do_o_path(nd, flags, file);
3685 } else {
3686 const char *s = path_init(nd, flags);
3687 while (!(error = link_path_walk(s, nd)) &&
3688 (s = open_last_lookups(nd, file, op)) != NULL)
3689 ;
3690 if (!error)
3691 error = do_open(nd, file, op);
3692 terminate_walk(nd);
3693 }
3694 if (likely(!error)) {
3695 if (likely(file->f_mode & FMODE_OPENED))
3696 return file;
3697 WARN_ON(1);
3698 error = -EINVAL;
3699 }
3700 fput(file);
3701 if (error == -EOPENSTALE) {
3702 if (flags & LOOKUP_RCU)
3703 error = -ECHILD;
3704 else
3705 error = -ESTALE;
3706 }
3707 return ERR_PTR(error);
3708 }
3709
3710 struct file *do_filp_open(int dfd, struct filename *pathname,
3711 const struct open_flags *op)
3712 {
3713 struct nameidata nd;
3714 int flags = op->lookup_flags;
3715 struct file *filp;
3716
3717 set_nameidata(&nd, dfd, pathname, NULL);
3718 filp = path_openat(&nd, op, flags | LOOKUP_RCU);
3719 if (unlikely(filp == ERR_PTR(-ECHILD)))
3720 filp = path_openat(&nd, op, flags);
3721 if (unlikely(filp == ERR_PTR(-ESTALE)))
3722 filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3723 restore_nameidata();
3724 return filp;
3725 }
3726
3727 struct file *do_file_open_root(const struct path *root,
3728 const char *name, const struct open_flags *op)
3729 {
3730 struct nameidata nd;
3731 struct file *file;
3732 struct filename *filename;
3733 int flags = op->lookup_flags;
3734
3735 if (d_is_symlink(root->dentry) && op->intent & LOOKUP_OPEN)
3736 return ERR_PTR(-ELOOP);
3737
3738 filename = getname_kernel(name);
3739 if (IS_ERR(filename))
3740 return ERR_CAST(filename);
3741
3742 set_nameidata(&nd, -1, filename, root);
3743 file = path_openat(&nd, op, flags | LOOKUP_RCU);
3744 if (unlikely(file == ERR_PTR(-ECHILD)))
3745 file = path_openat(&nd, op, flags);
3746 if (unlikely(file == ERR_PTR(-ESTALE)))
3747 file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3748 restore_nameidata();
3749 putname(filename);
3750 return file;
3751 }
3752
3753 static struct dentry *filename_create(int dfd, struct filename *name,
3754 struct path *path, unsigned int lookup_flags)
3755 {
3756 struct dentry *dentry = ERR_PTR(-EEXIST);
3757 struct qstr last;
3758 bool want_dir = lookup_flags & LOOKUP_DIRECTORY;
3759 unsigned int reval_flag = lookup_flags & LOOKUP_REVAL;
3760 unsigned int create_flags = LOOKUP_CREATE | LOOKUP_EXCL;
3761 int type;
3762 int err2;
3763 int error;
3764
3765 error = filename_parentat(dfd, name, reval_flag, path, &last, &type);
3766 if (error)
3767 return ERR_PTR(error);
3768
3769
3770
3771
3772
3773 if (unlikely(type != LAST_NORM))
3774 goto out;
3775
3776
3777 err2 = mnt_want_write(path->mnt);
3778
3779
3780
3781
3782 if (last.name[last.len] && !want_dir)
3783 create_flags = 0;
3784 inode_lock_nested(path->dentry->d_inode, I_MUTEX_PARENT);
3785 dentry = __lookup_hash(&last, path->dentry, reval_flag | create_flags);
3786 if (IS_ERR(dentry))
3787 goto unlock;
3788
3789 error = -EEXIST;
3790 if (d_is_positive(dentry))
3791 goto fail;
3792
3793
3794
3795
3796
3797
3798
3799 if (unlikely(!create_flags)) {
3800 error = -ENOENT;
3801 goto fail;
3802 }
3803 if (unlikely(err2)) {
3804 error = err2;
3805 goto fail;
3806 }
3807 return dentry;
3808 fail:
3809 dput(dentry);
3810 dentry = ERR_PTR(error);
3811 unlock:
3812 inode_unlock(path->dentry->d_inode);
3813 if (!err2)
3814 mnt_drop_write(path->mnt);
3815 out:
3816 path_put(path);
3817 return dentry;
3818 }
3819
3820 struct dentry *kern_path_create(int dfd, const char *pathname,
3821 struct path *path, unsigned int lookup_flags)
3822 {
3823 struct filename *filename = getname_kernel(pathname);
3824 struct dentry *res = filename_create(dfd, filename, path, lookup_flags);
3825
3826 putname(filename);
3827 return res;
3828 }
3829 EXPORT_SYMBOL(kern_path_create);
3830
3831 void done_path_create(struct path *path, struct dentry *dentry)
3832 {
3833 dput(dentry);
3834 inode_unlock(path->dentry->d_inode);
3835 mnt_drop_write(path->mnt);
3836 path_put(path);
3837 }
3838 EXPORT_SYMBOL(done_path_create);
3839
3840 inline struct dentry *user_path_create(int dfd, const char __user *pathname,
3841 struct path *path, unsigned int lookup_flags)
3842 {
3843 struct filename *filename = getname(pathname);
3844 struct dentry *res = filename_create(dfd, filename, path, lookup_flags);
3845
3846 putname(filename);
3847 return res;
3848 }
3849 EXPORT_SYMBOL(user_path_create);
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867 int vfs_mknod(struct user_namespace *mnt_userns, struct inode *dir,
3868 struct dentry *dentry, umode_t mode, dev_t dev)
3869 {
3870 bool is_whiteout = S_ISCHR(mode) && dev == WHITEOUT_DEV;
3871 int error = may_create(mnt_userns, dir, dentry);
3872
3873 if (error)
3874 return error;
3875
3876 if ((S_ISCHR(mode) || S_ISBLK(mode)) && !is_whiteout &&
3877 !capable(CAP_MKNOD))
3878 return -EPERM;
3879
3880 if (!dir->i_op->mknod)
3881 return -EPERM;
3882
3883 mode = vfs_prepare_mode(mnt_userns, dir, mode, mode, mode);
3884 error = devcgroup_inode_mknod(mode, dev);
3885 if (error)
3886 return error;
3887
3888 error = security_inode_mknod(dir, dentry, mode, dev);
3889 if (error)
3890 return error;
3891
3892 error = dir->i_op->mknod(mnt_userns, dir, dentry, mode, dev);
3893 if (!error)
3894 fsnotify_create(dir, dentry);
3895 return error;
3896 }
3897 EXPORT_SYMBOL(vfs_mknod);
3898
3899 static int may_mknod(umode_t mode)
3900 {
3901 switch (mode & S_IFMT) {
3902 case S_IFREG:
3903 case S_IFCHR:
3904 case S_IFBLK:
3905 case S_IFIFO:
3906 case S_IFSOCK:
3907 case 0:
3908 return 0;
3909 case S_IFDIR:
3910 return -EPERM;
3911 default:
3912 return -EINVAL;
3913 }
3914 }
3915
3916 static int do_mknodat(int dfd, struct filename *name, umode_t mode,
3917 unsigned int dev)
3918 {
3919 struct user_namespace *mnt_userns;
3920 struct dentry *dentry;
3921 struct path path;
3922 int error;
3923 unsigned int lookup_flags = 0;
3924
3925 error = may_mknod(mode);
3926 if (error)
3927 goto out1;
3928 retry:
3929 dentry = filename_create(dfd, name, &path, lookup_flags);
3930 error = PTR_ERR(dentry);
3931 if (IS_ERR(dentry))
3932 goto out1;
3933
3934 error = security_path_mknod(&path, dentry,
3935 mode_strip_umask(path.dentry->d_inode, mode), dev);
3936 if (error)
3937 goto out2;
3938
3939 mnt_userns = mnt_user_ns(path.mnt);
3940 switch (mode & S_IFMT) {
3941 case 0: case S_IFREG:
3942 error = vfs_create(mnt_userns, path.dentry->d_inode,
3943 dentry, mode, true);
3944 if (!error)
3945 ima_post_path_mknod(mnt_userns, dentry);
3946 break;
3947 case S_IFCHR: case S_IFBLK:
3948 error = vfs_mknod(mnt_userns, path.dentry->d_inode,
3949 dentry, mode, new_decode_dev(dev));
3950 break;
3951 case S_IFIFO: case S_IFSOCK:
3952 error = vfs_mknod(mnt_userns, path.dentry->d_inode,
3953 dentry, mode, 0);
3954 break;
3955 }
3956 out2:
3957 done_path_create(&path, dentry);
3958 if (retry_estale(error, lookup_flags)) {
3959 lookup_flags |= LOOKUP_REVAL;
3960 goto retry;
3961 }
3962 out1:
3963 putname(name);
3964 return error;
3965 }
3966
3967 SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, umode_t, mode,
3968 unsigned int, dev)
3969 {
3970 return do_mknodat(dfd, getname(filename), mode, dev);
3971 }
3972
3973 SYSCALL_DEFINE3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev)
3974 {
3975 return do_mknodat(AT_FDCWD, getname(filename), mode, dev);
3976 }
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993 int vfs_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
3994 struct dentry *dentry, umode_t mode)
3995 {
3996 int error = may_create(mnt_userns, dir, dentry);
3997 unsigned max_links = dir->i_sb->s_max_links;
3998
3999 if (error)
4000 return error;
4001
4002 if (!dir->i_op->mkdir)
4003 return -EPERM;
4004
4005 mode = vfs_prepare_mode(mnt_userns, dir, mode, S_IRWXUGO | S_ISVTX, 0);
4006 error = security_inode_mkdir(dir, dentry, mode);
4007 if (error)
4008 return error;
4009
4010 if (max_links && dir->i_nlink >= max_links)
4011 return -EMLINK;
4012
4013 error = dir->i_op->mkdir(mnt_userns, dir, dentry, mode);
4014 if (!error)
4015 fsnotify_mkdir(dir, dentry);
4016 return error;
4017 }
4018 EXPORT_SYMBOL(vfs_mkdir);
4019
4020 int do_mkdirat(int dfd, struct filename *name, umode_t mode)
4021 {
4022 struct dentry *dentry;
4023 struct path path;
4024 int error;
4025 unsigned int lookup_flags = LOOKUP_DIRECTORY;
4026
4027 retry:
4028 dentry = filename_create(dfd, name, &path, lookup_flags);
4029 error = PTR_ERR(dentry);
4030 if (IS_ERR(dentry))
4031 goto out_putname;
4032
4033 error = security_path_mkdir(&path, dentry,
4034 mode_strip_umask(path.dentry->d_inode, mode));
4035 if (!error) {
4036 struct user_namespace *mnt_userns;
4037 mnt_userns = mnt_user_ns(path.mnt);
4038 error = vfs_mkdir(mnt_userns, path.dentry->d_inode, dentry,
4039 mode);
4040 }
4041 done_path_create(&path, dentry);
4042 if (retry_estale(error, lookup_flags)) {
4043 lookup_flags |= LOOKUP_REVAL;
4044 goto retry;
4045 }
4046 out_putname:
4047 putname(name);
4048 return error;
4049 }
4050
4051 SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode)
4052 {
4053 return do_mkdirat(dfd, getname(pathname), mode);
4054 }
4055
4056 SYSCALL_DEFINE2(mkdir, const char __user *, pathname, umode_t, mode)
4057 {
4058 return do_mkdirat(AT_FDCWD, getname(pathname), mode);
4059 }
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075 int vfs_rmdir(struct user_namespace *mnt_userns, struct inode *dir,
4076 struct dentry *dentry)
4077 {
4078 int error = may_delete(mnt_userns, dir, dentry, 1);
4079
4080 if (error)
4081 return error;
4082
4083 if (!dir->i_op->rmdir)
4084 return -EPERM;
4085
4086 dget(dentry);
4087 inode_lock(dentry->d_inode);
4088
4089 error = -EBUSY;
4090 if (is_local_mountpoint(dentry) ||
4091 (dentry->d_inode->i_flags & S_KERNEL_FILE))
4092 goto out;
4093
4094 error = security_inode_rmdir(dir, dentry);
4095 if (error)
4096 goto out;
4097
4098 error = dir->i_op->rmdir(dir, dentry);
4099 if (error)
4100 goto out;
4101
4102 shrink_dcache_parent(dentry);
4103 dentry->d_inode->i_flags |= S_DEAD;
4104 dont_mount(dentry);
4105 detach_mounts(dentry);
4106
4107 out:
4108 inode_unlock(dentry->d_inode);
4109 dput(dentry);
4110 if (!error)
4111 d_delete_notify(dir, dentry);
4112 return error;
4113 }
4114 EXPORT_SYMBOL(vfs_rmdir);
4115
4116 int do_rmdir(int dfd, struct filename *name)
4117 {
4118 struct user_namespace *mnt_userns;
4119 int error;
4120 struct dentry *dentry;
4121 struct path path;
4122 struct qstr last;
4123 int type;
4124 unsigned int lookup_flags = 0;
4125 retry:
4126 error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
4127 if (error)
4128 goto exit1;
4129
4130 switch (type) {
4131 case LAST_DOTDOT:
4132 error = -ENOTEMPTY;
4133 goto exit2;
4134 case LAST_DOT:
4135 error = -EINVAL;
4136 goto exit2;
4137 case LAST_ROOT:
4138 error = -EBUSY;
4139 goto exit2;
4140 }
4141
4142 error = mnt_want_write(path.mnt);
4143 if (error)
4144 goto exit2;
4145
4146 inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
4147 dentry = __lookup_hash(&last, path.dentry, lookup_flags);
4148 error = PTR_ERR(dentry);
4149 if (IS_ERR(dentry))
4150 goto exit3;
4151 if (!dentry->d_inode) {
4152 error = -ENOENT;
4153 goto exit4;
4154 }
4155 error = security_path_rmdir(&path, dentry);
4156 if (error)
4157 goto exit4;
4158 mnt_userns = mnt_user_ns(path.mnt);
4159 error = vfs_rmdir(mnt_userns, path.dentry->d_inode, dentry);
4160 exit4:
4161 dput(dentry);
4162 exit3:
4163 inode_unlock(path.dentry->d_inode);
4164 mnt_drop_write(path.mnt);
4165 exit2:
4166 path_put(&path);
4167 if (retry_estale(error, lookup_flags)) {
4168 lookup_flags |= LOOKUP_REVAL;
4169 goto retry;
4170 }
4171 exit1:
4172 putname(name);
4173 return error;
4174 }
4175
4176 SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
4177 {
4178 return do_rmdir(AT_FDCWD, getname(pathname));
4179 }
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206 int vfs_unlink(struct user_namespace *mnt_userns, struct inode *dir,
4207 struct dentry *dentry, struct inode **delegated_inode)
4208 {
4209 struct inode *target = dentry->d_inode;
4210 int error = may_delete(mnt_userns, dir, dentry, 0);
4211
4212 if (error)
4213 return error;
4214
4215 if (!dir->i_op->unlink)
4216 return -EPERM;
4217
4218 inode_lock(target);
4219 if (IS_SWAPFILE(target))
4220 error = -EPERM;
4221 else if (is_local_mountpoint(dentry))
4222 error = -EBUSY;
4223 else {
4224 error = security_inode_unlink(dir, dentry);
4225 if (!error) {
4226 error = try_break_deleg(target, delegated_inode);
4227 if (error)
4228 goto out;
4229 error = dir->i_op->unlink(dir, dentry);
4230 if (!error) {
4231 dont_mount(dentry);
4232 detach_mounts(dentry);
4233 }
4234 }
4235 }
4236 out:
4237 inode_unlock(target);
4238
4239
4240 if (!error && dentry->d_flags & DCACHE_NFSFS_RENAMED) {
4241 fsnotify_unlink(dir, dentry);
4242 } else if (!error) {
4243 fsnotify_link_count(target);
4244 d_delete_notify(dir, dentry);
4245 }
4246
4247 return error;
4248 }
4249 EXPORT_SYMBOL(vfs_unlink);
4250
4251
4252
4253
4254
4255
4256
4257 int do_unlinkat(int dfd, struct filename *name)
4258 {
4259 int error;
4260 struct dentry *dentry;
4261 struct path path;
4262 struct qstr last;
4263 int type;
4264 struct inode *inode = NULL;
4265 struct inode *delegated_inode = NULL;
4266 unsigned int lookup_flags = 0;
4267 retry:
4268 error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
4269 if (error)
4270 goto exit1;
4271
4272 error = -EISDIR;
4273 if (type != LAST_NORM)
4274 goto exit2;
4275
4276 error = mnt_want_write(path.mnt);
4277 if (error)
4278 goto exit2;
4279 retry_deleg:
4280 inode_lock_nested(path.dentry->d_inode, I_MUTEX_PARENT);
4281 dentry = __lookup_hash(&last, path.dentry, lookup_flags);
4282 error = PTR_ERR(dentry);
4283 if (!IS_ERR(dentry)) {
4284 struct user_namespace *mnt_userns;
4285
4286
4287 if (last.name[last.len])
4288 goto slashes;
4289 inode = dentry->d_inode;
4290 if (d_is_negative(dentry))
4291 goto slashes;
4292 ihold(inode);
4293 error = security_path_unlink(&path, dentry);
4294 if (error)
4295 goto exit3;
4296 mnt_userns = mnt_user_ns(path.mnt);
4297 error = vfs_unlink(mnt_userns, path.dentry->d_inode, dentry,
4298 &delegated_inode);
4299 exit3:
4300 dput(dentry);
4301 }
4302 inode_unlock(path.dentry->d_inode);
4303 if (inode)
4304 iput(inode);
4305 inode = NULL;
4306 if (delegated_inode) {
4307 error = break_deleg_wait(&delegated_inode);
4308 if (!error)
4309 goto retry_deleg;
4310 }
4311 mnt_drop_write(path.mnt);
4312 exit2:
4313 path_put(&path);
4314 if (retry_estale(error, lookup_flags)) {
4315 lookup_flags |= LOOKUP_REVAL;
4316 inode = NULL;
4317 goto retry;
4318 }
4319 exit1:
4320 putname(name);
4321 return error;
4322
4323 slashes:
4324 if (d_is_negative(dentry))
4325 error = -ENOENT;
4326 else if (d_is_dir(dentry))
4327 error = -EISDIR;
4328 else
4329 error = -ENOTDIR;
4330 goto exit3;
4331 }
4332
4333 SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
4334 {
4335 if ((flag & ~AT_REMOVEDIR) != 0)
4336 return -EINVAL;
4337
4338 if (flag & AT_REMOVEDIR)
4339 return do_rmdir(dfd, getname(pathname));
4340 return do_unlinkat(dfd, getname(pathname));
4341 }
4342
4343 SYSCALL_DEFINE1(unlink, const char __user *, pathname)
4344 {
4345 return do_unlinkat(AT_FDCWD, getname(pathname));
4346 }
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363 int vfs_symlink(struct user_namespace *mnt_userns, struct inode *dir,
4364 struct dentry *dentry, const char *oldname)
4365 {
4366 int error = may_create(mnt_userns, dir, dentry);
4367
4368 if (error)
4369 return error;
4370
4371 if (!dir->i_op->symlink)
4372 return -EPERM;
4373
4374 error = security_inode_symlink(dir, dentry, oldname);
4375 if (error)
4376 return error;
4377
4378 error = dir->i_op->symlink(mnt_userns, dir, dentry, oldname);
4379 if (!error)
4380 fsnotify_create(dir, dentry);
4381 return error;
4382 }
4383 EXPORT_SYMBOL(vfs_symlink);
4384
4385 int do_symlinkat(struct filename *from, int newdfd, struct filename *to)
4386 {
4387 int error;
4388 struct dentry *dentry;
4389 struct path path;
4390 unsigned int lookup_flags = 0;
4391
4392 if (IS_ERR(from)) {
4393 error = PTR_ERR(from);
4394 goto out_putnames;
4395 }
4396 retry:
4397 dentry = filename_create(newdfd, to, &path, lookup_flags);
4398 error = PTR_ERR(dentry);
4399 if (IS_ERR(dentry))
4400 goto out_putnames;
4401
4402 error = security_path_symlink(&path, dentry, from->name);
4403 if (!error) {
4404 struct user_namespace *mnt_userns;
4405
4406 mnt_userns = mnt_user_ns(path.mnt);
4407 error = vfs_symlink(mnt_userns, path.dentry->d_inode, dentry,
4408 from->name);
4409 }
4410 done_path_create(&path, dentry);
4411 if (retry_estale(error, lookup_flags)) {
4412 lookup_flags |= LOOKUP_REVAL;
4413 goto retry;
4414 }
4415 out_putnames:
4416 putname(to);
4417 putname(from);
4418 return error;
4419 }
4420
4421 SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
4422 int, newdfd, const char __user *, newname)
4423 {
4424 return do_symlinkat(getname(oldname), newdfd, getname(newname));
4425 }
4426
4427 SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
4428 {
4429 return do_symlinkat(getname(oldname), AT_FDCWD, getname(newname));
4430 }
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458 int vfs_link(struct dentry *old_dentry, struct user_namespace *mnt_userns,
4459 struct inode *dir, struct dentry *new_dentry,
4460 struct inode **delegated_inode)
4461 {
4462 struct inode *inode = old_dentry->d_inode;
4463 unsigned max_links = dir->i_sb->s_max_links;
4464 int error;
4465
4466 if (!inode)
4467 return -ENOENT;
4468
4469 error = may_create(mnt_userns, dir, new_dentry);
4470 if (error)
4471 return error;
4472
4473 if (dir->i_sb != inode->i_sb)
4474 return -EXDEV;
4475
4476
4477
4478
4479 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
4480 return -EPERM;
4481
4482
4483
4484
4485
4486 if (HAS_UNMAPPED_ID(mnt_userns, inode))
4487 return -EPERM;
4488 if (!dir->i_op->link)
4489 return -EPERM;
4490 if (S_ISDIR(inode->i_mode))
4491 return -EPERM;
4492
4493 error = security_inode_link(old_dentry, dir, new_dentry);
4494 if (error)
4495 return error;
4496
4497 inode_lock(inode);
4498
4499 if (inode->i_nlink == 0 && !(inode->i_state & I_LINKABLE))
4500 error = -ENOENT;
4501 else if (max_links && inode->i_nlink >= max_links)
4502 error = -EMLINK;
4503 else {
4504 error = try_break_deleg(inode, delegated_inode);
4505 if (!error)
4506 error = dir->i_op->link(old_dentry, dir, new_dentry);
4507 }
4508
4509 if (!error && (inode->i_state & I_LINKABLE)) {
4510 spin_lock(&inode->i_lock);
4511 inode->i_state &= ~I_LINKABLE;
4512 spin_unlock(&inode->i_lock);
4513 }
4514 inode_unlock(inode);
4515 if (!error)
4516 fsnotify_link(dir, inode, new_dentry);
4517 return error;
4518 }
4519 EXPORT_SYMBOL(vfs_link);
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530 int do_linkat(int olddfd, struct filename *old, int newdfd,
4531 struct filename *new, int flags)
4532 {
4533 struct user_namespace *mnt_userns;
4534 struct dentry *new_dentry;
4535 struct path old_path, new_path;
4536 struct inode *delegated_inode = NULL;
4537 int how = 0;
4538 int error;
4539
4540 if ((flags & ~(AT_SYMLINK_FOLLOW | AT_EMPTY_PATH)) != 0) {
4541 error = -EINVAL;
4542 goto out_putnames;
4543 }
4544
4545
4546
4547
4548
4549 if (flags & AT_EMPTY_PATH && !capable(CAP_DAC_READ_SEARCH)) {
4550 error = -ENOENT;
4551 goto out_putnames;
4552 }
4553
4554 if (flags & AT_SYMLINK_FOLLOW)
4555 how |= LOOKUP_FOLLOW;
4556 retry:
4557 error = filename_lookup(olddfd, old, how, &old_path, NULL);
4558 if (error)
4559 goto out_putnames;
4560
4561 new_dentry = filename_create(newdfd, new, &new_path,
4562 (how & LOOKUP_REVAL));
4563 error = PTR_ERR(new_dentry);
4564 if (IS_ERR(new_dentry))
4565 goto out_putpath;
4566
4567 error = -EXDEV;
4568 if (old_path.mnt != new_path.mnt)
4569 goto out_dput;
4570 mnt_userns = mnt_user_ns(new_path.mnt);
4571 error = may_linkat(mnt_userns, &old_path);
4572 if (unlikely(error))
4573 goto out_dput;
4574 error = security_path_link(old_path.dentry, &new_path, new_dentry);
4575 if (error)
4576 goto out_dput;
4577 error = vfs_link(old_path.dentry, mnt_userns, new_path.dentry->d_inode,
4578 new_dentry, &delegated_inode);
4579 out_dput:
4580 done_path_create(&new_path, new_dentry);
4581 if (delegated_inode) {
4582 error = break_deleg_wait(&delegated_inode);
4583 if (!error) {
4584 path_put(&old_path);
4585 goto retry;
4586 }
4587 }
4588 if (retry_estale(error, how)) {
4589 path_put(&old_path);
4590 how |= LOOKUP_REVAL;
4591 goto retry;
4592 }
4593 out_putpath:
4594 path_put(&old_path);
4595 out_putnames:
4596 putname(old);
4597 putname(new);
4598
4599 return error;
4600 }
4601
4602 SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
4603 int, newdfd, const char __user *, newname, int, flags)
4604 {
4605 return do_linkat(olddfd, getname_uflags(oldname, flags),
4606 newdfd, getname(newname), flags);
4607 }
4608
4609 SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
4610 {
4611 return do_linkat(AT_FDCWD, getname(oldname), AT_FDCWD, getname(newname), 0);
4612 }
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659 int vfs_rename(struct renamedata *rd)
4660 {
4661 int error;
4662 struct inode *old_dir = rd->old_dir, *new_dir = rd->new_dir;
4663 struct dentry *old_dentry = rd->old_dentry;
4664 struct dentry *new_dentry = rd->new_dentry;
4665 struct inode **delegated_inode = rd->delegated_inode;
4666 unsigned int flags = rd->flags;
4667 bool is_dir = d_is_dir(old_dentry);
4668 struct inode *source = old_dentry->d_inode;
4669 struct inode *target = new_dentry->d_inode;
4670 bool new_is_dir = false;
4671 unsigned max_links = new_dir->i_sb->s_max_links;
4672 struct name_snapshot old_name;
4673
4674 if (source == target)
4675 return 0;
4676
4677 error = may_delete(rd->old_mnt_userns, old_dir, old_dentry, is_dir);
4678 if (error)
4679 return error;
4680
4681 if (!target) {
4682 error = may_create(rd->new_mnt_userns, new_dir, new_dentry);
4683 } else {
4684 new_is_dir = d_is_dir(new_dentry);
4685
4686 if (!(flags & RENAME_EXCHANGE))
4687 error = may_delete(rd->new_mnt_userns, new_dir,
4688 new_dentry, is_dir);
4689 else
4690 error = may_delete(rd->new_mnt_userns, new_dir,
4691 new_dentry, new_is_dir);
4692 }
4693 if (error)
4694 return error;
4695
4696 if (!old_dir->i_op->rename)
4697 return -EPERM;
4698
4699
4700
4701
4702
4703 if (new_dir != old_dir) {
4704 if (is_dir) {
4705 error = inode_permission(rd->old_mnt_userns, source,
4706 MAY_WRITE);
4707 if (error)
4708 return error;
4709 }
4710 if ((flags & RENAME_EXCHANGE) && new_is_dir) {
4711 error = inode_permission(rd->new_mnt_userns, target,
4712 MAY_WRITE);
4713 if (error)
4714 return error;
4715 }
4716 }
4717
4718 error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
4719 flags);
4720 if (error)
4721 return error;
4722
4723 take_dentry_name_snapshot(&old_name, old_dentry);
4724 dget(new_dentry);
4725 if (!is_dir || (flags & RENAME_EXCHANGE))
4726 lock_two_nondirectories(source, target);
4727 else if (target)
4728 inode_lock(target);
4729
4730 error = -EPERM;
4731 if (IS_SWAPFILE(source) || (target && IS_SWAPFILE(target)))
4732 goto out;
4733
4734 error = -EBUSY;
4735 if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry))
4736 goto out;
4737
4738 if (max_links && new_dir != old_dir) {
4739 error = -EMLINK;
4740 if (is_dir && !new_is_dir && new_dir->i_nlink >= max_links)
4741 goto out;
4742 if ((flags & RENAME_EXCHANGE) && !is_dir && new_is_dir &&
4743 old_dir->i_nlink >= max_links)
4744 goto out;
4745 }
4746 if (!is_dir) {
4747 error = try_break_deleg(source, delegated_inode);
4748 if (error)
4749 goto out;
4750 }
4751 if (target && !new_is_dir) {
4752 error = try_break_deleg(target, delegated_inode);
4753 if (error)
4754 goto out;
4755 }
4756 error = old_dir->i_op->rename(rd->new_mnt_userns, old_dir, old_dentry,
4757 new_dir, new_dentry, flags);
4758 if (error)
4759 goto out;
4760
4761 if (!(flags & RENAME_EXCHANGE) && target) {
4762 if (is_dir) {
4763 shrink_dcache_parent(new_dentry);
4764 target->i_flags |= S_DEAD;
4765 }
4766 dont_mount(new_dentry);
4767 detach_mounts(new_dentry);
4768 }
4769 if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) {
4770 if (!(flags & RENAME_EXCHANGE))
4771 d_move(old_dentry, new_dentry);
4772 else
4773 d_exchange(old_dentry, new_dentry);
4774 }
4775 out:
4776 if (!is_dir || (flags & RENAME_EXCHANGE))
4777 unlock_two_nondirectories(source, target);
4778 else if (target)
4779 inode_unlock(target);
4780 dput(new_dentry);
4781 if (!error) {
4782 fsnotify_move(old_dir, new_dir, &old_name.name, is_dir,
4783 !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
4784 if (flags & RENAME_EXCHANGE) {
4785 fsnotify_move(new_dir, old_dir, &old_dentry->d_name,
4786 new_is_dir, NULL, new_dentry);
4787 }
4788 }
4789 release_dentry_name_snapshot(&old_name);
4790
4791 return error;
4792 }
4793 EXPORT_SYMBOL(vfs_rename);
4794
4795 int do_renameat2(int olddfd, struct filename *from, int newdfd,
4796 struct filename *to, unsigned int flags)
4797 {
4798 struct renamedata rd;
4799 struct dentry *old_dentry, *new_dentry;
4800 struct dentry *trap;
4801 struct path old_path, new_path;
4802 struct qstr old_last, new_last;
4803 int old_type, new_type;
4804 struct inode *delegated_inode = NULL;
4805 unsigned int lookup_flags = 0, target_flags = LOOKUP_RENAME_TARGET;
4806 bool should_retry = false;
4807 int error = -EINVAL;
4808
4809 if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
4810 goto put_names;
4811
4812 if ((flags & (RENAME_NOREPLACE | RENAME_WHITEOUT)) &&
4813 (flags & RENAME_EXCHANGE))
4814 goto put_names;
4815
4816 if (flags & RENAME_EXCHANGE)
4817 target_flags = 0;
4818
4819 retry:
4820 error = filename_parentat(olddfd, from, lookup_flags, &old_path,
4821 &old_last, &old_type);
4822 if (error)
4823 goto put_names;
4824
4825 error = filename_parentat(newdfd, to, lookup_flags, &new_path, &new_last,
4826 &new_type);
4827 if (error)
4828 goto exit1;
4829
4830 error = -EXDEV;
4831 if (old_path.mnt != new_path.mnt)
4832 goto exit2;
4833
4834 error = -EBUSY;
4835 if (old_type != LAST_NORM)
4836 goto exit2;
4837
4838 if (flags & RENAME_NOREPLACE)
4839 error = -EEXIST;
4840 if (new_type != LAST_NORM)
4841 goto exit2;
4842
4843 error = mnt_want_write(old_path.mnt);
4844 if (error)
4845 goto exit2;
4846
4847 retry_deleg:
4848 trap = lock_rename(new_path.dentry, old_path.dentry);
4849
4850 old_dentry = __lookup_hash(&old_last, old_path.dentry, lookup_flags);
4851 error = PTR_ERR(old_dentry);
4852 if (IS_ERR(old_dentry))
4853 goto exit3;
4854
4855 error = -ENOENT;
4856 if (d_is_negative(old_dentry))
4857 goto exit4;
4858 new_dentry = __lookup_hash(&new_last, new_path.dentry, lookup_flags | target_flags);
4859 error = PTR_ERR(new_dentry);
4860 if (IS_ERR(new_dentry))
4861 goto exit4;
4862 error = -EEXIST;
4863 if ((flags & RENAME_NOREPLACE) && d_is_positive(new_dentry))
4864 goto exit5;
4865 if (flags & RENAME_EXCHANGE) {
4866 error = -ENOENT;
4867 if (d_is_negative(new_dentry))
4868 goto exit5;
4869
4870 if (!d_is_dir(new_dentry)) {
4871 error = -ENOTDIR;
4872 if (new_last.name[new_last.len])
4873 goto exit5;
4874 }
4875 }
4876
4877 if (!d_is_dir(old_dentry)) {
4878 error = -ENOTDIR;
4879 if (old_last.name[old_last.len])
4880 goto exit5;
4881 if (!(flags & RENAME_EXCHANGE) && new_last.name[new_last.len])
4882 goto exit5;
4883 }
4884
4885 error = -EINVAL;
4886 if (old_dentry == trap)
4887 goto exit5;
4888
4889 if (!(flags & RENAME_EXCHANGE))
4890 error = -ENOTEMPTY;
4891 if (new_dentry == trap)
4892 goto exit5;
4893
4894 error = security_path_rename(&old_path, old_dentry,
4895 &new_path, new_dentry, flags);
4896 if (error)
4897 goto exit5;
4898
4899 rd.old_dir = old_path.dentry->d_inode;
4900 rd.old_dentry = old_dentry;
4901 rd.old_mnt_userns = mnt_user_ns(old_path.mnt);
4902 rd.new_dir = new_path.dentry->d_inode;
4903 rd.new_dentry = new_dentry;
4904 rd.new_mnt_userns = mnt_user_ns(new_path.mnt);
4905 rd.delegated_inode = &delegated_inode;
4906 rd.flags = flags;
4907 error = vfs_rename(&rd);
4908 exit5:
4909 dput(new_dentry);
4910 exit4:
4911 dput(old_dentry);
4912 exit3:
4913 unlock_rename(new_path.dentry, old_path.dentry);
4914 if (delegated_inode) {
4915 error = break_deleg_wait(&delegated_inode);
4916 if (!error)
4917 goto retry_deleg;
4918 }
4919 mnt_drop_write(old_path.mnt);
4920 exit2:
4921 if (retry_estale(error, lookup_flags))
4922 should_retry = true;
4923 path_put(&new_path);
4924 exit1:
4925 path_put(&old_path);
4926 if (should_retry) {
4927 should_retry = false;
4928 lookup_flags |= LOOKUP_REVAL;
4929 goto retry;
4930 }
4931 put_names:
4932 putname(from);
4933 putname(to);
4934 return error;
4935 }
4936
4937 SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
4938 int, newdfd, const char __user *, newname, unsigned int, flags)
4939 {
4940 return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname),
4941 flags);
4942 }
4943
4944 SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
4945 int, newdfd, const char __user *, newname)
4946 {
4947 return do_renameat2(olddfd, getname(oldname), newdfd, getname(newname),
4948 0);
4949 }
4950
4951 SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
4952 {
4953 return do_renameat2(AT_FDCWD, getname(oldname), AT_FDCWD,
4954 getname(newname), 0);
4955 }
4956
4957 int readlink_copy(char __user *buffer, int buflen, const char *link)
4958 {
4959 int len = PTR_ERR(link);
4960 if (IS_ERR(link))
4961 goto out;
4962
4963 len = strlen(link);
4964 if (len > (unsigned) buflen)
4965 len = buflen;
4966 if (copy_to_user(buffer, link, len))
4967 len = -EFAULT;
4968 out:
4969 return len;
4970 }
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982 int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen)
4983 {
4984 struct inode *inode = d_inode(dentry);
4985 DEFINE_DELAYED_CALL(done);
4986 const char *link;
4987 int res;
4988
4989 if (unlikely(!(inode->i_opflags & IOP_DEFAULT_READLINK))) {
4990 if (unlikely(inode->i_op->readlink))
4991 return inode->i_op->readlink(dentry, buffer, buflen);
4992
4993 if (!d_is_symlink(dentry))
4994 return -EINVAL;
4995
4996 spin_lock(&inode->i_lock);
4997 inode->i_opflags |= IOP_DEFAULT_READLINK;
4998 spin_unlock(&inode->i_lock);
4999 }
5000
5001 link = READ_ONCE(inode->i_link);
5002 if (!link) {
5003 link = inode->i_op->get_link(dentry, inode, &done);
5004 if (IS_ERR(link))
5005 return PTR_ERR(link);
5006 }
5007 res = readlink_copy(buffer, buflen, link);
5008 do_delayed_call(&done);
5009 return res;
5010 }
5011 EXPORT_SYMBOL(vfs_readlink);
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024 const char *vfs_get_link(struct dentry *dentry, struct delayed_call *done)
5025 {
5026 const char *res = ERR_PTR(-EINVAL);
5027 struct inode *inode = d_inode(dentry);
5028
5029 if (d_is_symlink(dentry)) {
5030 res = ERR_PTR(security_inode_readlink(dentry));
5031 if (!res)
5032 res = inode->i_op->get_link(dentry, inode, done);
5033 }
5034 return res;
5035 }
5036 EXPORT_SYMBOL(vfs_get_link);
5037
5038
5039 const char *page_get_link(struct dentry *dentry, struct inode *inode,
5040 struct delayed_call *callback)
5041 {
5042 char *kaddr;
5043 struct page *page;
5044 struct address_space *mapping = inode->i_mapping;
5045
5046 if (!dentry) {
5047 page = find_get_page(mapping, 0);
5048 if (!page)
5049 return ERR_PTR(-ECHILD);
5050 if (!PageUptodate(page)) {
5051 put_page(page);
5052 return ERR_PTR(-ECHILD);
5053 }
5054 } else {
5055 page = read_mapping_page(mapping, 0, NULL);
5056 if (IS_ERR(page))
5057 return (char*)page;
5058 }
5059 set_delayed_call(callback, page_put_link, page);
5060 BUG_ON(mapping_gfp_mask(mapping) & __GFP_HIGHMEM);
5061 kaddr = page_address(page);
5062 nd_terminate_link(kaddr, inode->i_size, PAGE_SIZE - 1);
5063 return kaddr;
5064 }
5065
5066 EXPORT_SYMBOL(page_get_link);
5067
5068 void page_put_link(void *arg)
5069 {
5070 put_page(arg);
5071 }
5072 EXPORT_SYMBOL(page_put_link);
5073
5074 int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
5075 {
5076 DEFINE_DELAYED_CALL(done);
5077 int res = readlink_copy(buffer, buflen,
5078 page_get_link(dentry, d_inode(dentry),
5079 &done));
5080 do_delayed_call(&done);
5081 return res;
5082 }
5083 EXPORT_SYMBOL(page_readlink);
5084
5085 int page_symlink(struct inode *inode, const char *symname, int len)
5086 {
5087 struct address_space *mapping = inode->i_mapping;
5088 const struct address_space_operations *aops = mapping->a_ops;
5089 bool nofs = !mapping_gfp_constraint(mapping, __GFP_FS);
5090 struct page *page;
5091 void *fsdata;
5092 int err;
5093 unsigned int flags;
5094
5095 retry:
5096 if (nofs)
5097 flags = memalloc_nofs_save();
5098 err = aops->write_begin(NULL, mapping, 0, len-1, &page, &fsdata);
5099 if (nofs)
5100 memalloc_nofs_restore(flags);
5101 if (err)
5102 goto fail;
5103
5104 memcpy(page_address(page), symname, len-1);
5105
5106 err = aops->write_end(NULL, mapping, 0, len-1, len-1,
5107 page, fsdata);
5108 if (err < 0)
5109 goto fail;
5110 if (err < len-1)
5111 goto retry;
5112
5113 mark_inode_dirty(inode);
5114 return 0;
5115 fail:
5116 return err;
5117 }
5118 EXPORT_SYMBOL(page_symlink);
5119
5120 const struct inode_operations page_symlink_inode_operations = {
5121 .get_link = page_get_link,
5122 };
5123 EXPORT_SYMBOL(page_symlink_inode_operations);