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