media: ite-cir: use standard logging and reduce noise
[platform/kernel/linux-starfive.git] / fs / fuse / dir.c
1 /*
2   FUSE: Filesystem in Userspace
3   Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
4
5   This program can be distributed under the terms of the GNU GPL.
6   See the file COPYING.
7 */
8
9 #include "fuse_i.h"
10
11 #include <linux/pagemap.h>
12 #include <linux/file.h>
13 #include <linux/fs_context.h>
14 #include <linux/sched.h>
15 #include <linux/namei.h>
16 #include <linux/slab.h>
17 #include <linux/xattr.h>
18 #include <linux/iversion.h>
19 #include <linux/posix_acl.h>
20
21 static void fuse_advise_use_readdirplus(struct inode *dir)
22 {
23         struct fuse_inode *fi = get_fuse_inode(dir);
24
25         set_bit(FUSE_I_ADVISE_RDPLUS, &fi->state);
26 }
27
28 #if BITS_PER_LONG >= 64
29 static inline void __fuse_dentry_settime(struct dentry *entry, u64 time)
30 {
31         entry->d_fsdata = (void *) time;
32 }
33
34 static inline u64 fuse_dentry_time(const struct dentry *entry)
35 {
36         return (u64)entry->d_fsdata;
37 }
38
39 #else
40 union fuse_dentry {
41         u64 time;
42         struct rcu_head rcu;
43 };
44
45 static inline void __fuse_dentry_settime(struct dentry *dentry, u64 time)
46 {
47         ((union fuse_dentry *) dentry->d_fsdata)->time = time;
48 }
49
50 static inline u64 fuse_dentry_time(const struct dentry *entry)
51 {
52         return ((union fuse_dentry *) entry->d_fsdata)->time;
53 }
54 #endif
55
56 static void fuse_dentry_settime(struct dentry *dentry, u64 time)
57 {
58         struct fuse_conn *fc = get_fuse_conn_super(dentry->d_sb);
59         bool delete = !time && fc->delete_stale;
60         /*
61          * Mess with DCACHE_OP_DELETE because dput() will be faster without it.
62          * Don't care about races, either way it's just an optimization
63          */
64         if ((!delete && (dentry->d_flags & DCACHE_OP_DELETE)) ||
65             (delete && !(dentry->d_flags & DCACHE_OP_DELETE))) {
66                 spin_lock(&dentry->d_lock);
67                 if (!delete)
68                         dentry->d_flags &= ~DCACHE_OP_DELETE;
69                 else
70                         dentry->d_flags |= DCACHE_OP_DELETE;
71                 spin_unlock(&dentry->d_lock);
72         }
73
74         __fuse_dentry_settime(dentry, time);
75 }
76
77 /*
78  * FUSE caches dentries and attributes with separate timeout.  The
79  * time in jiffies until the dentry/attributes are valid is stored in
80  * dentry->d_fsdata and fuse_inode->i_time respectively.
81  */
82
83 /*
84  * Calculate the time in jiffies until a dentry/attributes are valid
85  */
86 static u64 time_to_jiffies(u64 sec, u32 nsec)
87 {
88         if (sec || nsec) {
89                 struct timespec64 ts = {
90                         sec,
91                         min_t(u32, nsec, NSEC_PER_SEC - 1)
92                 };
93
94                 return get_jiffies_64() + timespec64_to_jiffies(&ts);
95         } else
96                 return 0;
97 }
98
99 /*
100  * Set dentry and possibly attribute timeouts from the lookup/mk*
101  * replies
102  */
103 void fuse_change_entry_timeout(struct dentry *entry, struct fuse_entry_out *o)
104 {
105         fuse_dentry_settime(entry,
106                 time_to_jiffies(o->entry_valid, o->entry_valid_nsec));
107 }
108
109 static u64 attr_timeout(struct fuse_attr_out *o)
110 {
111         return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
112 }
113
114 u64 entry_attr_timeout(struct fuse_entry_out *o)
115 {
116         return time_to_jiffies(o->attr_valid, o->attr_valid_nsec);
117 }
118
119 static void fuse_invalidate_attr_mask(struct inode *inode, u32 mask)
120 {
121         set_mask_bits(&get_fuse_inode(inode)->inval_mask, 0, mask);
122 }
123
124 /*
125  * Mark the attributes as stale, so that at the next call to
126  * ->getattr() they will be fetched from userspace
127  */
128 void fuse_invalidate_attr(struct inode *inode)
129 {
130         fuse_invalidate_attr_mask(inode, STATX_BASIC_STATS);
131 }
132
133 static void fuse_dir_changed(struct inode *dir)
134 {
135         fuse_invalidate_attr(dir);
136         inode_maybe_inc_iversion(dir, false);
137 }
138
139 /**
140  * Mark the attributes as stale due to an atime change.  Avoid the invalidate if
141  * atime is not used.
142  */
143 void fuse_invalidate_atime(struct inode *inode)
144 {
145         if (!IS_RDONLY(inode))
146                 fuse_invalidate_attr_mask(inode, STATX_ATIME);
147 }
148
149 /*
150  * Just mark the entry as stale, so that a next attempt to look it up
151  * will result in a new lookup call to userspace
152  *
153  * This is called when a dentry is about to become negative and the
154  * timeout is unknown (unlink, rmdir, rename and in some cases
155  * lookup)
156  */
157 void fuse_invalidate_entry_cache(struct dentry *entry)
158 {
159         fuse_dentry_settime(entry, 0);
160 }
161
162 /*
163  * Same as fuse_invalidate_entry_cache(), but also try to remove the
164  * dentry from the hash
165  */
166 static void fuse_invalidate_entry(struct dentry *entry)
167 {
168         d_invalidate(entry);
169         fuse_invalidate_entry_cache(entry);
170 }
171
172 static void fuse_lookup_init(struct fuse_conn *fc, struct fuse_args *args,
173                              u64 nodeid, const struct qstr *name,
174                              struct fuse_entry_out *outarg)
175 {
176         memset(outarg, 0, sizeof(struct fuse_entry_out));
177         args->opcode = FUSE_LOOKUP;
178         args->nodeid = nodeid;
179         args->in_numargs = 1;
180         args->in_args[0].size = name->len + 1;
181         args->in_args[0].value = name->name;
182         args->out_numargs = 1;
183         args->out_args[0].size = sizeof(struct fuse_entry_out);
184         args->out_args[0].value = outarg;
185 }
186
187 /*
188  * Check whether the dentry is still valid
189  *
190  * If the entry validity timeout has expired and the dentry is
191  * positive, try to redo the lookup.  If the lookup results in a
192  * different inode, then let the VFS invalidate the dentry and redo
193  * the lookup once more.  If the lookup results in the same inode,
194  * then refresh the attributes, timeouts and mark the dentry valid.
195  */
196 static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
197 {
198         struct inode *inode;
199         struct dentry *parent;
200         struct fuse_mount *fm;
201         struct fuse_inode *fi;
202         int ret;
203
204         inode = d_inode_rcu(entry);
205         if (inode && fuse_is_bad(inode))
206                 goto invalid;
207         else if (time_before64(fuse_dentry_time(entry), get_jiffies_64()) ||
208                  (flags & (LOOKUP_EXCL | LOOKUP_REVAL))) {
209                 struct fuse_entry_out outarg;
210                 FUSE_ARGS(args);
211                 struct fuse_forget_link *forget;
212                 u64 attr_version;
213
214                 /* For negative dentries, always do a fresh lookup */
215                 if (!inode)
216                         goto invalid;
217
218                 ret = -ECHILD;
219                 if (flags & LOOKUP_RCU)
220                         goto out;
221
222                 fm = get_fuse_mount(inode);
223
224                 forget = fuse_alloc_forget();
225                 ret = -ENOMEM;
226                 if (!forget)
227                         goto out;
228
229                 attr_version = fuse_get_attr_version(fm->fc);
230
231                 parent = dget_parent(entry);
232                 fuse_lookup_init(fm->fc, &args, get_node_id(d_inode(parent)),
233                                  &entry->d_name, &outarg);
234                 ret = fuse_simple_request(fm, &args);
235                 dput(parent);
236                 /* Zero nodeid is same as -ENOENT */
237                 if (!ret && !outarg.nodeid)
238                         ret = -ENOENT;
239                 if (!ret) {
240                         fi = get_fuse_inode(inode);
241                         if (outarg.nodeid != get_node_id(inode) ||
242                             (bool) IS_AUTOMOUNT(inode) != (bool) (outarg.attr.flags & FUSE_ATTR_SUBMOUNT)) {
243                                 fuse_queue_forget(fm->fc, forget,
244                                                   outarg.nodeid, 1);
245                                 goto invalid;
246                         }
247                         spin_lock(&fi->lock);
248                         fi->nlookup++;
249                         spin_unlock(&fi->lock);
250                 }
251                 kfree(forget);
252                 if (ret == -ENOMEM)
253                         goto out;
254                 if (ret || fuse_invalid_attr(&outarg.attr) ||
255                     (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
256                         goto invalid;
257
258                 forget_all_cached_acls(inode);
259                 fuse_change_attributes(inode, &outarg.attr,
260                                        entry_attr_timeout(&outarg),
261                                        attr_version);
262                 fuse_change_entry_timeout(entry, &outarg);
263         } else if (inode) {
264                 fi = get_fuse_inode(inode);
265                 if (flags & LOOKUP_RCU) {
266                         if (test_bit(FUSE_I_INIT_RDPLUS, &fi->state))
267                                 return -ECHILD;
268                 } else if (test_and_clear_bit(FUSE_I_INIT_RDPLUS, &fi->state)) {
269                         parent = dget_parent(entry);
270                         fuse_advise_use_readdirplus(d_inode(parent));
271                         dput(parent);
272                 }
273         }
274         ret = 1;
275 out:
276         return ret;
277
278 invalid:
279         ret = 0;
280         goto out;
281 }
282
283 #if BITS_PER_LONG < 64
284 static int fuse_dentry_init(struct dentry *dentry)
285 {
286         dentry->d_fsdata = kzalloc(sizeof(union fuse_dentry),
287                                    GFP_KERNEL_ACCOUNT | __GFP_RECLAIMABLE);
288
289         return dentry->d_fsdata ? 0 : -ENOMEM;
290 }
291 static void fuse_dentry_release(struct dentry *dentry)
292 {
293         union fuse_dentry *fd = dentry->d_fsdata;
294
295         kfree_rcu(fd, rcu);
296 }
297 #endif
298
299 static int fuse_dentry_delete(const struct dentry *dentry)
300 {
301         return time_before64(fuse_dentry_time(dentry), get_jiffies_64());
302 }
303
304 /*
305  * Create a fuse_mount object with a new superblock (with path->dentry
306  * as the root), and return that mount so it can be auto-mounted on
307  * @path.
308  */
309 static struct vfsmount *fuse_dentry_automount(struct path *path)
310 {
311         struct fs_context *fsc;
312         struct fuse_mount *parent_fm = get_fuse_mount_super(path->mnt->mnt_sb);
313         struct fuse_conn *fc = parent_fm->fc;
314         struct fuse_mount *fm;
315         struct vfsmount *mnt;
316         struct fuse_inode *mp_fi = get_fuse_inode(d_inode(path->dentry));
317         struct super_block *sb;
318         int err;
319
320         fsc = fs_context_for_submount(path->mnt->mnt_sb->s_type, path->dentry);
321         if (IS_ERR(fsc)) {
322                 err = PTR_ERR(fsc);
323                 goto out;
324         }
325
326         err = -ENOMEM;
327         fm = kzalloc(sizeof(struct fuse_mount), GFP_KERNEL);
328         if (!fm)
329                 goto out_put_fsc;
330
331         fsc->s_fs_info = fm;
332         sb = sget_fc(fsc, NULL, set_anon_super_fc);
333         if (IS_ERR(sb)) {
334                 err = PTR_ERR(sb);
335                 kfree(fm);
336                 goto out_put_fsc;
337         }
338         fm->fc = fuse_conn_get(fc);
339
340         /* Initialize superblock, making @mp_fi its root */
341         err = fuse_fill_super_submount(sb, mp_fi);
342         if (err)
343                 goto out_put_sb;
344
345         sb->s_flags |= SB_ACTIVE;
346         fsc->root = dget(sb->s_root);
347         /* We are done configuring the superblock, so unlock it */
348         up_write(&sb->s_umount);
349
350         down_write(&fc->killsb);
351         list_add_tail(&fm->fc_entry, &fc->mounts);
352         up_write(&fc->killsb);
353
354         /* Create the submount */
355         mnt = vfs_create_mount(fsc);
356         if (IS_ERR(mnt)) {
357                 err = PTR_ERR(mnt);
358                 goto out_put_fsc;
359         }
360         mntget(mnt);
361         put_fs_context(fsc);
362         return mnt;
363
364 out_put_sb:
365         /*
366          * Only jump here when fsc->root is NULL and sb is still locked
367          * (otherwise put_fs_context() will put the superblock)
368          */
369         deactivate_locked_super(sb);
370 out_put_fsc:
371         put_fs_context(fsc);
372 out:
373         return ERR_PTR(err);
374 }
375
376 const struct dentry_operations fuse_dentry_operations = {
377         .d_revalidate   = fuse_dentry_revalidate,
378         .d_delete       = fuse_dentry_delete,
379 #if BITS_PER_LONG < 64
380         .d_init         = fuse_dentry_init,
381         .d_release      = fuse_dentry_release,
382 #endif
383         .d_automount    = fuse_dentry_automount,
384 };
385
386 const struct dentry_operations fuse_root_dentry_operations = {
387 #if BITS_PER_LONG < 64
388         .d_init         = fuse_dentry_init,
389         .d_release      = fuse_dentry_release,
390 #endif
391 };
392
393 int fuse_valid_type(int m)
394 {
395         return S_ISREG(m) || S_ISDIR(m) || S_ISLNK(m) || S_ISCHR(m) ||
396                 S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
397 }
398
399 bool fuse_invalid_attr(struct fuse_attr *attr)
400 {
401         return !fuse_valid_type(attr->mode) ||
402                 attr->size > LLONG_MAX;
403 }
404
405 int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name,
406                      struct fuse_entry_out *outarg, struct inode **inode)
407 {
408         struct fuse_mount *fm = get_fuse_mount_super(sb);
409         FUSE_ARGS(args);
410         struct fuse_forget_link *forget;
411         u64 attr_version;
412         int err;
413
414         *inode = NULL;
415         err = -ENAMETOOLONG;
416         if (name->len > FUSE_NAME_MAX)
417                 goto out;
418
419
420         forget = fuse_alloc_forget();
421         err = -ENOMEM;
422         if (!forget)
423                 goto out;
424
425         attr_version = fuse_get_attr_version(fm->fc);
426
427         fuse_lookup_init(fm->fc, &args, nodeid, name, outarg);
428         err = fuse_simple_request(fm, &args);
429         /* Zero nodeid is same as -ENOENT, but with valid timeout */
430         if (err || !outarg->nodeid)
431                 goto out_put_forget;
432
433         err = -EIO;
434         if (!outarg->nodeid)
435                 goto out_put_forget;
436         if (fuse_invalid_attr(&outarg->attr))
437                 goto out_put_forget;
438
439         *inode = fuse_iget(sb, outarg->nodeid, outarg->generation,
440                            &outarg->attr, entry_attr_timeout(outarg),
441                            attr_version);
442         err = -ENOMEM;
443         if (!*inode) {
444                 fuse_queue_forget(fm->fc, forget, outarg->nodeid, 1);
445                 goto out;
446         }
447         err = 0;
448
449  out_put_forget:
450         kfree(forget);
451  out:
452         return err;
453 }
454
455 static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
456                                   unsigned int flags)
457 {
458         int err;
459         struct fuse_entry_out outarg;
460         struct inode *inode;
461         struct dentry *newent;
462         bool outarg_valid = true;
463         bool locked;
464
465         if (fuse_is_bad(dir))
466                 return ERR_PTR(-EIO);
467
468         locked = fuse_lock_inode(dir);
469         err = fuse_lookup_name(dir->i_sb, get_node_id(dir), &entry->d_name,
470                                &outarg, &inode);
471         fuse_unlock_inode(dir, locked);
472         if (err == -ENOENT) {
473                 outarg_valid = false;
474                 err = 0;
475         }
476         if (err)
477                 goto out_err;
478
479         err = -EIO;
480         if (inode && get_node_id(inode) == FUSE_ROOT_ID)
481                 goto out_iput;
482
483         newent = d_splice_alias(inode, entry);
484         err = PTR_ERR(newent);
485         if (IS_ERR(newent))
486                 goto out_err;
487
488         entry = newent ? newent : entry;
489         if (outarg_valid)
490                 fuse_change_entry_timeout(entry, &outarg);
491         else
492                 fuse_invalidate_entry_cache(entry);
493
494         if (inode)
495                 fuse_advise_use_readdirplus(dir);
496         return newent;
497
498  out_iput:
499         iput(inode);
500  out_err:
501         return ERR_PTR(err);
502 }
503
504 /*
505  * Atomic create+open operation
506  *
507  * If the filesystem doesn't support this, then fall back to separate
508  * 'mknod' + 'open' requests.
509  */
510 static int fuse_create_open(struct inode *dir, struct dentry *entry,
511                             struct file *file, unsigned flags,
512                             umode_t mode)
513 {
514         int err;
515         struct inode *inode;
516         struct fuse_mount *fm = get_fuse_mount(dir);
517         FUSE_ARGS(args);
518         struct fuse_forget_link *forget;
519         struct fuse_create_in inarg;
520         struct fuse_open_out outopen;
521         struct fuse_entry_out outentry;
522         struct fuse_inode *fi;
523         struct fuse_file *ff;
524
525         /* Userspace expects S_IFREG in create mode */
526         BUG_ON((mode & S_IFMT) != S_IFREG);
527
528         forget = fuse_alloc_forget();
529         err = -ENOMEM;
530         if (!forget)
531                 goto out_err;
532
533         err = -ENOMEM;
534         ff = fuse_file_alloc(fm);
535         if (!ff)
536                 goto out_put_forget_req;
537
538         if (!fm->fc->dont_mask)
539                 mode &= ~current_umask();
540
541         flags &= ~O_NOCTTY;
542         memset(&inarg, 0, sizeof(inarg));
543         memset(&outentry, 0, sizeof(outentry));
544         inarg.flags = flags;
545         inarg.mode = mode;
546         inarg.umask = current_umask();
547
548         if (fm->fc->handle_killpriv_v2 && (flags & O_TRUNC) &&
549             !(flags & O_EXCL) && !capable(CAP_FSETID)) {
550                 inarg.open_flags |= FUSE_OPEN_KILL_SUIDGID;
551         }
552
553         args.opcode = FUSE_CREATE;
554         args.nodeid = get_node_id(dir);
555         args.in_numargs = 2;
556         args.in_args[0].size = sizeof(inarg);
557         args.in_args[0].value = &inarg;
558         args.in_args[1].size = entry->d_name.len + 1;
559         args.in_args[1].value = entry->d_name.name;
560         args.out_numargs = 2;
561         args.out_args[0].size = sizeof(outentry);
562         args.out_args[0].value = &outentry;
563         args.out_args[1].size = sizeof(outopen);
564         args.out_args[1].value = &outopen;
565         err = fuse_simple_request(fm, &args);
566         if (err)
567                 goto out_free_ff;
568
569         err = -EIO;
570         if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid) ||
571             fuse_invalid_attr(&outentry.attr))
572                 goto out_free_ff;
573
574         ff->fh = outopen.fh;
575         ff->nodeid = outentry.nodeid;
576         ff->open_flags = outopen.open_flags;
577         inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
578                           &outentry.attr, entry_attr_timeout(&outentry), 0);
579         if (!inode) {
580                 flags &= ~(O_CREAT | O_EXCL | O_TRUNC);
581                 fuse_sync_release(NULL, ff, flags);
582                 fuse_queue_forget(fm->fc, forget, outentry.nodeid, 1);
583                 err = -ENOMEM;
584                 goto out_err;
585         }
586         kfree(forget);
587         d_instantiate(entry, inode);
588         fuse_change_entry_timeout(entry, &outentry);
589         fuse_dir_changed(dir);
590         err = finish_open(file, entry, generic_file_open);
591         if (err) {
592                 fi = get_fuse_inode(inode);
593                 fuse_sync_release(fi, ff, flags);
594         } else {
595                 file->private_data = ff;
596                 fuse_finish_open(inode, file);
597         }
598         return err;
599
600 out_free_ff:
601         fuse_file_free(ff);
602 out_put_forget_req:
603         kfree(forget);
604 out_err:
605         return err;
606 }
607
608 static int fuse_mknod(struct user_namespace *, struct inode *, struct dentry *,
609                       umode_t, dev_t);
610 static int fuse_atomic_open(struct inode *dir, struct dentry *entry,
611                             struct file *file, unsigned flags,
612                             umode_t mode)
613 {
614         int err;
615         struct fuse_conn *fc = get_fuse_conn(dir);
616         struct dentry *res = NULL;
617
618         if (fuse_is_bad(dir))
619                 return -EIO;
620
621         if (d_in_lookup(entry)) {
622                 res = fuse_lookup(dir, entry, 0);
623                 if (IS_ERR(res))
624                         return PTR_ERR(res);
625
626                 if (res)
627                         entry = res;
628         }
629
630         if (!(flags & O_CREAT) || d_really_is_positive(entry))
631                 goto no_open;
632
633         /* Only creates */
634         file->f_mode |= FMODE_CREATED;
635
636         if (fc->no_create)
637                 goto mknod;
638
639         err = fuse_create_open(dir, entry, file, flags, mode);
640         if (err == -ENOSYS) {
641                 fc->no_create = 1;
642                 goto mknod;
643         }
644 out_dput:
645         dput(res);
646         return err;
647
648 mknod:
649         err = fuse_mknod(&init_user_ns, dir, entry, mode, 0);
650         if (err)
651                 goto out_dput;
652 no_open:
653         return finish_no_open(file, res);
654 }
655
656 /*
657  * Code shared between mknod, mkdir, symlink and link
658  */
659 static int create_new_entry(struct fuse_mount *fm, struct fuse_args *args,
660                             struct inode *dir, struct dentry *entry,
661                             umode_t mode)
662 {
663         struct fuse_entry_out outarg;
664         struct inode *inode;
665         struct dentry *d;
666         int err;
667         struct fuse_forget_link *forget;
668
669         if (fuse_is_bad(dir))
670                 return -EIO;
671
672         forget = fuse_alloc_forget();
673         if (!forget)
674                 return -ENOMEM;
675
676         memset(&outarg, 0, sizeof(outarg));
677         args->nodeid = get_node_id(dir);
678         args->out_numargs = 1;
679         args->out_args[0].size = sizeof(outarg);
680         args->out_args[0].value = &outarg;
681         err = fuse_simple_request(fm, args);
682         if (err)
683                 goto out_put_forget_req;
684
685         err = -EIO;
686         if (invalid_nodeid(outarg.nodeid) || fuse_invalid_attr(&outarg.attr))
687                 goto out_put_forget_req;
688
689         if ((outarg.attr.mode ^ mode) & S_IFMT)
690                 goto out_put_forget_req;
691
692         inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation,
693                           &outarg.attr, entry_attr_timeout(&outarg), 0);
694         if (!inode) {
695                 fuse_queue_forget(fm->fc, forget, outarg.nodeid, 1);
696                 return -ENOMEM;
697         }
698         kfree(forget);
699
700         d_drop(entry);
701         d = d_splice_alias(inode, entry);
702         if (IS_ERR(d))
703                 return PTR_ERR(d);
704
705         if (d) {
706                 fuse_change_entry_timeout(d, &outarg);
707                 dput(d);
708         } else {
709                 fuse_change_entry_timeout(entry, &outarg);
710         }
711         fuse_dir_changed(dir);
712         return 0;
713
714  out_put_forget_req:
715         kfree(forget);
716         return err;
717 }
718
719 static int fuse_mknod(struct user_namespace *mnt_userns, struct inode *dir,
720                       struct dentry *entry, umode_t mode, dev_t rdev)
721 {
722         struct fuse_mknod_in inarg;
723         struct fuse_mount *fm = get_fuse_mount(dir);
724         FUSE_ARGS(args);
725
726         if (!fm->fc->dont_mask)
727                 mode &= ~current_umask();
728
729         memset(&inarg, 0, sizeof(inarg));
730         inarg.mode = mode;
731         inarg.rdev = new_encode_dev(rdev);
732         inarg.umask = current_umask();
733         args.opcode = FUSE_MKNOD;
734         args.in_numargs = 2;
735         args.in_args[0].size = sizeof(inarg);
736         args.in_args[0].value = &inarg;
737         args.in_args[1].size = entry->d_name.len + 1;
738         args.in_args[1].value = entry->d_name.name;
739         return create_new_entry(fm, &args, dir, entry, mode);
740 }
741
742 static int fuse_create(struct user_namespace *mnt_userns, struct inode *dir,
743                        struct dentry *entry, umode_t mode, bool excl)
744 {
745         return fuse_mknod(&init_user_ns, dir, entry, mode, 0);
746 }
747
748 static int fuse_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
749                       struct dentry *entry, umode_t mode)
750 {
751         struct fuse_mkdir_in inarg;
752         struct fuse_mount *fm = get_fuse_mount(dir);
753         FUSE_ARGS(args);
754
755         if (!fm->fc->dont_mask)
756                 mode &= ~current_umask();
757
758         memset(&inarg, 0, sizeof(inarg));
759         inarg.mode = mode;
760         inarg.umask = current_umask();
761         args.opcode = FUSE_MKDIR;
762         args.in_numargs = 2;
763         args.in_args[0].size = sizeof(inarg);
764         args.in_args[0].value = &inarg;
765         args.in_args[1].size = entry->d_name.len + 1;
766         args.in_args[1].value = entry->d_name.name;
767         return create_new_entry(fm, &args, dir, entry, S_IFDIR);
768 }
769
770 static int fuse_symlink(struct user_namespace *mnt_userns, struct inode *dir,
771                         struct dentry *entry, const char *link)
772 {
773         struct fuse_mount *fm = get_fuse_mount(dir);
774         unsigned len = strlen(link) + 1;
775         FUSE_ARGS(args);
776
777         args.opcode = FUSE_SYMLINK;
778         args.in_numargs = 2;
779         args.in_args[0].size = entry->d_name.len + 1;
780         args.in_args[0].value = entry->d_name.name;
781         args.in_args[1].size = len;
782         args.in_args[1].value = link;
783         return create_new_entry(fm, &args, dir, entry, S_IFLNK);
784 }
785
786 void fuse_update_ctime(struct inode *inode)
787 {
788         if (!IS_NOCMTIME(inode)) {
789                 inode->i_ctime = current_time(inode);
790                 mark_inode_dirty_sync(inode);
791         }
792 }
793
794 static int fuse_unlink(struct inode *dir, struct dentry *entry)
795 {
796         int err;
797         struct fuse_mount *fm = get_fuse_mount(dir);
798         FUSE_ARGS(args);
799
800         if (fuse_is_bad(dir))
801                 return -EIO;
802
803         args.opcode = FUSE_UNLINK;
804         args.nodeid = get_node_id(dir);
805         args.in_numargs = 1;
806         args.in_args[0].size = entry->d_name.len + 1;
807         args.in_args[0].value = entry->d_name.name;
808         err = fuse_simple_request(fm, &args);
809         if (!err) {
810                 struct inode *inode = d_inode(entry);
811                 struct fuse_inode *fi = get_fuse_inode(inode);
812
813                 spin_lock(&fi->lock);
814                 fi->attr_version = atomic64_inc_return(&fm->fc->attr_version);
815                 /*
816                  * If i_nlink == 0 then unlink doesn't make sense, yet this can
817                  * happen if userspace filesystem is careless.  It would be
818                  * difficult to enforce correct nlink usage so just ignore this
819                  * condition here
820                  */
821                 if (inode->i_nlink > 0)
822                         drop_nlink(inode);
823                 spin_unlock(&fi->lock);
824                 fuse_invalidate_attr(inode);
825                 fuse_dir_changed(dir);
826                 fuse_invalidate_entry_cache(entry);
827                 fuse_update_ctime(inode);
828         } else if (err == -EINTR)
829                 fuse_invalidate_entry(entry);
830         return err;
831 }
832
833 static int fuse_rmdir(struct inode *dir, struct dentry *entry)
834 {
835         int err;
836         struct fuse_mount *fm = get_fuse_mount(dir);
837         FUSE_ARGS(args);
838
839         if (fuse_is_bad(dir))
840                 return -EIO;
841
842         args.opcode = FUSE_RMDIR;
843         args.nodeid = get_node_id(dir);
844         args.in_numargs = 1;
845         args.in_args[0].size = entry->d_name.len + 1;
846         args.in_args[0].value = entry->d_name.name;
847         err = fuse_simple_request(fm, &args);
848         if (!err) {
849                 clear_nlink(d_inode(entry));
850                 fuse_dir_changed(dir);
851                 fuse_invalidate_entry_cache(entry);
852         } else if (err == -EINTR)
853                 fuse_invalidate_entry(entry);
854         return err;
855 }
856
857 static int fuse_rename_common(struct inode *olddir, struct dentry *oldent,
858                               struct inode *newdir, struct dentry *newent,
859                               unsigned int flags, int opcode, size_t argsize)
860 {
861         int err;
862         struct fuse_rename2_in inarg;
863         struct fuse_mount *fm = get_fuse_mount(olddir);
864         FUSE_ARGS(args);
865
866         memset(&inarg, 0, argsize);
867         inarg.newdir = get_node_id(newdir);
868         inarg.flags = flags;
869         args.opcode = opcode;
870         args.nodeid = get_node_id(olddir);
871         args.in_numargs = 3;
872         args.in_args[0].size = argsize;
873         args.in_args[0].value = &inarg;
874         args.in_args[1].size = oldent->d_name.len + 1;
875         args.in_args[1].value = oldent->d_name.name;
876         args.in_args[2].size = newent->d_name.len + 1;
877         args.in_args[2].value = newent->d_name.name;
878         err = fuse_simple_request(fm, &args);
879         if (!err) {
880                 /* ctime changes */
881                 fuse_invalidate_attr(d_inode(oldent));
882                 fuse_update_ctime(d_inode(oldent));
883
884                 if (flags & RENAME_EXCHANGE) {
885                         fuse_invalidate_attr(d_inode(newent));
886                         fuse_update_ctime(d_inode(newent));
887                 }
888
889                 fuse_dir_changed(olddir);
890                 if (olddir != newdir)
891                         fuse_dir_changed(newdir);
892
893                 /* newent will end up negative */
894                 if (!(flags & RENAME_EXCHANGE) && d_really_is_positive(newent)) {
895                         fuse_invalidate_attr(d_inode(newent));
896                         fuse_invalidate_entry_cache(newent);
897                         fuse_update_ctime(d_inode(newent));
898                 }
899         } else if (err == -EINTR) {
900                 /* If request was interrupted, DEITY only knows if the
901                    rename actually took place.  If the invalidation
902                    fails (e.g. some process has CWD under the renamed
903                    directory), then there can be inconsistency between
904                    the dcache and the real filesystem.  Tough luck. */
905                 fuse_invalidate_entry(oldent);
906                 if (d_really_is_positive(newent))
907                         fuse_invalidate_entry(newent);
908         }
909
910         return err;
911 }
912
913 static int fuse_rename2(struct user_namespace *mnt_userns, struct inode *olddir,
914                         struct dentry *oldent, struct inode *newdir,
915                         struct dentry *newent, unsigned int flags)
916 {
917         struct fuse_conn *fc = get_fuse_conn(olddir);
918         int err;
919
920         if (fuse_is_bad(olddir))
921                 return -EIO;
922
923         if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
924                 return -EINVAL;
925
926         if (flags) {
927                 if (fc->no_rename2 || fc->minor < 23)
928                         return -EINVAL;
929
930                 err = fuse_rename_common(olddir, oldent, newdir, newent, flags,
931                                          FUSE_RENAME2,
932                                          sizeof(struct fuse_rename2_in));
933                 if (err == -ENOSYS) {
934                         fc->no_rename2 = 1;
935                         err = -EINVAL;
936                 }
937         } else {
938                 err = fuse_rename_common(olddir, oldent, newdir, newent, 0,
939                                          FUSE_RENAME,
940                                          sizeof(struct fuse_rename_in));
941         }
942
943         return err;
944 }
945
946 static int fuse_link(struct dentry *entry, struct inode *newdir,
947                      struct dentry *newent)
948 {
949         int err;
950         struct fuse_link_in inarg;
951         struct inode *inode = d_inode(entry);
952         struct fuse_mount *fm = get_fuse_mount(inode);
953         FUSE_ARGS(args);
954
955         memset(&inarg, 0, sizeof(inarg));
956         inarg.oldnodeid = get_node_id(inode);
957         args.opcode = FUSE_LINK;
958         args.in_numargs = 2;
959         args.in_args[0].size = sizeof(inarg);
960         args.in_args[0].value = &inarg;
961         args.in_args[1].size = newent->d_name.len + 1;
962         args.in_args[1].value = newent->d_name.name;
963         err = create_new_entry(fm, &args, newdir, newent, inode->i_mode);
964         /* Contrary to "normal" filesystems it can happen that link
965            makes two "logical" inodes point to the same "physical"
966            inode.  We invalidate the attributes of the old one, so it
967            will reflect changes in the backing inode (link count,
968            etc.)
969         */
970         if (!err) {
971                 struct fuse_inode *fi = get_fuse_inode(inode);
972
973                 spin_lock(&fi->lock);
974                 fi->attr_version = atomic64_inc_return(&fm->fc->attr_version);
975                 if (likely(inode->i_nlink < UINT_MAX))
976                         inc_nlink(inode);
977                 spin_unlock(&fi->lock);
978                 fuse_invalidate_attr(inode);
979                 fuse_update_ctime(inode);
980         } else if (err == -EINTR) {
981                 fuse_invalidate_attr(inode);
982         }
983         return err;
984 }
985
986 static void fuse_fillattr(struct inode *inode, struct fuse_attr *attr,
987                           struct kstat *stat)
988 {
989         unsigned int blkbits;
990         struct fuse_conn *fc = get_fuse_conn(inode);
991
992         /* see the comment in fuse_change_attributes() */
993         if (fc->writeback_cache && S_ISREG(inode->i_mode)) {
994                 attr->size = i_size_read(inode);
995                 attr->mtime = inode->i_mtime.tv_sec;
996                 attr->mtimensec = inode->i_mtime.tv_nsec;
997                 attr->ctime = inode->i_ctime.tv_sec;
998                 attr->ctimensec = inode->i_ctime.tv_nsec;
999         }
1000
1001         stat->dev = inode->i_sb->s_dev;
1002         stat->ino = attr->ino;
1003         stat->mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777);
1004         stat->nlink = attr->nlink;
1005         stat->uid = make_kuid(fc->user_ns, attr->uid);
1006         stat->gid = make_kgid(fc->user_ns, attr->gid);
1007         stat->rdev = inode->i_rdev;
1008         stat->atime.tv_sec = attr->atime;
1009         stat->atime.tv_nsec = attr->atimensec;
1010         stat->mtime.tv_sec = attr->mtime;
1011         stat->mtime.tv_nsec = attr->mtimensec;
1012         stat->ctime.tv_sec = attr->ctime;
1013         stat->ctime.tv_nsec = attr->ctimensec;
1014         stat->size = attr->size;
1015         stat->blocks = attr->blocks;
1016
1017         if (attr->blksize != 0)
1018                 blkbits = ilog2(attr->blksize);
1019         else
1020                 blkbits = inode->i_sb->s_blocksize_bits;
1021
1022         stat->blksize = 1 << blkbits;
1023 }
1024
1025 static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
1026                            struct file *file)
1027 {
1028         int err;
1029         struct fuse_getattr_in inarg;
1030         struct fuse_attr_out outarg;
1031         struct fuse_mount *fm = get_fuse_mount(inode);
1032         FUSE_ARGS(args);
1033         u64 attr_version;
1034
1035         attr_version = fuse_get_attr_version(fm->fc);
1036
1037         memset(&inarg, 0, sizeof(inarg));
1038         memset(&outarg, 0, sizeof(outarg));
1039         /* Directories have separate file-handle space */
1040         if (file && S_ISREG(inode->i_mode)) {
1041                 struct fuse_file *ff = file->private_data;
1042
1043                 inarg.getattr_flags |= FUSE_GETATTR_FH;
1044                 inarg.fh = ff->fh;
1045         }
1046         args.opcode = FUSE_GETATTR;
1047         args.nodeid = get_node_id(inode);
1048         args.in_numargs = 1;
1049         args.in_args[0].size = sizeof(inarg);
1050         args.in_args[0].value = &inarg;
1051         args.out_numargs = 1;
1052         args.out_args[0].size = sizeof(outarg);
1053         args.out_args[0].value = &outarg;
1054         err = fuse_simple_request(fm, &args);
1055         if (!err) {
1056                 if (fuse_invalid_attr(&outarg.attr) ||
1057                     (inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
1058                         fuse_make_bad(inode);
1059                         err = -EIO;
1060                 } else {
1061                         fuse_change_attributes(inode, &outarg.attr,
1062                                                attr_timeout(&outarg),
1063                                                attr_version);
1064                         if (stat)
1065                                 fuse_fillattr(inode, &outarg.attr, stat);
1066                 }
1067         }
1068         return err;
1069 }
1070
1071 static int fuse_update_get_attr(struct inode *inode, struct file *file,
1072                                 struct kstat *stat, u32 request_mask,
1073                                 unsigned int flags)
1074 {
1075         struct fuse_inode *fi = get_fuse_inode(inode);
1076         int err = 0;
1077         bool sync;
1078
1079         if (flags & AT_STATX_FORCE_SYNC)
1080                 sync = true;
1081         else if (flags & AT_STATX_DONT_SYNC)
1082                 sync = false;
1083         else if (request_mask & READ_ONCE(fi->inval_mask))
1084                 sync = true;
1085         else
1086                 sync = time_before64(fi->i_time, get_jiffies_64());
1087
1088         if (sync) {
1089                 forget_all_cached_acls(inode);
1090                 err = fuse_do_getattr(inode, stat, file);
1091         } else if (stat) {
1092                 generic_fillattr(&init_user_ns, inode, stat);
1093                 stat->mode = fi->orig_i_mode;
1094                 stat->ino = fi->orig_ino;
1095         }
1096
1097         return err;
1098 }
1099
1100 int fuse_update_attributes(struct inode *inode, struct file *file)
1101 {
1102         /* Do *not* need to get atime for internal purposes */
1103         return fuse_update_get_attr(inode, file, NULL,
1104                                     STATX_BASIC_STATS & ~STATX_ATIME, 0);
1105 }
1106
1107 int fuse_reverse_inval_entry(struct fuse_conn *fc, u64 parent_nodeid,
1108                              u64 child_nodeid, struct qstr *name)
1109 {
1110         int err = -ENOTDIR;
1111         struct inode *parent;
1112         struct dentry *dir;
1113         struct dentry *entry;
1114
1115         parent = fuse_ilookup(fc, parent_nodeid, NULL);
1116         if (!parent)
1117                 return -ENOENT;
1118
1119         inode_lock(parent);
1120         if (!S_ISDIR(parent->i_mode))
1121                 goto unlock;
1122
1123         err = -ENOENT;
1124         dir = d_find_alias(parent);
1125         if (!dir)
1126                 goto unlock;
1127
1128         name->hash = full_name_hash(dir, name->name, name->len);
1129         entry = d_lookup(dir, name);
1130         dput(dir);
1131         if (!entry)
1132                 goto unlock;
1133
1134         fuse_dir_changed(parent);
1135         fuse_invalidate_entry(entry);
1136
1137         if (child_nodeid != 0 && d_really_is_positive(entry)) {
1138                 inode_lock(d_inode(entry));
1139                 if (get_node_id(d_inode(entry)) != child_nodeid) {
1140                         err = -ENOENT;
1141                         goto badentry;
1142                 }
1143                 if (d_mountpoint(entry)) {
1144                         err = -EBUSY;
1145                         goto badentry;
1146                 }
1147                 if (d_is_dir(entry)) {
1148                         shrink_dcache_parent(entry);
1149                         if (!simple_empty(entry)) {
1150                                 err = -ENOTEMPTY;
1151                                 goto badentry;
1152                         }
1153                         d_inode(entry)->i_flags |= S_DEAD;
1154                 }
1155                 dont_mount(entry);
1156                 clear_nlink(d_inode(entry));
1157                 err = 0;
1158  badentry:
1159                 inode_unlock(d_inode(entry));
1160                 if (!err)
1161                         d_delete(entry);
1162         } else {
1163                 err = 0;
1164         }
1165         dput(entry);
1166
1167  unlock:
1168         inode_unlock(parent);
1169         iput(parent);
1170         return err;
1171 }
1172
1173 /*
1174  * Calling into a user-controlled filesystem gives the filesystem
1175  * daemon ptrace-like capabilities over the current process.  This
1176  * means, that the filesystem daemon is able to record the exact
1177  * filesystem operations performed, and can also control the behavior
1178  * of the requester process in otherwise impossible ways.  For example
1179  * it can delay the operation for arbitrary length of time allowing
1180  * DoS against the requester.
1181  *
1182  * For this reason only those processes can call into the filesystem,
1183  * for which the owner of the mount has ptrace privilege.  This
1184  * excludes processes started by other users, suid or sgid processes.
1185  */
1186 int fuse_allow_current_process(struct fuse_conn *fc)
1187 {
1188         const struct cred *cred;
1189
1190         if (fc->allow_other)
1191                 return current_in_userns(fc->user_ns);
1192
1193         cred = current_cred();
1194         if (uid_eq(cred->euid, fc->user_id) &&
1195             uid_eq(cred->suid, fc->user_id) &&
1196             uid_eq(cred->uid,  fc->user_id) &&
1197             gid_eq(cred->egid, fc->group_id) &&
1198             gid_eq(cred->sgid, fc->group_id) &&
1199             gid_eq(cred->gid,  fc->group_id))
1200                 return 1;
1201
1202         return 0;
1203 }
1204
1205 static int fuse_access(struct inode *inode, int mask)
1206 {
1207         struct fuse_mount *fm = get_fuse_mount(inode);
1208         FUSE_ARGS(args);
1209         struct fuse_access_in inarg;
1210         int err;
1211
1212         BUG_ON(mask & MAY_NOT_BLOCK);
1213
1214         if (fm->fc->no_access)
1215                 return 0;
1216
1217         memset(&inarg, 0, sizeof(inarg));
1218         inarg.mask = mask & (MAY_READ | MAY_WRITE | MAY_EXEC);
1219         args.opcode = FUSE_ACCESS;
1220         args.nodeid = get_node_id(inode);
1221         args.in_numargs = 1;
1222         args.in_args[0].size = sizeof(inarg);
1223         args.in_args[0].value = &inarg;
1224         err = fuse_simple_request(fm, &args);
1225         if (err == -ENOSYS) {
1226                 fm->fc->no_access = 1;
1227                 err = 0;
1228         }
1229         return err;
1230 }
1231
1232 static int fuse_perm_getattr(struct inode *inode, int mask)
1233 {
1234         if (mask & MAY_NOT_BLOCK)
1235                 return -ECHILD;
1236
1237         forget_all_cached_acls(inode);
1238         return fuse_do_getattr(inode, NULL, NULL);
1239 }
1240
1241 /*
1242  * Check permission.  The two basic access models of FUSE are:
1243  *
1244  * 1) Local access checking ('default_permissions' mount option) based
1245  * on file mode.  This is the plain old disk filesystem permission
1246  * modell.
1247  *
1248  * 2) "Remote" access checking, where server is responsible for
1249  * checking permission in each inode operation.  An exception to this
1250  * is if ->permission() was invoked from sys_access() in which case an
1251  * access request is sent.  Execute permission is still checked
1252  * locally based on file mode.
1253  */
1254 static int fuse_permission(struct user_namespace *mnt_userns,
1255                            struct inode *inode, int mask)
1256 {
1257         struct fuse_conn *fc = get_fuse_conn(inode);
1258         bool refreshed = false;
1259         int err = 0;
1260
1261         if (fuse_is_bad(inode))
1262                 return -EIO;
1263
1264         if (!fuse_allow_current_process(fc))
1265                 return -EACCES;
1266
1267         /*
1268          * If attributes are needed, refresh them before proceeding
1269          */
1270         if (fc->default_permissions ||
1271             ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) {
1272                 struct fuse_inode *fi = get_fuse_inode(inode);
1273                 u32 perm_mask = STATX_MODE | STATX_UID | STATX_GID;
1274
1275                 if (perm_mask & READ_ONCE(fi->inval_mask) ||
1276                     time_before64(fi->i_time, get_jiffies_64())) {
1277                         refreshed = true;
1278
1279                         err = fuse_perm_getattr(inode, mask);
1280                         if (err)
1281                                 return err;
1282                 }
1283         }
1284
1285         if (fc->default_permissions) {
1286                 err = generic_permission(&init_user_ns, inode, mask);
1287
1288                 /* If permission is denied, try to refresh file
1289                    attributes.  This is also needed, because the root
1290                    node will at first have no permissions */
1291                 if (err == -EACCES && !refreshed) {
1292                         err = fuse_perm_getattr(inode, mask);
1293                         if (!err)
1294                                 err = generic_permission(&init_user_ns,
1295                                                          inode, mask);
1296                 }
1297
1298                 /* Note: the opposite of the above test does not
1299                    exist.  So if permissions are revoked this won't be
1300                    noticed immediately, only after the attribute
1301                    timeout has expired */
1302         } else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
1303                 err = fuse_access(inode, mask);
1304         } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
1305                 if (!(inode->i_mode & S_IXUGO)) {
1306                         if (refreshed)
1307                                 return -EACCES;
1308
1309                         err = fuse_perm_getattr(inode, mask);
1310                         if (!err && !(inode->i_mode & S_IXUGO))
1311                                 return -EACCES;
1312                 }
1313         }
1314         return err;
1315 }
1316
1317 static int fuse_readlink_page(struct inode *inode, struct page *page)
1318 {
1319         struct fuse_mount *fm = get_fuse_mount(inode);
1320         struct fuse_page_desc desc = { .length = PAGE_SIZE - 1 };
1321         struct fuse_args_pages ap = {
1322                 .num_pages = 1,
1323                 .pages = &page,
1324                 .descs = &desc,
1325         };
1326         char *link;
1327         ssize_t res;
1328
1329         ap.args.opcode = FUSE_READLINK;
1330         ap.args.nodeid = get_node_id(inode);
1331         ap.args.out_pages = true;
1332         ap.args.out_argvar = true;
1333         ap.args.page_zeroing = true;
1334         ap.args.out_numargs = 1;
1335         ap.args.out_args[0].size = desc.length;
1336         res = fuse_simple_request(fm, &ap.args);
1337
1338         fuse_invalidate_atime(inode);
1339
1340         if (res < 0)
1341                 return res;
1342
1343         if (WARN_ON(res >= PAGE_SIZE))
1344                 return -EIO;
1345
1346         link = page_address(page);
1347         link[res] = '\0';
1348
1349         return 0;
1350 }
1351
1352 static const char *fuse_get_link(struct dentry *dentry, struct inode *inode,
1353                                  struct delayed_call *callback)
1354 {
1355         struct fuse_conn *fc = get_fuse_conn(inode);
1356         struct page *page;
1357         int err;
1358
1359         err = -EIO;
1360         if (fuse_is_bad(inode))
1361                 goto out_err;
1362
1363         if (fc->cache_symlinks)
1364                 return page_get_link(dentry, inode, callback);
1365
1366         err = -ECHILD;
1367         if (!dentry)
1368                 goto out_err;
1369
1370         page = alloc_page(GFP_KERNEL);
1371         err = -ENOMEM;
1372         if (!page)
1373                 goto out_err;
1374
1375         err = fuse_readlink_page(inode, page);
1376         if (err) {
1377                 __free_page(page);
1378                 goto out_err;
1379         }
1380
1381         set_delayed_call(callback, page_put_link, page);
1382
1383         return page_address(page);
1384
1385 out_err:
1386         return ERR_PTR(err);
1387 }
1388
1389 static int fuse_dir_open(struct inode *inode, struct file *file)
1390 {
1391         return fuse_open_common(inode, file, true);
1392 }
1393
1394 static int fuse_dir_release(struct inode *inode, struct file *file)
1395 {
1396         fuse_release_common(file, true);
1397
1398         return 0;
1399 }
1400
1401 static int fuse_dir_fsync(struct file *file, loff_t start, loff_t end,
1402                           int datasync)
1403 {
1404         struct inode *inode = file->f_mapping->host;
1405         struct fuse_conn *fc = get_fuse_conn(inode);
1406         int err;
1407
1408         if (fuse_is_bad(inode))
1409                 return -EIO;
1410
1411         if (fc->no_fsyncdir)
1412                 return 0;
1413
1414         inode_lock(inode);
1415         err = fuse_fsync_common(file, start, end, datasync, FUSE_FSYNCDIR);
1416         if (err == -ENOSYS) {
1417                 fc->no_fsyncdir = 1;
1418                 err = 0;
1419         }
1420         inode_unlock(inode);
1421
1422         return err;
1423 }
1424
1425 static long fuse_dir_ioctl(struct file *file, unsigned int cmd,
1426                             unsigned long arg)
1427 {
1428         struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1429
1430         /* FUSE_IOCTL_DIR only supported for API version >= 7.18 */
1431         if (fc->minor < 18)
1432                 return -ENOTTY;
1433
1434         return fuse_ioctl_common(file, cmd, arg, FUSE_IOCTL_DIR);
1435 }
1436
1437 static long fuse_dir_compat_ioctl(struct file *file, unsigned int cmd,
1438                                    unsigned long arg)
1439 {
1440         struct fuse_conn *fc = get_fuse_conn(file->f_mapping->host);
1441
1442         if (fc->minor < 18)
1443                 return -ENOTTY;
1444
1445         return fuse_ioctl_common(file, cmd, arg,
1446                                  FUSE_IOCTL_COMPAT | FUSE_IOCTL_DIR);
1447 }
1448
1449 static bool update_mtime(unsigned ivalid, bool trust_local_mtime)
1450 {
1451         /* Always update if mtime is explicitly set  */
1452         if (ivalid & ATTR_MTIME_SET)
1453                 return true;
1454
1455         /* Or if kernel i_mtime is the official one */
1456         if (trust_local_mtime)
1457                 return true;
1458
1459         /* If it's an open(O_TRUNC) or an ftruncate(), don't update */
1460         if ((ivalid & ATTR_SIZE) && (ivalid & (ATTR_OPEN | ATTR_FILE)))
1461                 return false;
1462
1463         /* In all other cases update */
1464         return true;
1465 }
1466
1467 static void iattr_to_fattr(struct fuse_conn *fc, struct iattr *iattr,
1468                            struct fuse_setattr_in *arg, bool trust_local_cmtime)
1469 {
1470         unsigned ivalid = iattr->ia_valid;
1471
1472         if (ivalid & ATTR_MODE)
1473                 arg->valid |= FATTR_MODE,   arg->mode = iattr->ia_mode;
1474         if (ivalid & ATTR_UID)
1475                 arg->valid |= FATTR_UID,    arg->uid = from_kuid(fc->user_ns, iattr->ia_uid);
1476         if (ivalid & ATTR_GID)
1477                 arg->valid |= FATTR_GID,    arg->gid = from_kgid(fc->user_ns, iattr->ia_gid);
1478         if (ivalid & ATTR_SIZE)
1479                 arg->valid |= FATTR_SIZE,   arg->size = iattr->ia_size;
1480         if (ivalid & ATTR_ATIME) {
1481                 arg->valid |= FATTR_ATIME;
1482                 arg->atime = iattr->ia_atime.tv_sec;
1483                 arg->atimensec = iattr->ia_atime.tv_nsec;
1484                 if (!(ivalid & ATTR_ATIME_SET))
1485                         arg->valid |= FATTR_ATIME_NOW;
1486         }
1487         if ((ivalid & ATTR_MTIME) && update_mtime(ivalid, trust_local_cmtime)) {
1488                 arg->valid |= FATTR_MTIME;
1489                 arg->mtime = iattr->ia_mtime.tv_sec;
1490                 arg->mtimensec = iattr->ia_mtime.tv_nsec;
1491                 if (!(ivalid & ATTR_MTIME_SET) && !trust_local_cmtime)
1492                         arg->valid |= FATTR_MTIME_NOW;
1493         }
1494         if ((ivalid & ATTR_CTIME) && trust_local_cmtime) {
1495                 arg->valid |= FATTR_CTIME;
1496                 arg->ctime = iattr->ia_ctime.tv_sec;
1497                 arg->ctimensec = iattr->ia_ctime.tv_nsec;
1498         }
1499 }
1500
1501 /*
1502  * Prevent concurrent writepages on inode
1503  *
1504  * This is done by adding a negative bias to the inode write counter
1505  * and waiting for all pending writes to finish.
1506  */
1507 void fuse_set_nowrite(struct inode *inode)
1508 {
1509         struct fuse_inode *fi = get_fuse_inode(inode);
1510
1511         BUG_ON(!inode_is_locked(inode));
1512
1513         spin_lock(&fi->lock);
1514         BUG_ON(fi->writectr < 0);
1515         fi->writectr += FUSE_NOWRITE;
1516         spin_unlock(&fi->lock);
1517         wait_event(fi->page_waitq, fi->writectr == FUSE_NOWRITE);
1518 }
1519
1520 /*
1521  * Allow writepages on inode
1522  *
1523  * Remove the bias from the writecounter and send any queued
1524  * writepages.
1525  */
1526 static void __fuse_release_nowrite(struct inode *inode)
1527 {
1528         struct fuse_inode *fi = get_fuse_inode(inode);
1529
1530         BUG_ON(fi->writectr != FUSE_NOWRITE);
1531         fi->writectr = 0;
1532         fuse_flush_writepages(inode);
1533 }
1534
1535 void fuse_release_nowrite(struct inode *inode)
1536 {
1537         struct fuse_inode *fi = get_fuse_inode(inode);
1538
1539         spin_lock(&fi->lock);
1540         __fuse_release_nowrite(inode);
1541         spin_unlock(&fi->lock);
1542 }
1543
1544 static void fuse_setattr_fill(struct fuse_conn *fc, struct fuse_args *args,
1545                               struct inode *inode,
1546                               struct fuse_setattr_in *inarg_p,
1547                               struct fuse_attr_out *outarg_p)
1548 {
1549         args->opcode = FUSE_SETATTR;
1550         args->nodeid = get_node_id(inode);
1551         args->in_numargs = 1;
1552         args->in_args[0].size = sizeof(*inarg_p);
1553         args->in_args[0].value = inarg_p;
1554         args->out_numargs = 1;
1555         args->out_args[0].size = sizeof(*outarg_p);
1556         args->out_args[0].value = outarg_p;
1557 }
1558
1559 /*
1560  * Flush inode->i_mtime to the server
1561  */
1562 int fuse_flush_times(struct inode *inode, struct fuse_file *ff)
1563 {
1564         struct fuse_mount *fm = get_fuse_mount(inode);
1565         FUSE_ARGS(args);
1566         struct fuse_setattr_in inarg;
1567         struct fuse_attr_out outarg;
1568
1569         memset(&inarg, 0, sizeof(inarg));
1570         memset(&outarg, 0, sizeof(outarg));
1571
1572         inarg.valid = FATTR_MTIME;
1573         inarg.mtime = inode->i_mtime.tv_sec;
1574         inarg.mtimensec = inode->i_mtime.tv_nsec;
1575         if (fm->fc->minor >= 23) {
1576                 inarg.valid |= FATTR_CTIME;
1577                 inarg.ctime = inode->i_ctime.tv_sec;
1578                 inarg.ctimensec = inode->i_ctime.tv_nsec;
1579         }
1580         if (ff) {
1581                 inarg.valid |= FATTR_FH;
1582                 inarg.fh = ff->fh;
1583         }
1584         fuse_setattr_fill(fm->fc, &args, inode, &inarg, &outarg);
1585
1586         return fuse_simple_request(fm, &args);
1587 }
1588
1589 /*
1590  * Set attributes, and at the same time refresh them.
1591  *
1592  * Truncation is slightly complicated, because the 'truncate' request
1593  * may fail, in which case we don't want to touch the mapping.
1594  * vmtruncate() doesn't allow for this case, so do the rlimit checking
1595  * and the actual truncation by hand.
1596  */
1597 int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
1598                     struct file *file)
1599 {
1600         struct inode *inode = d_inode(dentry);
1601         struct fuse_mount *fm = get_fuse_mount(inode);
1602         struct fuse_conn *fc = fm->fc;
1603         struct fuse_inode *fi = get_fuse_inode(inode);
1604         FUSE_ARGS(args);
1605         struct fuse_setattr_in inarg;
1606         struct fuse_attr_out outarg;
1607         bool is_truncate = false;
1608         bool is_wb = fc->writeback_cache;
1609         loff_t oldsize;
1610         int err;
1611         bool trust_local_cmtime = is_wb && S_ISREG(inode->i_mode);
1612         bool fault_blocked = false;
1613
1614         if (!fc->default_permissions)
1615                 attr->ia_valid |= ATTR_FORCE;
1616
1617         err = setattr_prepare(&init_user_ns, dentry, attr);
1618         if (err)
1619                 return err;
1620
1621         if (attr->ia_valid & ATTR_SIZE) {
1622                 if (WARN_ON(!S_ISREG(inode->i_mode)))
1623                         return -EIO;
1624                 is_truncate = true;
1625         }
1626
1627         if (FUSE_IS_DAX(inode) && is_truncate) {
1628                 down_write(&fi->i_mmap_sem);
1629                 fault_blocked = true;
1630                 err = fuse_dax_break_layouts(inode, 0, 0);
1631                 if (err) {
1632                         up_write(&fi->i_mmap_sem);
1633                         return err;
1634                 }
1635         }
1636
1637         if (attr->ia_valid & ATTR_OPEN) {
1638                 /* This is coming from open(..., ... | O_TRUNC); */
1639                 WARN_ON(!(attr->ia_valid & ATTR_SIZE));
1640                 WARN_ON(attr->ia_size != 0);
1641                 if (fc->atomic_o_trunc) {
1642                         /*
1643                          * No need to send request to userspace, since actual
1644                          * truncation has already been done by OPEN.  But still
1645                          * need to truncate page cache.
1646                          */
1647                         i_size_write(inode, 0);
1648                         truncate_pagecache(inode, 0);
1649                         goto out;
1650                 }
1651                 file = NULL;
1652         }
1653
1654         /* Flush dirty data/metadata before non-truncate SETATTR */
1655         if (is_wb && S_ISREG(inode->i_mode) &&
1656             attr->ia_valid &
1657                         (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_MTIME_SET |
1658                          ATTR_TIMES_SET)) {
1659                 err = write_inode_now(inode, true);
1660                 if (err)
1661                         return err;
1662
1663                 fuse_set_nowrite(inode);
1664                 fuse_release_nowrite(inode);
1665         }
1666
1667         if (is_truncate) {
1668                 fuse_set_nowrite(inode);
1669                 set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1670                 if (trust_local_cmtime && attr->ia_size != inode->i_size)
1671                         attr->ia_valid |= ATTR_MTIME | ATTR_CTIME;
1672         }
1673
1674         memset(&inarg, 0, sizeof(inarg));
1675         memset(&outarg, 0, sizeof(outarg));
1676         iattr_to_fattr(fc, attr, &inarg, trust_local_cmtime);
1677         if (file) {
1678                 struct fuse_file *ff = file->private_data;
1679                 inarg.valid |= FATTR_FH;
1680                 inarg.fh = ff->fh;
1681         }
1682
1683         /* Kill suid/sgid for non-directory chown unconditionally */
1684         if (fc->handle_killpriv_v2 && !S_ISDIR(inode->i_mode) &&
1685             attr->ia_valid & (ATTR_UID | ATTR_GID))
1686                 inarg.valid |= FATTR_KILL_SUIDGID;
1687
1688         if (attr->ia_valid & ATTR_SIZE) {
1689                 /* For mandatory locking in truncate */
1690                 inarg.valid |= FATTR_LOCKOWNER;
1691                 inarg.lock_owner = fuse_lock_owner_id(fc, current->files);
1692
1693                 /* Kill suid/sgid for truncate only if no CAP_FSETID */
1694                 if (fc->handle_killpriv_v2 && !capable(CAP_FSETID))
1695                         inarg.valid |= FATTR_KILL_SUIDGID;
1696         }
1697         fuse_setattr_fill(fc, &args, inode, &inarg, &outarg);
1698         err = fuse_simple_request(fm, &args);
1699         if (err) {
1700                 if (err == -EINTR)
1701                         fuse_invalidate_attr(inode);
1702                 goto error;
1703         }
1704
1705         if (fuse_invalid_attr(&outarg.attr) ||
1706             (inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
1707                 fuse_make_bad(inode);
1708                 err = -EIO;
1709                 goto error;
1710         }
1711
1712         spin_lock(&fi->lock);
1713         /* the kernel maintains i_mtime locally */
1714         if (trust_local_cmtime) {
1715                 if (attr->ia_valid & ATTR_MTIME)
1716                         inode->i_mtime = attr->ia_mtime;
1717                 if (attr->ia_valid & ATTR_CTIME)
1718                         inode->i_ctime = attr->ia_ctime;
1719                 /* FIXME: clear I_DIRTY_SYNC? */
1720         }
1721
1722         fuse_change_attributes_common(inode, &outarg.attr,
1723                                       attr_timeout(&outarg));
1724         oldsize = inode->i_size;
1725         /* see the comment in fuse_change_attributes() */
1726         if (!is_wb || is_truncate || !S_ISREG(inode->i_mode))
1727                 i_size_write(inode, outarg.attr.size);
1728
1729         if (is_truncate) {
1730                 /* NOTE: this may release/reacquire fi->lock */
1731                 __fuse_release_nowrite(inode);
1732         }
1733         spin_unlock(&fi->lock);
1734
1735         /*
1736          * Only call invalidate_inode_pages2() after removing
1737          * FUSE_NOWRITE, otherwise fuse_launder_page() would deadlock.
1738          */
1739         if ((is_truncate || !is_wb) &&
1740             S_ISREG(inode->i_mode) && oldsize != outarg.attr.size) {
1741                 truncate_pagecache(inode, outarg.attr.size);
1742                 invalidate_inode_pages2(inode->i_mapping);
1743         }
1744
1745         clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1746 out:
1747         if (fault_blocked)
1748                 up_write(&fi->i_mmap_sem);
1749
1750         return 0;
1751
1752 error:
1753         if (is_truncate)
1754                 fuse_release_nowrite(inode);
1755
1756         clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);
1757
1758         if (fault_blocked)
1759                 up_write(&fi->i_mmap_sem);
1760         return err;
1761 }
1762
1763 static int fuse_setattr(struct user_namespace *mnt_userns, struct dentry *entry,
1764                         struct iattr *attr)
1765 {
1766         struct inode *inode = d_inode(entry);
1767         struct fuse_conn *fc = get_fuse_conn(inode);
1768         struct file *file = (attr->ia_valid & ATTR_FILE) ? attr->ia_file : NULL;
1769         int ret;
1770
1771         if (fuse_is_bad(inode))
1772                 return -EIO;
1773
1774         if (!fuse_allow_current_process(get_fuse_conn(inode)))
1775                 return -EACCES;
1776
1777         if (attr->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) {
1778                 attr->ia_valid &= ~(ATTR_KILL_SUID | ATTR_KILL_SGID |
1779                                     ATTR_MODE);
1780
1781                 /*
1782                  * The only sane way to reliably kill suid/sgid is to do it in
1783                  * the userspace filesystem
1784                  *
1785                  * This should be done on write(), truncate() and chown().
1786                  */
1787                 if (!fc->handle_killpriv && !fc->handle_killpriv_v2) {
1788                         /*
1789                          * ia_mode calculation may have used stale i_mode.
1790                          * Refresh and recalculate.
1791                          */
1792                         ret = fuse_do_getattr(inode, NULL, file);
1793                         if (ret)
1794                                 return ret;
1795
1796                         attr->ia_mode = inode->i_mode;
1797                         if (inode->i_mode & S_ISUID) {
1798                                 attr->ia_valid |= ATTR_MODE;
1799                                 attr->ia_mode &= ~S_ISUID;
1800                         }
1801                         if ((inode->i_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
1802                                 attr->ia_valid |= ATTR_MODE;
1803                                 attr->ia_mode &= ~S_ISGID;
1804                         }
1805                 }
1806         }
1807         if (!attr->ia_valid)
1808                 return 0;
1809
1810         ret = fuse_do_setattr(entry, attr, file);
1811         if (!ret) {
1812                 /*
1813                  * If filesystem supports acls it may have updated acl xattrs in
1814                  * the filesystem, so forget cached acls for the inode.
1815                  */
1816                 if (fc->posix_acl)
1817                         forget_all_cached_acls(inode);
1818
1819                 /* Directory mode changed, may need to revalidate access */
1820                 if (d_is_dir(entry) && (attr->ia_valid & ATTR_MODE))
1821                         fuse_invalidate_entry_cache(entry);
1822         }
1823         return ret;
1824 }
1825
1826 static int fuse_getattr(struct user_namespace *mnt_userns,
1827                         const struct path *path, struct kstat *stat,
1828                         u32 request_mask, unsigned int flags)
1829 {
1830         struct inode *inode = d_inode(path->dentry);
1831         struct fuse_conn *fc = get_fuse_conn(inode);
1832
1833         if (fuse_is_bad(inode))
1834                 return -EIO;
1835
1836         if (!fuse_allow_current_process(fc)) {
1837                 if (!request_mask) {
1838                         /*
1839                          * If user explicitly requested *nothing* then don't
1840                          * error out, but return st_dev only.
1841                          */
1842                         stat->result_mask = 0;
1843                         stat->dev = inode->i_sb->s_dev;
1844                         return 0;
1845                 }
1846                 return -EACCES;
1847         }
1848
1849         return fuse_update_get_attr(inode, NULL, stat, request_mask, flags);
1850 }
1851
1852 static const struct inode_operations fuse_dir_inode_operations = {
1853         .lookup         = fuse_lookup,
1854         .mkdir          = fuse_mkdir,
1855         .symlink        = fuse_symlink,
1856         .unlink         = fuse_unlink,
1857         .rmdir          = fuse_rmdir,
1858         .rename         = fuse_rename2,
1859         .link           = fuse_link,
1860         .setattr        = fuse_setattr,
1861         .create         = fuse_create,
1862         .atomic_open    = fuse_atomic_open,
1863         .mknod          = fuse_mknod,
1864         .permission     = fuse_permission,
1865         .getattr        = fuse_getattr,
1866         .listxattr      = fuse_listxattr,
1867         .get_acl        = fuse_get_acl,
1868         .set_acl        = fuse_set_acl,
1869 };
1870
1871 static const struct file_operations fuse_dir_operations = {
1872         .llseek         = generic_file_llseek,
1873         .read           = generic_read_dir,
1874         .iterate_shared = fuse_readdir,
1875         .open           = fuse_dir_open,
1876         .release        = fuse_dir_release,
1877         .fsync          = fuse_dir_fsync,
1878         .unlocked_ioctl = fuse_dir_ioctl,
1879         .compat_ioctl   = fuse_dir_compat_ioctl,
1880 };
1881
1882 static const struct inode_operations fuse_common_inode_operations = {
1883         .setattr        = fuse_setattr,
1884         .permission     = fuse_permission,
1885         .getattr        = fuse_getattr,
1886         .listxattr      = fuse_listxattr,
1887         .get_acl        = fuse_get_acl,
1888         .set_acl        = fuse_set_acl,
1889 };
1890
1891 static const struct inode_operations fuse_symlink_inode_operations = {
1892         .setattr        = fuse_setattr,
1893         .get_link       = fuse_get_link,
1894         .getattr        = fuse_getattr,
1895         .listxattr      = fuse_listxattr,
1896 };
1897
1898 void fuse_init_common(struct inode *inode)
1899 {
1900         inode->i_op = &fuse_common_inode_operations;
1901 }
1902
1903 void fuse_init_dir(struct inode *inode)
1904 {
1905         struct fuse_inode *fi = get_fuse_inode(inode);
1906
1907         inode->i_op = &fuse_dir_inode_operations;
1908         inode->i_fop = &fuse_dir_operations;
1909
1910         spin_lock_init(&fi->rdc.lock);
1911         fi->rdc.cached = false;
1912         fi->rdc.size = 0;
1913         fi->rdc.pos = 0;
1914         fi->rdc.version = 0;
1915 }
1916
1917 static int fuse_symlink_readpage(struct file *null, struct page *page)
1918 {
1919         int err = fuse_readlink_page(page->mapping->host, page);
1920
1921         if (!err)
1922                 SetPageUptodate(page);
1923
1924         unlock_page(page);
1925
1926         return err;
1927 }
1928
1929 static const struct address_space_operations fuse_symlink_aops = {
1930         .readpage       = fuse_symlink_readpage,
1931 };
1932
1933 void fuse_init_symlink(struct inode *inode)
1934 {
1935         inode->i_op = &fuse_symlink_inode_operations;
1936         inode->i_data.a_ops = &fuse_symlink_aops;
1937         inode_nohighmem(inode);
1938 }