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