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