1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved 4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org> 5 * Copyright 2001-2006 Ian Kent <raven@themaw.net> 6 */ 7 8 #include <linux/capability.h> 9 #include <linux/compat.h> 10 11 #include "autofs_i.h" 12 13 static int autofs_dir_symlink(struct inode *, struct dentry *, const char *); 14 static int autofs_dir_unlink(struct inode *, struct dentry *); 15 static int autofs_dir_rmdir(struct inode *, struct dentry *); 16 static int autofs_dir_mkdir(struct inode *, struct dentry *, umode_t); 17 static long autofs_root_ioctl(struct file *, unsigned int, unsigned long); 18 #ifdef CONFIG_COMPAT 19 static long autofs_root_compat_ioctl(struct file *, 20 unsigned int, unsigned long); 21 #endif 22 static int autofs_dir_open(struct inode *inode, struct file *file); 23 static struct dentry *autofs_lookup(struct inode *, 24 struct dentry *, unsigned int); 25 static struct vfsmount *autofs_d_automount(struct path *); 26 static int autofs_d_manage(const struct path *, bool); 27 static void autofs_dentry_release(struct dentry *); 28 29 const struct file_operations autofs_root_operations = { 30 .open = dcache_dir_open, 31 .release = dcache_dir_close, 32 .read = generic_read_dir, 33 .iterate_shared = dcache_readdir, 34 .llseek = dcache_dir_lseek, 35 .unlocked_ioctl = autofs_root_ioctl, 36 #ifdef CONFIG_COMPAT 37 .compat_ioctl = autofs_root_compat_ioctl, 38 #endif 39 }; 40 41 const struct file_operations autofs_dir_operations = { 42 .open = autofs_dir_open, 43 .release = dcache_dir_close, 44 .read = generic_read_dir, 45 .iterate_shared = dcache_readdir, 46 .llseek = dcache_dir_lseek, 47 }; 48 49 const struct inode_operations autofs_dir_inode_operations = { 50 .lookup = autofs_lookup, 51 .unlink = autofs_dir_unlink, 52 .symlink = autofs_dir_symlink, 53 .mkdir = autofs_dir_mkdir, 54 .rmdir = autofs_dir_rmdir, 55 }; 56 57 const struct dentry_operations autofs_dentry_operations = { 58 .d_automount = autofs_d_automount, 59 .d_manage = autofs_d_manage, 60 .d_release = autofs_dentry_release, 61 }; 62 63 static void autofs_del_active(struct dentry *dentry) 64 { 65 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 66 struct autofs_info *ino; 67 68 ino = autofs_dentry_ino(dentry); 69 spin_lock(&sbi->lookup_lock); 70 list_del_init(&ino->active); 71 spin_unlock(&sbi->lookup_lock); 72 } 73 74 static int autofs_dir_open(struct inode *inode, struct file *file) 75 { 76 struct dentry *dentry = file->f_path.dentry; 77 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 78 79 pr_debug("file=%p dentry=%p %pd\n", file, dentry, dentry); 80 81 if (autofs_oz_mode(sbi)) 82 goto out; 83 84 /* 85 * An empty directory in an autofs file system is always a 86 * mount point. The daemon must have failed to mount this 87 * during lookup so it doesn't exist. This can happen, for 88 * example, if user space returns an incorrect status for a 89 * mount request. Otherwise we're doing a readdir on the 90 * autofs file system so just let the libfs routines handle 91 * it. 92 */ 93 spin_lock(&sbi->lookup_lock); 94 if (!path_is_mountpoint(&file->f_path) && simple_empty(dentry)) { 95 spin_unlock(&sbi->lookup_lock); 96 return -ENOENT; 97 } 98 spin_unlock(&sbi->lookup_lock); 99 100 out: 101 return dcache_dir_open(inode, file); 102 } 103 104 static void autofs_dentry_release(struct dentry *de) 105 { 106 struct autofs_info *ino = autofs_dentry_ino(de); 107 struct autofs_sb_info *sbi = autofs_sbi(de->d_sb); 108 109 pr_debug("releasing %p\n", de); 110 111 if (!ino) 112 return; 113 114 if (sbi) { 115 spin_lock(&sbi->lookup_lock); 116 if (!list_empty(&ino->active)) 117 list_del(&ino->active); 118 if (!list_empty(&ino->expiring)) 119 list_del(&ino->expiring); 120 spin_unlock(&sbi->lookup_lock); 121 } 122 123 autofs_free_ino(ino); 124 } 125 126 static struct dentry *autofs_lookup_active(struct dentry *dentry) 127 { 128 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 129 struct dentry *parent = dentry->d_parent; 130 const struct qstr *name = &dentry->d_name; 131 unsigned int len = name->len; 132 unsigned int hash = name->hash; 133 const unsigned char *str = name->name; 134 struct list_head *p, *head; 135 136 head = &sbi->active_list; 137 if (list_empty(head)) 138 return NULL; 139 spin_lock(&sbi->lookup_lock); 140 list_for_each(p, head) { 141 struct autofs_info *ino; 142 struct dentry *active; 143 const struct qstr *qstr; 144 145 ino = list_entry(p, struct autofs_info, active); 146 active = ino->dentry; 147 148 spin_lock(&active->d_lock); 149 150 /* Already gone? */ 151 if ((int) d_count(active) <= 0) 152 goto next; 153 154 qstr = &active->d_name; 155 156 if (active->d_name.hash != hash) 157 goto next; 158 if (active->d_parent != parent) 159 goto next; 160 161 if (qstr->len != len) 162 goto next; 163 if (memcmp(qstr->name, str, len)) 164 goto next; 165 166 if (d_unhashed(active)) { 167 dget_dlock(active); 168 spin_unlock(&active->d_lock); 169 spin_unlock(&sbi->lookup_lock); 170 return active; 171 } 172 next: 173 spin_unlock(&active->d_lock); 174 } 175 spin_unlock(&sbi->lookup_lock); 176 177 return NULL; 178 } 179 180 static struct dentry *autofs_lookup_expiring(struct dentry *dentry, 181 bool rcu_walk) 182 { 183 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 184 struct dentry *parent = dentry->d_parent; 185 const struct qstr *name = &dentry->d_name; 186 unsigned int len = name->len; 187 unsigned int hash = name->hash; 188 const unsigned char *str = name->name; 189 struct list_head *p, *head; 190 191 head = &sbi->expiring_list; 192 if (list_empty(head)) 193 return NULL; 194 spin_lock(&sbi->lookup_lock); 195 list_for_each(p, head) { 196 struct autofs_info *ino; 197 struct dentry *expiring; 198 const struct qstr *qstr; 199 200 if (rcu_walk) { 201 spin_unlock(&sbi->lookup_lock); 202 return ERR_PTR(-ECHILD); 203 } 204 205 ino = list_entry(p, struct autofs_info, expiring); 206 expiring = ino->dentry; 207 208 spin_lock(&expiring->d_lock); 209 210 /* We've already been dentry_iput or unlinked */ 211 if (d_really_is_negative(expiring)) 212 goto next; 213 214 qstr = &expiring->d_name; 215 216 if (expiring->d_name.hash != hash) 217 goto next; 218 if (expiring->d_parent != parent) 219 goto next; 220 221 if (qstr->len != len) 222 goto next; 223 if (memcmp(qstr->name, str, len)) 224 goto next; 225 226 if (d_unhashed(expiring)) { 227 dget_dlock(expiring); 228 spin_unlock(&expiring->d_lock); 229 spin_unlock(&sbi->lookup_lock); 230 return expiring; 231 } 232 next: 233 spin_unlock(&expiring->d_lock); 234 } 235 spin_unlock(&sbi->lookup_lock); 236 237 return NULL; 238 } 239 240 static int autofs_mount_wait(const struct path *path, bool rcu_walk) 241 { 242 struct autofs_sb_info *sbi = autofs_sbi(path->dentry->d_sb); 243 struct autofs_info *ino = autofs_dentry_ino(path->dentry); 244 int status = 0; 245 246 if (ino->flags & AUTOFS_INF_PENDING) { 247 if (rcu_walk) 248 return -ECHILD; 249 pr_debug("waiting for mount name=%pd\n", path->dentry); 250 status = autofs_wait(sbi, path, NFY_MOUNT); 251 pr_debug("mount wait done status=%d\n", status); 252 ino->last_used = jiffies; 253 return status; 254 } 255 if (!(sbi->flags & AUTOFS_SBI_STRICTEXPIRE)) 256 ino->last_used = jiffies; 257 return status; 258 } 259 260 static int do_expire_wait(const struct path *path, bool rcu_walk) 261 { 262 struct dentry *dentry = path->dentry; 263 struct dentry *expiring; 264 265 expiring = autofs_lookup_expiring(dentry, rcu_walk); 266 if (IS_ERR(expiring)) 267 return PTR_ERR(expiring); 268 if (!expiring) 269 return autofs_expire_wait(path, rcu_walk); 270 else { 271 const struct path this = { .mnt = path->mnt, .dentry = expiring }; 272 /* 273 * If we are racing with expire the request might not 274 * be quite complete, but the directory has been removed 275 * so it must have been successful, just wait for it. 276 */ 277 autofs_expire_wait(&this, 0); 278 autofs_del_expiring(expiring); 279 dput(expiring); 280 } 281 return 0; 282 } 283 284 static struct dentry *autofs_mountpoint_changed(struct path *path) 285 { 286 struct dentry *dentry = path->dentry; 287 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 288 289 /* 290 * If this is an indirect mount the dentry could have gone away 291 * as a result of an expire and a new one created. 292 */ 293 if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) { 294 struct dentry *parent = dentry->d_parent; 295 struct autofs_info *ino; 296 struct dentry *new; 297 298 new = d_lookup(parent, &dentry->d_name); 299 if (!new) 300 return NULL; 301 ino = autofs_dentry_ino(new); 302 ino->last_used = jiffies; 303 dput(path->dentry); 304 path->dentry = new; 305 } 306 return path->dentry; 307 } 308 309 static struct vfsmount *autofs_d_automount(struct path *path) 310 { 311 struct dentry *dentry = path->dentry; 312 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 313 struct autofs_info *ino = autofs_dentry_ino(dentry); 314 int status; 315 316 pr_debug("dentry=%p %pd\n", dentry, dentry); 317 318 /* The daemon never triggers a mount. */ 319 if (autofs_oz_mode(sbi)) 320 return NULL; 321 322 /* 323 * If an expire request is pending everyone must wait. 324 * If the expire fails we're still mounted so continue 325 * the follow and return. A return of -EAGAIN (which only 326 * happens with indirect mounts) means the expire completed 327 * and the directory was removed, so just go ahead and try 328 * the mount. 329 */ 330 status = do_expire_wait(path, 0); 331 if (status && status != -EAGAIN) 332 return NULL; 333 334 /* Callback to the daemon to perform the mount or wait */ 335 spin_lock(&sbi->fs_lock); 336 if (ino->flags & AUTOFS_INF_PENDING) { 337 spin_unlock(&sbi->fs_lock); 338 status = autofs_mount_wait(path, 0); 339 if (status) 340 return ERR_PTR(status); 341 goto done; 342 } 343 344 /* 345 * If the dentry is a symlink it's equivalent to a directory 346 * having path_is_mountpoint() true, so there's no need to call 347 * back to the daemon. 348 */ 349 if (d_really_is_positive(dentry) && d_is_symlink(dentry)) { 350 spin_unlock(&sbi->fs_lock); 351 goto done; 352 } 353 354 if (!path_is_mountpoint(path)) { 355 /* 356 * It's possible that user space hasn't removed directories 357 * after umounting a rootless multi-mount, although it 358 * should. For v5 path_has_submounts() is sufficient to 359 * handle this because the leaves of the directory tree under 360 * the mount never trigger mounts themselves (they have an 361 * autofs trigger mount mounted on them). But v4 pseudo direct 362 * mounts do need the leaves to trigger mounts. In this case 363 * we have no choice but to use the list_empty() check and 364 * require user space behave. 365 */ 366 if (sbi->version > 4) { 367 if (path_has_submounts(path)) { 368 spin_unlock(&sbi->fs_lock); 369 goto done; 370 } 371 } else { 372 if (!simple_empty(dentry)) { 373 spin_unlock(&sbi->fs_lock); 374 goto done; 375 } 376 } 377 ino->flags |= AUTOFS_INF_PENDING; 378 spin_unlock(&sbi->fs_lock); 379 status = autofs_mount_wait(path, 0); 380 spin_lock(&sbi->fs_lock); 381 ino->flags &= ~AUTOFS_INF_PENDING; 382 if (status) { 383 spin_unlock(&sbi->fs_lock); 384 return ERR_PTR(status); 385 } 386 } 387 spin_unlock(&sbi->fs_lock); 388 done: 389 /* Mount succeeded, check if we ended up with a new dentry */ 390 dentry = autofs_mountpoint_changed(path); 391 if (!dentry) 392 return ERR_PTR(-ENOENT); 393 394 return NULL; 395 } 396 397 static int autofs_d_manage(const struct path *path, bool rcu_walk) 398 { 399 struct dentry *dentry = path->dentry; 400 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); 401 struct autofs_info *ino = autofs_dentry_ino(dentry); 402 int status; 403 404 pr_debug("dentry=%p %pd\n", dentry, dentry); 405 406 /* The daemon never waits. */ 407 if (autofs_oz_mode(sbi)) { 408 if (!path_is_mountpoint(path)) 409 return -EISDIR; 410 return 0; 411 } 412 413 /* Wait for pending expires */ 414 if (do_expire_wait(path, rcu_walk) == -ECHILD) 415 return -ECHILD; 416 417 /* 418 * This dentry may be under construction so wait on mount 419 * completion. 420 */ 421 status = autofs_mount_wait(path, rcu_walk); 422 if (status) 423 return status; 424 425 if (rcu_walk) { 426 /* We don't need fs_lock in rcu_walk mode, 427 * just testing 'AUTOFS_INFO_NO_RCU' is enough. 428 * simple_empty() takes a spinlock, so leave it 429 * to last. 430 * We only return -EISDIR when certain this isn't 431 * a mount-trap. 432 */ 433 struct inode *inode; 434 435 if (ino->flags & AUTOFS_INF_WANT_EXPIRE) 436 return 0; 437 if (path_is_mountpoint(path)) 438 return 0; 439 inode = d_inode_rcu(dentry); 440 if (inode && S_ISLNK(inode->i_mode)) 441 return -EISDIR; 442 if (list_empty(&dentry->d_subdirs)) 443 return 0; 444 if (!simple_empty(dentry)) 445 return -EISDIR; 446 return 0; 447 } 448 449 spin_lock(&sbi->fs_lock); 450 /* 451 * If the dentry has been selected for expire while we slept 452 * on the lock then it might go away. We'll deal with that in 453 * ->d_automount() and wait on a new mount if the expire 454 * succeeds or return here if it doesn't (since there's no 455 * mount to follow with a rootless multi-mount). 456 */ 457 if (!(ino->flags & AUTOFS_INF_EXPIRING)) { 458 /* 459 * Any needed mounting has been completed and the path 460 * updated so check if this is a rootless multi-mount so 461 * we can avoid needless calls ->d_automount() and avoid 462 * an incorrect ELOOP error return. 463 */ 464 if ((!path_is_mountpoint(path) && !simple_empty(dentry)) || 465 (d_really_is_positive(dentry) && d_is_symlink(dentry))) 466 status = -EISDIR; 467 } 468 spin_unlock(&sbi->fs_lock); 469 470 return status; 471 } 472 473 /* Lookups in the root directory */ 474 static struct dentry *autofs_lookup(struct inode *dir, 475 struct dentry *dentry, unsigned int flags) 476 { 477 struct autofs_sb_info *sbi; 478 struct autofs_info *ino; 479 struct dentry *active; 480 481 pr_debug("name = %pd\n", dentry); 482 483 /* File name too long to exist */ 484 if (dentry->d_name.len > NAME_MAX) 485 return ERR_PTR(-ENAMETOOLONG); 486 487 sbi = autofs_sbi(dir->i_sb); 488 489 pr_debug("pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n", 490 current->pid, task_pgrp_nr(current), 491 sbi->flags & AUTOFS_SBI_CATATONIC, 492 autofs_oz_mode(sbi)); 493 494 active = autofs_lookup_active(dentry); 495 if (active) 496 return active; 497 else { 498 /* 499 * A dentry that is not within the root can never trigger a 500 * mount operation, unless the directory already exists, so we 501 * can return fail immediately. The daemon however does need 502 * to create directories within the file system. 503 */ 504 if (!autofs_oz_mode(sbi) && !IS_ROOT(dentry->d_parent)) 505 return ERR_PTR(-ENOENT); 506 507 ino = autofs_new_ino(sbi); 508 if (!ino) 509 return ERR_PTR(-ENOMEM); 510 511 spin_lock(&sbi->lookup_lock); 512 spin_lock(&dentry->d_lock); 513 /* Mark entries in the root as mount triggers */ 514 if (IS_ROOT(dentry->d_parent) && 515 autofs_type_indirect(sbi->type)) 516 __managed_dentry_set_managed(dentry); 517 dentry->d_fsdata = ino; 518 ino->dentry = dentry; 519 520 list_add(&ino->active, &sbi->active_list); 521 spin_unlock(&sbi->lookup_lock); 522 spin_unlock(&dentry->d_lock); 523 } 524 return NULL; 525 } 526 527 static int autofs_dir_symlink(struct inode *dir, 528 struct dentry *dentry, 529 const char *symname) 530 { 531 struct autofs_sb_info *sbi = autofs_sbi(dir->i_sb); 532 struct autofs_info *ino = autofs_dentry_ino(dentry); 533 struct autofs_info *p_ino; 534 struct inode *inode; 535 size_t size = strlen(symname); 536 char *cp; 537 538 pr_debug("%s <- %pd\n", symname, dentry); 539 540 if (!autofs_oz_mode(sbi)) 541 return -EACCES; 542 543 /* autofs_oz_mode() needs to allow path walks when the 544 * autofs mount is catatonic but the state of an autofs 545 * file system needs to be preserved over restarts. 546 */ 547 if (sbi->flags & AUTOFS_SBI_CATATONIC) 548 return -EACCES; 549 550 BUG_ON(!ino); 551 552 autofs_clean_ino(ino); 553 554 autofs_del_active(dentry); 555 556 cp = kmalloc(size + 1, GFP_KERNEL); 557 if (!cp) 558 return -ENOMEM; 559 560 strcpy(cp, symname); 561 562 inode = autofs_get_inode(dir->i_sb, S_IFLNK | 0555); 563 if (!inode) { 564 kfree(cp); 565 return -ENOMEM; 566 } 567 inode->i_private = cp; 568 inode->i_size = size; 569 d_add(dentry, inode); 570 571 dget(dentry); 572 atomic_inc(&ino->count); 573 p_ino = autofs_dentry_ino(dentry->d_parent); 574 if (p_ino && !IS_ROOT(dentry)) 575 atomic_inc(&p_ino->count); 576 577 dir->i_mtime = current_time(dir); 578 579 return 0; 580 } 581 582 /* 583 * NOTE! 584 * 585 * Normal filesystems would do a "d_delete()" to tell the VFS dcache 586 * that the file no longer exists. However, doing that means that the 587 * VFS layer can turn the dentry into a negative dentry. We don't want 588 * this, because the unlink is probably the result of an expire. 589 * We simply d_drop it and add it to a expiring list in the super block, 590 * which allows the dentry lookup to check for an incomplete expire. 591 * 592 * If a process is blocked on the dentry waiting for the expire to finish, 593 * it will invalidate the dentry and try to mount with a new one. 594 * 595 * Also see autofs_dir_rmdir().. 596 */ 597 static int autofs_dir_unlink(struct inode *dir, struct dentry *dentry) 598 { 599 struct autofs_sb_info *sbi = autofs_sbi(dir->i_sb); 600 struct autofs_info *ino = autofs_dentry_ino(dentry); 601 struct autofs_info *p_ino; 602 603 if (!autofs_oz_mode(sbi)) 604 return -EACCES; 605 606 /* autofs_oz_mode() needs to allow path walks when the 607 * autofs mount is catatonic but the state of an autofs 608 * file system needs to be preserved over restarts. 609 */ 610 if (sbi->flags & AUTOFS_SBI_CATATONIC) 611 return -EACCES; 612 613 if (atomic_dec_and_test(&ino->count)) { 614 p_ino = autofs_dentry_ino(dentry->d_parent); 615 if (p_ino && !IS_ROOT(dentry)) 616 atomic_dec(&p_ino->count); 617 } 618 dput(ino->dentry); 619 620 d_inode(dentry)->i_size = 0; 621 clear_nlink(d_inode(dentry)); 622 623 dir->i_mtime = current_time(dir); 624 625 spin_lock(&sbi->lookup_lock); 626 __autofs_add_expiring(dentry); 627 d_drop(dentry); 628 spin_unlock(&sbi->lookup_lock); 629 630 return 0; 631 } 632 633 /* 634 * Version 4 of autofs provides a pseudo direct mount implementation 635 * that relies on directories at the leaves of a directory tree under 636 * an indirect mount to trigger mounts. To allow for this we need to 637 * set the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags on the leaves 638 * of the directory tree. There is no need to clear the automount flag 639 * following a mount or restore it after an expire because these mounts 640 * are always covered. However, it is necessary to ensure that these 641 * flags are clear on non-empty directories to avoid unnecessary calls 642 * during path walks. 643 */ 644 static void autofs_set_leaf_automount_flags(struct dentry *dentry) 645 { 646 struct dentry *parent; 647 648 /* root and dentrys in the root are already handled */ 649 if (IS_ROOT(dentry->d_parent)) 650 return; 651 652 managed_dentry_set_managed(dentry); 653 654 parent = dentry->d_parent; 655 /* only consider parents below dentrys in the root */ 656 if (IS_ROOT(parent->d_parent)) 657 return; 658 managed_dentry_clear_managed(parent); 659 } 660 661 static void autofs_clear_leaf_automount_flags(struct dentry *dentry) 662 { 663 struct list_head *d_child; 664 struct dentry *parent; 665 666 /* flags for dentrys in the root are handled elsewhere */ 667 if (IS_ROOT(dentry->d_parent)) 668 return; 669 670 managed_dentry_clear_managed(dentry); 671 672 parent = dentry->d_parent; 673 /* only consider parents below dentrys in the root */ 674 if (IS_ROOT(parent->d_parent)) 675 return; 676 d_child = &dentry->d_child; 677 /* Set parent managed if it's becoming empty */ 678 if (d_child->next == &parent->d_subdirs && 679 d_child->prev == &parent->d_subdirs) 680 managed_dentry_set_managed(parent); 681 } 682 683 static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry) 684 { 685 struct autofs_sb_info *sbi = autofs_sbi(dir->i_sb); 686 struct autofs_info *ino = autofs_dentry_ino(dentry); 687 struct autofs_info *p_ino; 688 689 pr_debug("dentry %p, removing %pd\n", dentry, dentry); 690 691 if (!autofs_oz_mode(sbi)) 692 return -EACCES; 693 694 /* autofs_oz_mode() needs to allow path walks when the 695 * autofs mount is catatonic but the state of an autofs 696 * file system needs to be preserved over restarts. 697 */ 698 if (sbi->flags & AUTOFS_SBI_CATATONIC) 699 return -EACCES; 700 701 spin_lock(&sbi->lookup_lock); 702 if (!simple_empty(dentry)) { 703 spin_unlock(&sbi->lookup_lock); 704 return -ENOTEMPTY; 705 } 706 __autofs_add_expiring(dentry); 707 d_drop(dentry); 708 spin_unlock(&sbi->lookup_lock); 709 710 if (sbi->version < 5) 711 autofs_clear_leaf_automount_flags(dentry); 712 713 if (atomic_dec_and_test(&ino->count)) { 714 p_ino = autofs_dentry_ino(dentry->d_parent); 715 if (p_ino && dentry->d_parent != dentry) 716 atomic_dec(&p_ino->count); 717 } 718 dput(ino->dentry); 719 d_inode(dentry)->i_size = 0; 720 clear_nlink(d_inode(dentry)); 721 722 if (dir->i_nlink) 723 drop_nlink(dir); 724 725 return 0; 726 } 727 728 static int autofs_dir_mkdir(struct inode *dir, 729 struct dentry *dentry, umode_t mode) 730 { 731 struct autofs_sb_info *sbi = autofs_sbi(dir->i_sb); 732 struct autofs_info *ino = autofs_dentry_ino(dentry); 733 struct autofs_info *p_ino; 734 struct inode *inode; 735 736 if (!autofs_oz_mode(sbi)) 737 return -EACCES; 738 739 /* autofs_oz_mode() needs to allow path walks when the 740 * autofs mount is catatonic but the state of an autofs 741 * file system needs to be preserved over restarts. 742 */ 743 if (sbi->flags & AUTOFS_SBI_CATATONIC) 744 return -EACCES; 745 746 pr_debug("dentry %p, creating %pd\n", dentry, dentry); 747 748 BUG_ON(!ino); 749 750 autofs_clean_ino(ino); 751 752 autofs_del_active(dentry); 753 754 inode = autofs_get_inode(dir->i_sb, S_IFDIR | mode); 755 if (!inode) 756 return -ENOMEM; 757 d_add(dentry, inode); 758 759 if (sbi->version < 5) 760 autofs_set_leaf_automount_flags(dentry); 761 762 dget(dentry); 763 atomic_inc(&ino->count); 764 p_ino = autofs_dentry_ino(dentry->d_parent); 765 if (p_ino && !IS_ROOT(dentry)) 766 atomic_inc(&p_ino->count); 767 inc_nlink(dir); 768 dir->i_mtime = current_time(dir); 769 770 return 0; 771 } 772 773 /* Get/set timeout ioctl() operation */ 774 #ifdef CONFIG_COMPAT 775 static inline int autofs_compat_get_set_timeout(struct autofs_sb_info *sbi, 776 compat_ulong_t __user *p) 777 { 778 unsigned long ntimeout; 779 int rv; 780 781 rv = get_user(ntimeout, p); 782 if (rv) 783 goto error; 784 785 rv = put_user(sbi->exp_timeout/HZ, p); 786 if (rv) 787 goto error; 788 789 if (ntimeout > UINT_MAX/HZ) 790 sbi->exp_timeout = 0; 791 else 792 sbi->exp_timeout = ntimeout * HZ; 793 794 return 0; 795 error: 796 return rv; 797 } 798 #endif 799 800 static inline int autofs_get_set_timeout(struct autofs_sb_info *sbi, 801 unsigned long __user *p) 802 { 803 unsigned long ntimeout; 804 int rv; 805 806 rv = get_user(ntimeout, p); 807 if (rv) 808 goto error; 809 810 rv = put_user(sbi->exp_timeout/HZ, p); 811 if (rv) 812 goto error; 813 814 if (ntimeout > ULONG_MAX/HZ) 815 sbi->exp_timeout = 0; 816 else 817 sbi->exp_timeout = ntimeout * HZ; 818 819 return 0; 820 error: 821 return rv; 822 } 823 824 /* Return protocol version */ 825 static inline int autofs_get_protover(struct autofs_sb_info *sbi, 826 int __user *p) 827 { 828 return put_user(sbi->version, p); 829 } 830 831 /* Return protocol sub version */ 832 static inline int autofs_get_protosubver(struct autofs_sb_info *sbi, 833 int __user *p) 834 { 835 return put_user(sbi->sub_version, p); 836 } 837 838 /* 839 * Tells the daemon whether it can umount the autofs mount. 840 */ 841 static inline int autofs_ask_umount(struct vfsmount *mnt, int __user *p) 842 { 843 int status = 0; 844 845 if (may_umount(mnt)) 846 status = 1; 847 848 pr_debug("may umount %d\n", status); 849 850 status = put_user(status, p); 851 852 return status; 853 } 854 855 /* Identify autofs_dentries - this is so we can tell if there's 856 * an extra dentry refcount or not. We only hold a refcount on the 857 * dentry if its non-negative (ie, d_inode != NULL) 858 */ 859 int is_autofs_dentry(struct dentry *dentry) 860 { 861 return dentry && d_really_is_positive(dentry) && 862 dentry->d_op == &autofs_dentry_operations && 863 dentry->d_fsdata != NULL; 864 } 865 866 /* 867 * ioctl()'s on the root directory is the chief method for the daemon to 868 * generate kernel reactions 869 */ 870 static int autofs_root_ioctl_unlocked(struct inode *inode, struct file *filp, 871 unsigned int cmd, unsigned long arg) 872 { 873 struct autofs_sb_info *sbi = autofs_sbi(inode->i_sb); 874 void __user *p = (void __user *)arg; 875 876 pr_debug("cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n", 877 cmd, arg, sbi, task_pgrp_nr(current)); 878 879 if (_IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) || 880 _IOC_NR(cmd) - _IOC_NR(AUTOFS_IOC_FIRST) >= AUTOFS_IOC_COUNT) 881 return -ENOTTY; 882 883 if (!autofs_oz_mode(sbi) && !capable(CAP_SYS_ADMIN)) 884 return -EPERM; 885 886 switch (cmd) { 887 case AUTOFS_IOC_READY: /* Wait queue: go ahead and retry */ 888 return autofs_wait_release(sbi, (autofs_wqt_t) arg, 0); 889 case AUTOFS_IOC_FAIL: /* Wait queue: fail with ENOENT */ 890 return autofs_wait_release(sbi, (autofs_wqt_t) arg, -ENOENT); 891 case AUTOFS_IOC_CATATONIC: /* Enter catatonic mode (daemon shutdown) */ 892 autofs_catatonic_mode(sbi); 893 return 0; 894 case AUTOFS_IOC_PROTOVER: /* Get protocol version */ 895 return autofs_get_protover(sbi, p); 896 case AUTOFS_IOC_PROTOSUBVER: /* Get protocol sub version */ 897 return autofs_get_protosubver(sbi, p); 898 case AUTOFS_IOC_SETTIMEOUT: 899 return autofs_get_set_timeout(sbi, p); 900 #ifdef CONFIG_COMPAT 901 case AUTOFS_IOC_SETTIMEOUT32: 902 return autofs_compat_get_set_timeout(sbi, p); 903 #endif 904 905 case AUTOFS_IOC_ASKUMOUNT: 906 return autofs_ask_umount(filp->f_path.mnt, p); 907 908 /* return a single thing to expire */ 909 case AUTOFS_IOC_EXPIRE: 910 return autofs_expire_run(inode->i_sb, filp->f_path.mnt, sbi, p); 911 /* same as above, but can send multiple expires through pipe */ 912 case AUTOFS_IOC_EXPIRE_MULTI: 913 return autofs_expire_multi(inode->i_sb, 914 filp->f_path.mnt, sbi, p); 915 916 default: 917 return -EINVAL; 918 } 919 } 920 921 static long autofs_root_ioctl(struct file *filp, 922 unsigned int cmd, unsigned long arg) 923 { 924 struct inode *inode = file_inode(filp); 925 926 return autofs_root_ioctl_unlocked(inode, filp, cmd, arg); 927 } 928 929 #ifdef CONFIG_COMPAT 930 static long autofs_root_compat_ioctl(struct file *filp, 931 unsigned int cmd, unsigned long arg) 932 { 933 struct inode *inode = file_inode(filp); 934 int ret; 935 936 if (cmd == AUTOFS_IOC_READY || cmd == AUTOFS_IOC_FAIL) 937 ret = autofs_root_ioctl_unlocked(inode, filp, cmd, arg); 938 else 939 ret = autofs_root_ioctl_unlocked(inode, filp, cmd, 940 (unsigned long) compat_ptr(arg)); 941 942 return ret; 943 } 944 #endif 945