1 /* 2 * linux/fs/namespace.c 3 * 4 * (C) Copyright Al Viro 2000, 2001 5 * Released under GPL v2. 6 * 7 * Based on code from fs/super.c, copyright Linus Torvalds and others. 8 * Heavily rewritten. 9 */ 10 11 #include <linux/syscalls.h> 12 #include <linux/slab.h> 13 #include <linux/sched.h> 14 #include <linux/smp_lock.h> 15 #include <linux/init.h> 16 #include <linux/kernel.h> 17 #include <linux/acct.h> 18 #include <linux/capability.h> 19 #include <linux/cpumask.h> 20 #include <linux/module.h> 21 #include <linux/sysfs.h> 22 #include <linux/seq_file.h> 23 #include <linux/mnt_namespace.h> 24 #include <linux/namei.h> 25 #include <linux/security.h> 26 #include <linux/mount.h> 27 #include <linux/ramfs.h> 28 #include <linux/log2.h> 29 #include <linux/idr.h> 30 #include <linux/fs_struct.h> 31 #include <asm/uaccess.h> 32 #include <asm/unistd.h> 33 #include "pnode.h" 34 #include "internal.h" 35 36 #define HASH_SHIFT ilog2(PAGE_SIZE / sizeof(struct list_head)) 37 #define HASH_SIZE (1UL << HASH_SHIFT) 38 39 /* spinlock for vfsmount related operations, inplace of dcache_lock */ 40 __cacheline_aligned_in_smp DEFINE_SPINLOCK(vfsmount_lock); 41 42 static int event; 43 static DEFINE_IDA(mnt_id_ida); 44 static DEFINE_IDA(mnt_group_ida); 45 46 static struct list_head *mount_hashtable __read_mostly; 47 static struct kmem_cache *mnt_cache __read_mostly; 48 static struct rw_semaphore namespace_sem; 49 50 /* /sys/fs */ 51 struct kobject *fs_kobj; 52 EXPORT_SYMBOL_GPL(fs_kobj); 53 54 static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) 55 { 56 unsigned long tmp = ((unsigned long)mnt / L1_CACHE_BYTES); 57 tmp += ((unsigned long)dentry / L1_CACHE_BYTES); 58 tmp = tmp + (tmp >> HASH_SHIFT); 59 return tmp & (HASH_SIZE - 1); 60 } 61 62 #define MNT_WRITER_UNDERFLOW_LIMIT -(1<<16) 63 64 /* allocation is serialized by namespace_sem */ 65 static int mnt_alloc_id(struct vfsmount *mnt) 66 { 67 int res; 68 69 retry: 70 ida_pre_get(&mnt_id_ida, GFP_KERNEL); 71 spin_lock(&vfsmount_lock); 72 res = ida_get_new(&mnt_id_ida, &mnt->mnt_id); 73 spin_unlock(&vfsmount_lock); 74 if (res == -EAGAIN) 75 goto retry; 76 77 return res; 78 } 79 80 static void mnt_free_id(struct vfsmount *mnt) 81 { 82 spin_lock(&vfsmount_lock); 83 ida_remove(&mnt_id_ida, mnt->mnt_id); 84 spin_unlock(&vfsmount_lock); 85 } 86 87 /* 88 * Allocate a new peer group ID 89 * 90 * mnt_group_ida is protected by namespace_sem 91 */ 92 static int mnt_alloc_group_id(struct vfsmount *mnt) 93 { 94 if (!ida_pre_get(&mnt_group_ida, GFP_KERNEL)) 95 return -ENOMEM; 96 97 return ida_get_new_above(&mnt_group_ida, 1, &mnt->mnt_group_id); 98 } 99 100 /* 101 * Release a peer group ID 102 */ 103 void mnt_release_group_id(struct vfsmount *mnt) 104 { 105 ida_remove(&mnt_group_ida, mnt->mnt_group_id); 106 mnt->mnt_group_id = 0; 107 } 108 109 struct vfsmount *alloc_vfsmnt(const char *name) 110 { 111 struct vfsmount *mnt = kmem_cache_zalloc(mnt_cache, GFP_KERNEL); 112 if (mnt) { 113 int err; 114 115 err = mnt_alloc_id(mnt); 116 if (err) 117 goto out_free_cache; 118 119 if (name) { 120 mnt->mnt_devname = kstrdup(name, GFP_KERNEL); 121 if (!mnt->mnt_devname) 122 goto out_free_id; 123 } 124 125 atomic_set(&mnt->mnt_count, 1); 126 INIT_LIST_HEAD(&mnt->mnt_hash); 127 INIT_LIST_HEAD(&mnt->mnt_child); 128 INIT_LIST_HEAD(&mnt->mnt_mounts); 129 INIT_LIST_HEAD(&mnt->mnt_list); 130 INIT_LIST_HEAD(&mnt->mnt_expire); 131 INIT_LIST_HEAD(&mnt->mnt_share); 132 INIT_LIST_HEAD(&mnt->mnt_slave_list); 133 INIT_LIST_HEAD(&mnt->mnt_slave); 134 #ifdef CONFIG_SMP 135 mnt->mnt_writers = alloc_percpu(int); 136 if (!mnt->mnt_writers) 137 goto out_free_devname; 138 #else 139 mnt->mnt_writers = 0; 140 #endif 141 } 142 return mnt; 143 144 #ifdef CONFIG_SMP 145 out_free_devname: 146 kfree(mnt->mnt_devname); 147 #endif 148 out_free_id: 149 mnt_free_id(mnt); 150 out_free_cache: 151 kmem_cache_free(mnt_cache, mnt); 152 return NULL; 153 } 154 155 /* 156 * Most r/o checks on a fs are for operations that take 157 * discrete amounts of time, like a write() or unlink(). 158 * We must keep track of when those operations start 159 * (for permission checks) and when they end, so that 160 * we can determine when writes are able to occur to 161 * a filesystem. 162 */ 163 /* 164 * __mnt_is_readonly: check whether a mount is read-only 165 * @mnt: the mount to check for its write status 166 * 167 * This shouldn't be used directly ouside of the VFS. 168 * It does not guarantee that the filesystem will stay 169 * r/w, just that it is right *now*. This can not and 170 * should not be used in place of IS_RDONLY(inode). 171 * mnt_want/drop_write() will _keep_ the filesystem 172 * r/w. 173 */ 174 int __mnt_is_readonly(struct vfsmount *mnt) 175 { 176 if (mnt->mnt_flags & MNT_READONLY) 177 return 1; 178 if (mnt->mnt_sb->s_flags & MS_RDONLY) 179 return 1; 180 return 0; 181 } 182 EXPORT_SYMBOL_GPL(__mnt_is_readonly); 183 184 static inline void inc_mnt_writers(struct vfsmount *mnt) 185 { 186 #ifdef CONFIG_SMP 187 (*per_cpu_ptr(mnt->mnt_writers, smp_processor_id()))++; 188 #else 189 mnt->mnt_writers++; 190 #endif 191 } 192 193 static inline void dec_mnt_writers(struct vfsmount *mnt) 194 { 195 #ifdef CONFIG_SMP 196 (*per_cpu_ptr(mnt->mnt_writers, smp_processor_id()))--; 197 #else 198 mnt->mnt_writers--; 199 #endif 200 } 201 202 static unsigned int count_mnt_writers(struct vfsmount *mnt) 203 { 204 #ifdef CONFIG_SMP 205 unsigned int count = 0; 206 int cpu; 207 208 for_each_possible_cpu(cpu) { 209 count += *per_cpu_ptr(mnt->mnt_writers, cpu); 210 } 211 212 return count; 213 #else 214 return mnt->mnt_writers; 215 #endif 216 } 217 218 /* 219 * Most r/o checks on a fs are for operations that take 220 * discrete amounts of time, like a write() or unlink(). 221 * We must keep track of when those operations start 222 * (for permission checks) and when they end, so that 223 * we can determine when writes are able to occur to 224 * a filesystem. 225 */ 226 /** 227 * mnt_want_write - get write access to a mount 228 * @mnt: the mount on which to take a write 229 * 230 * This tells the low-level filesystem that a write is 231 * about to be performed to it, and makes sure that 232 * writes are allowed before returning success. When 233 * the write operation is finished, mnt_drop_write() 234 * must be called. This is effectively a refcount. 235 */ 236 int mnt_want_write(struct vfsmount *mnt) 237 { 238 int ret = 0; 239 240 preempt_disable(); 241 inc_mnt_writers(mnt); 242 /* 243 * The store to inc_mnt_writers must be visible before we pass 244 * MNT_WRITE_HOLD loop below, so that the slowpath can see our 245 * incremented count after it has set MNT_WRITE_HOLD. 246 */ 247 smp_mb(); 248 while (mnt->mnt_flags & MNT_WRITE_HOLD) 249 cpu_relax(); 250 /* 251 * After the slowpath clears MNT_WRITE_HOLD, mnt_is_readonly will 252 * be set to match its requirements. So we must not load that until 253 * MNT_WRITE_HOLD is cleared. 254 */ 255 smp_rmb(); 256 if (__mnt_is_readonly(mnt)) { 257 dec_mnt_writers(mnt); 258 ret = -EROFS; 259 goto out; 260 } 261 out: 262 preempt_enable(); 263 return ret; 264 } 265 EXPORT_SYMBOL_GPL(mnt_want_write); 266 267 /** 268 * mnt_clone_write - get write access to a mount 269 * @mnt: the mount on which to take a write 270 * 271 * This is effectively like mnt_want_write, except 272 * it must only be used to take an extra write reference 273 * on a mountpoint that we already know has a write reference 274 * on it. This allows some optimisation. 275 * 276 * After finished, mnt_drop_write must be called as usual to 277 * drop the reference. 278 */ 279 int mnt_clone_write(struct vfsmount *mnt) 280 { 281 /* superblock may be r/o */ 282 if (__mnt_is_readonly(mnt)) 283 return -EROFS; 284 preempt_disable(); 285 inc_mnt_writers(mnt); 286 preempt_enable(); 287 return 0; 288 } 289 EXPORT_SYMBOL_GPL(mnt_clone_write); 290 291 /** 292 * mnt_want_write_file - get write access to a file's mount 293 * @file: the file who's mount on which to take a write 294 * 295 * This is like mnt_want_write, but it takes a file and can 296 * do some optimisations if the file is open for write already 297 */ 298 int mnt_want_write_file(struct file *file) 299 { 300 if (!(file->f_mode & FMODE_WRITE)) 301 return mnt_want_write(file->f_path.mnt); 302 else 303 return mnt_clone_write(file->f_path.mnt); 304 } 305 EXPORT_SYMBOL_GPL(mnt_want_write_file); 306 307 /** 308 * mnt_drop_write - give up write access to a mount 309 * @mnt: the mount on which to give up write access 310 * 311 * Tells the low-level filesystem that we are done 312 * performing writes to it. Must be matched with 313 * mnt_want_write() call above. 314 */ 315 void mnt_drop_write(struct vfsmount *mnt) 316 { 317 preempt_disable(); 318 dec_mnt_writers(mnt); 319 preempt_enable(); 320 } 321 EXPORT_SYMBOL_GPL(mnt_drop_write); 322 323 static int mnt_make_readonly(struct vfsmount *mnt) 324 { 325 int ret = 0; 326 327 spin_lock(&vfsmount_lock); 328 mnt->mnt_flags |= MNT_WRITE_HOLD; 329 /* 330 * After storing MNT_WRITE_HOLD, we'll read the counters. This store 331 * should be visible before we do. 332 */ 333 smp_mb(); 334 335 /* 336 * With writers on hold, if this value is zero, then there are 337 * definitely no active writers (although held writers may subsequently 338 * increment the count, they'll have to wait, and decrement it after 339 * seeing MNT_READONLY). 340 * 341 * It is OK to have counter incremented on one CPU and decremented on 342 * another: the sum will add up correctly. The danger would be when we 343 * sum up each counter, if we read a counter before it is incremented, 344 * but then read another CPU's count which it has been subsequently 345 * decremented from -- we would see more decrements than we should. 346 * MNT_WRITE_HOLD protects against this scenario, because 347 * mnt_want_write first increments count, then smp_mb, then spins on 348 * MNT_WRITE_HOLD, so it can't be decremented by another CPU while 349 * we're counting up here. 350 */ 351 if (count_mnt_writers(mnt) > 0) 352 ret = -EBUSY; 353 else 354 mnt->mnt_flags |= MNT_READONLY; 355 /* 356 * MNT_READONLY must become visible before ~MNT_WRITE_HOLD, so writers 357 * that become unheld will see MNT_READONLY. 358 */ 359 smp_wmb(); 360 mnt->mnt_flags &= ~MNT_WRITE_HOLD; 361 spin_unlock(&vfsmount_lock); 362 return ret; 363 } 364 365 static void __mnt_unmake_readonly(struct vfsmount *mnt) 366 { 367 spin_lock(&vfsmount_lock); 368 mnt->mnt_flags &= ~MNT_READONLY; 369 spin_unlock(&vfsmount_lock); 370 } 371 372 void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb) 373 { 374 mnt->mnt_sb = sb; 375 mnt->mnt_root = dget(sb->s_root); 376 } 377 378 EXPORT_SYMBOL(simple_set_mnt); 379 380 void free_vfsmnt(struct vfsmount *mnt) 381 { 382 kfree(mnt->mnt_devname); 383 mnt_free_id(mnt); 384 #ifdef CONFIG_SMP 385 free_percpu(mnt->mnt_writers); 386 #endif 387 kmem_cache_free(mnt_cache, mnt); 388 } 389 390 /* 391 * find the first or last mount at @dentry on vfsmount @mnt depending on 392 * @dir. If @dir is set return the first mount else return the last mount. 393 */ 394 struct vfsmount *__lookup_mnt(struct vfsmount *mnt, struct dentry *dentry, 395 int dir) 396 { 397 struct list_head *head = mount_hashtable + hash(mnt, dentry); 398 struct list_head *tmp = head; 399 struct vfsmount *p, *found = NULL; 400 401 for (;;) { 402 tmp = dir ? tmp->next : tmp->prev; 403 p = NULL; 404 if (tmp == head) 405 break; 406 p = list_entry(tmp, struct vfsmount, mnt_hash); 407 if (p->mnt_parent == mnt && p->mnt_mountpoint == dentry) { 408 found = p; 409 break; 410 } 411 } 412 return found; 413 } 414 415 /* 416 * lookup_mnt increments the ref count before returning 417 * the vfsmount struct. 418 */ 419 struct vfsmount *lookup_mnt(struct path *path) 420 { 421 struct vfsmount *child_mnt; 422 spin_lock(&vfsmount_lock); 423 if ((child_mnt = __lookup_mnt(path->mnt, path->dentry, 1))) 424 mntget(child_mnt); 425 spin_unlock(&vfsmount_lock); 426 return child_mnt; 427 } 428 429 static inline int check_mnt(struct vfsmount *mnt) 430 { 431 return mnt->mnt_ns == current->nsproxy->mnt_ns; 432 } 433 434 static void touch_mnt_namespace(struct mnt_namespace *ns) 435 { 436 if (ns) { 437 ns->event = ++event; 438 wake_up_interruptible(&ns->poll); 439 } 440 } 441 442 static void __touch_mnt_namespace(struct mnt_namespace *ns) 443 { 444 if (ns && ns->event != event) { 445 ns->event = event; 446 wake_up_interruptible(&ns->poll); 447 } 448 } 449 450 static void detach_mnt(struct vfsmount *mnt, struct path *old_path) 451 { 452 old_path->dentry = mnt->mnt_mountpoint; 453 old_path->mnt = mnt->mnt_parent; 454 mnt->mnt_parent = mnt; 455 mnt->mnt_mountpoint = mnt->mnt_root; 456 list_del_init(&mnt->mnt_child); 457 list_del_init(&mnt->mnt_hash); 458 old_path->dentry->d_mounted--; 459 } 460 461 void mnt_set_mountpoint(struct vfsmount *mnt, struct dentry *dentry, 462 struct vfsmount *child_mnt) 463 { 464 child_mnt->mnt_parent = mntget(mnt); 465 child_mnt->mnt_mountpoint = dget(dentry); 466 dentry->d_mounted++; 467 } 468 469 static void attach_mnt(struct vfsmount *mnt, struct path *path) 470 { 471 mnt_set_mountpoint(path->mnt, path->dentry, mnt); 472 list_add_tail(&mnt->mnt_hash, mount_hashtable + 473 hash(path->mnt, path->dentry)); 474 list_add_tail(&mnt->mnt_child, &path->mnt->mnt_mounts); 475 } 476 477 /* 478 * the caller must hold vfsmount_lock 479 */ 480 static void commit_tree(struct vfsmount *mnt) 481 { 482 struct vfsmount *parent = mnt->mnt_parent; 483 struct vfsmount *m; 484 LIST_HEAD(head); 485 struct mnt_namespace *n = parent->mnt_ns; 486 487 BUG_ON(parent == mnt); 488 489 list_add_tail(&head, &mnt->mnt_list); 490 list_for_each_entry(m, &head, mnt_list) 491 m->mnt_ns = n; 492 list_splice(&head, n->list.prev); 493 494 list_add_tail(&mnt->mnt_hash, mount_hashtable + 495 hash(parent, mnt->mnt_mountpoint)); 496 list_add_tail(&mnt->mnt_child, &parent->mnt_mounts); 497 touch_mnt_namespace(n); 498 } 499 500 static struct vfsmount *next_mnt(struct vfsmount *p, struct vfsmount *root) 501 { 502 struct list_head *next = p->mnt_mounts.next; 503 if (next == &p->mnt_mounts) { 504 while (1) { 505 if (p == root) 506 return NULL; 507 next = p->mnt_child.next; 508 if (next != &p->mnt_parent->mnt_mounts) 509 break; 510 p = p->mnt_parent; 511 } 512 } 513 return list_entry(next, struct vfsmount, mnt_child); 514 } 515 516 static struct vfsmount *skip_mnt_tree(struct vfsmount *p) 517 { 518 struct list_head *prev = p->mnt_mounts.prev; 519 while (prev != &p->mnt_mounts) { 520 p = list_entry(prev, struct vfsmount, mnt_child); 521 prev = p->mnt_mounts.prev; 522 } 523 return p; 524 } 525 526 static struct vfsmount *clone_mnt(struct vfsmount *old, struct dentry *root, 527 int flag) 528 { 529 struct super_block *sb = old->mnt_sb; 530 struct vfsmount *mnt = alloc_vfsmnt(old->mnt_devname); 531 532 if (mnt) { 533 if (flag & (CL_SLAVE | CL_PRIVATE)) 534 mnt->mnt_group_id = 0; /* not a peer of original */ 535 else 536 mnt->mnt_group_id = old->mnt_group_id; 537 538 if ((flag & CL_MAKE_SHARED) && !mnt->mnt_group_id) { 539 int err = mnt_alloc_group_id(mnt); 540 if (err) 541 goto out_free; 542 } 543 544 mnt->mnt_flags = old->mnt_flags; 545 atomic_inc(&sb->s_active); 546 mnt->mnt_sb = sb; 547 mnt->mnt_root = dget(root); 548 mnt->mnt_mountpoint = mnt->mnt_root; 549 mnt->mnt_parent = mnt; 550 551 if (flag & CL_SLAVE) { 552 list_add(&mnt->mnt_slave, &old->mnt_slave_list); 553 mnt->mnt_master = old; 554 CLEAR_MNT_SHARED(mnt); 555 } else if (!(flag & CL_PRIVATE)) { 556 if ((flag & CL_PROPAGATION) || IS_MNT_SHARED(old)) 557 list_add(&mnt->mnt_share, &old->mnt_share); 558 if (IS_MNT_SLAVE(old)) 559 list_add(&mnt->mnt_slave, &old->mnt_slave); 560 mnt->mnt_master = old->mnt_master; 561 } 562 if (flag & CL_MAKE_SHARED) 563 set_mnt_shared(mnt); 564 565 /* stick the duplicate mount on the same expiry list 566 * as the original if that was on one */ 567 if (flag & CL_EXPIRE) { 568 if (!list_empty(&old->mnt_expire)) 569 list_add(&mnt->mnt_expire, &old->mnt_expire); 570 } 571 } 572 return mnt; 573 574 out_free: 575 free_vfsmnt(mnt); 576 return NULL; 577 } 578 579 static inline void __mntput(struct vfsmount *mnt) 580 { 581 struct super_block *sb = mnt->mnt_sb; 582 /* 583 * This probably indicates that somebody messed 584 * up a mnt_want/drop_write() pair. If this 585 * happens, the filesystem was probably unable 586 * to make r/w->r/o transitions. 587 */ 588 /* 589 * atomic_dec_and_lock() used to deal with ->mnt_count decrements 590 * provides barriers, so count_mnt_writers() below is safe. AV 591 */ 592 WARN_ON(count_mnt_writers(mnt)); 593 dput(mnt->mnt_root); 594 free_vfsmnt(mnt); 595 deactivate_super(sb); 596 } 597 598 void mntput_no_expire(struct vfsmount *mnt) 599 { 600 repeat: 601 if (atomic_dec_and_lock(&mnt->mnt_count, &vfsmount_lock)) { 602 if (likely(!mnt->mnt_pinned)) { 603 spin_unlock(&vfsmount_lock); 604 __mntput(mnt); 605 return; 606 } 607 atomic_add(mnt->mnt_pinned + 1, &mnt->mnt_count); 608 mnt->mnt_pinned = 0; 609 spin_unlock(&vfsmount_lock); 610 acct_auto_close_mnt(mnt); 611 security_sb_umount_close(mnt); 612 goto repeat; 613 } 614 } 615 616 EXPORT_SYMBOL(mntput_no_expire); 617 618 void mnt_pin(struct vfsmount *mnt) 619 { 620 spin_lock(&vfsmount_lock); 621 mnt->mnt_pinned++; 622 spin_unlock(&vfsmount_lock); 623 } 624 625 EXPORT_SYMBOL(mnt_pin); 626 627 void mnt_unpin(struct vfsmount *mnt) 628 { 629 spin_lock(&vfsmount_lock); 630 if (mnt->mnt_pinned) { 631 atomic_inc(&mnt->mnt_count); 632 mnt->mnt_pinned--; 633 } 634 spin_unlock(&vfsmount_lock); 635 } 636 637 EXPORT_SYMBOL(mnt_unpin); 638 639 static inline void mangle(struct seq_file *m, const char *s) 640 { 641 seq_escape(m, s, " \t\n\\"); 642 } 643 644 /* 645 * Simple .show_options callback for filesystems which don't want to 646 * implement more complex mount option showing. 647 * 648 * See also save_mount_options(). 649 */ 650 int generic_show_options(struct seq_file *m, struct vfsmount *mnt) 651 { 652 const char *options; 653 654 rcu_read_lock(); 655 options = rcu_dereference(mnt->mnt_sb->s_options); 656 657 if (options != NULL && options[0]) { 658 seq_putc(m, ','); 659 mangle(m, options); 660 } 661 rcu_read_unlock(); 662 663 return 0; 664 } 665 EXPORT_SYMBOL(generic_show_options); 666 667 /* 668 * If filesystem uses generic_show_options(), this function should be 669 * called from the fill_super() callback. 670 * 671 * The .remount_fs callback usually needs to be handled in a special 672 * way, to make sure, that previous options are not overwritten if the 673 * remount fails. 674 * 675 * Also note, that if the filesystem's .remount_fs function doesn't 676 * reset all options to their default value, but changes only newly 677 * given options, then the displayed options will not reflect reality 678 * any more. 679 */ 680 void save_mount_options(struct super_block *sb, char *options) 681 { 682 BUG_ON(sb->s_options); 683 rcu_assign_pointer(sb->s_options, kstrdup(options, GFP_KERNEL)); 684 } 685 EXPORT_SYMBOL(save_mount_options); 686 687 void replace_mount_options(struct super_block *sb, char *options) 688 { 689 char *old = sb->s_options; 690 rcu_assign_pointer(sb->s_options, options); 691 if (old) { 692 synchronize_rcu(); 693 kfree(old); 694 } 695 } 696 EXPORT_SYMBOL(replace_mount_options); 697 698 #ifdef CONFIG_PROC_FS 699 /* iterator */ 700 static void *m_start(struct seq_file *m, loff_t *pos) 701 { 702 struct proc_mounts *p = m->private; 703 704 down_read(&namespace_sem); 705 return seq_list_start(&p->ns->list, *pos); 706 } 707 708 static void *m_next(struct seq_file *m, void *v, loff_t *pos) 709 { 710 struct proc_mounts *p = m->private; 711 712 return seq_list_next(v, &p->ns->list, pos); 713 } 714 715 static void m_stop(struct seq_file *m, void *v) 716 { 717 up_read(&namespace_sem); 718 } 719 720 struct proc_fs_info { 721 int flag; 722 const char *str; 723 }; 724 725 static int show_sb_opts(struct seq_file *m, struct super_block *sb) 726 { 727 static const struct proc_fs_info fs_info[] = { 728 { MS_SYNCHRONOUS, ",sync" }, 729 { MS_DIRSYNC, ",dirsync" }, 730 { MS_MANDLOCK, ",mand" }, 731 { 0, NULL } 732 }; 733 const struct proc_fs_info *fs_infop; 734 735 for (fs_infop = fs_info; fs_infop->flag; fs_infop++) { 736 if (sb->s_flags & fs_infop->flag) 737 seq_puts(m, fs_infop->str); 738 } 739 740 return security_sb_show_options(m, sb); 741 } 742 743 static void show_mnt_opts(struct seq_file *m, struct vfsmount *mnt) 744 { 745 static const struct proc_fs_info mnt_info[] = { 746 { MNT_NOSUID, ",nosuid" }, 747 { MNT_NODEV, ",nodev" }, 748 { MNT_NOEXEC, ",noexec" }, 749 { MNT_NOATIME, ",noatime" }, 750 { MNT_NODIRATIME, ",nodiratime" }, 751 { MNT_RELATIME, ",relatime" }, 752 { MNT_STRICTATIME, ",strictatime" }, 753 { 0, NULL } 754 }; 755 const struct proc_fs_info *fs_infop; 756 757 for (fs_infop = mnt_info; fs_infop->flag; fs_infop++) { 758 if (mnt->mnt_flags & fs_infop->flag) 759 seq_puts(m, fs_infop->str); 760 } 761 } 762 763 static void show_type(struct seq_file *m, struct super_block *sb) 764 { 765 mangle(m, sb->s_type->name); 766 if (sb->s_subtype && sb->s_subtype[0]) { 767 seq_putc(m, '.'); 768 mangle(m, sb->s_subtype); 769 } 770 } 771 772 static int show_vfsmnt(struct seq_file *m, void *v) 773 { 774 struct vfsmount *mnt = list_entry(v, struct vfsmount, mnt_list); 775 int err = 0; 776 struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt }; 777 778 mangle(m, mnt->mnt_devname ? mnt->mnt_devname : "none"); 779 seq_putc(m, ' '); 780 seq_path(m, &mnt_path, " \t\n\\"); 781 seq_putc(m, ' '); 782 show_type(m, mnt->mnt_sb); 783 seq_puts(m, __mnt_is_readonly(mnt) ? " ro" : " rw"); 784 err = show_sb_opts(m, mnt->mnt_sb); 785 if (err) 786 goto out; 787 show_mnt_opts(m, mnt); 788 if (mnt->mnt_sb->s_op->show_options) 789 err = mnt->mnt_sb->s_op->show_options(m, mnt); 790 seq_puts(m, " 0 0\n"); 791 out: 792 return err; 793 } 794 795 const struct seq_operations mounts_op = { 796 .start = m_start, 797 .next = m_next, 798 .stop = m_stop, 799 .show = show_vfsmnt 800 }; 801 802 static int show_mountinfo(struct seq_file *m, void *v) 803 { 804 struct proc_mounts *p = m->private; 805 struct vfsmount *mnt = list_entry(v, struct vfsmount, mnt_list); 806 struct super_block *sb = mnt->mnt_sb; 807 struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt }; 808 struct path root = p->root; 809 int err = 0; 810 811 seq_printf(m, "%i %i %u:%u ", mnt->mnt_id, mnt->mnt_parent->mnt_id, 812 MAJOR(sb->s_dev), MINOR(sb->s_dev)); 813 seq_dentry(m, mnt->mnt_root, " \t\n\\"); 814 seq_putc(m, ' '); 815 seq_path_root(m, &mnt_path, &root, " \t\n\\"); 816 if (root.mnt != p->root.mnt || root.dentry != p->root.dentry) { 817 /* 818 * Mountpoint is outside root, discard that one. Ugly, 819 * but less so than trying to do that in iterator in a 820 * race-free way (due to renames). 821 */ 822 return SEQ_SKIP; 823 } 824 seq_puts(m, mnt->mnt_flags & MNT_READONLY ? " ro" : " rw"); 825 show_mnt_opts(m, mnt); 826 827 /* Tagged fields ("foo:X" or "bar") */ 828 if (IS_MNT_SHARED(mnt)) 829 seq_printf(m, " shared:%i", mnt->mnt_group_id); 830 if (IS_MNT_SLAVE(mnt)) { 831 int master = mnt->mnt_master->mnt_group_id; 832 int dom = get_dominating_id(mnt, &p->root); 833 seq_printf(m, " master:%i", master); 834 if (dom && dom != master) 835 seq_printf(m, " propagate_from:%i", dom); 836 } 837 if (IS_MNT_UNBINDABLE(mnt)) 838 seq_puts(m, " unbindable"); 839 840 /* Filesystem specific data */ 841 seq_puts(m, " - "); 842 show_type(m, sb); 843 seq_putc(m, ' '); 844 mangle(m, mnt->mnt_devname ? mnt->mnt_devname : "none"); 845 seq_puts(m, sb->s_flags & MS_RDONLY ? " ro" : " rw"); 846 err = show_sb_opts(m, sb); 847 if (err) 848 goto out; 849 if (sb->s_op->show_options) 850 err = sb->s_op->show_options(m, mnt); 851 seq_putc(m, '\n'); 852 out: 853 return err; 854 } 855 856 const struct seq_operations mountinfo_op = { 857 .start = m_start, 858 .next = m_next, 859 .stop = m_stop, 860 .show = show_mountinfo, 861 }; 862 863 static int show_vfsstat(struct seq_file *m, void *v) 864 { 865 struct vfsmount *mnt = list_entry(v, struct vfsmount, mnt_list); 866 struct path mnt_path = { .dentry = mnt->mnt_root, .mnt = mnt }; 867 int err = 0; 868 869 /* device */ 870 if (mnt->mnt_devname) { 871 seq_puts(m, "device "); 872 mangle(m, mnt->mnt_devname); 873 } else 874 seq_puts(m, "no device"); 875 876 /* mount point */ 877 seq_puts(m, " mounted on "); 878 seq_path(m, &mnt_path, " \t\n\\"); 879 seq_putc(m, ' '); 880 881 /* file system type */ 882 seq_puts(m, "with fstype "); 883 show_type(m, mnt->mnt_sb); 884 885 /* optional statistics */ 886 if (mnt->mnt_sb->s_op->show_stats) { 887 seq_putc(m, ' '); 888 err = mnt->mnt_sb->s_op->show_stats(m, mnt); 889 } 890 891 seq_putc(m, '\n'); 892 return err; 893 } 894 895 const struct seq_operations mountstats_op = { 896 .start = m_start, 897 .next = m_next, 898 .stop = m_stop, 899 .show = show_vfsstat, 900 }; 901 #endif /* CONFIG_PROC_FS */ 902 903 /** 904 * may_umount_tree - check if a mount tree is busy 905 * @mnt: root of mount tree 906 * 907 * This is called to check if a tree of mounts has any 908 * open files, pwds, chroots or sub mounts that are 909 * busy. 910 */ 911 int may_umount_tree(struct vfsmount *mnt) 912 { 913 int actual_refs = 0; 914 int minimum_refs = 0; 915 struct vfsmount *p; 916 917 spin_lock(&vfsmount_lock); 918 for (p = mnt; p; p = next_mnt(p, mnt)) { 919 actual_refs += atomic_read(&p->mnt_count); 920 minimum_refs += 2; 921 } 922 spin_unlock(&vfsmount_lock); 923 924 if (actual_refs > minimum_refs) 925 return 0; 926 927 return 1; 928 } 929 930 EXPORT_SYMBOL(may_umount_tree); 931 932 /** 933 * may_umount - check if a mount point is busy 934 * @mnt: root of mount 935 * 936 * This is called to check if a mount point has any 937 * open files, pwds, chroots or sub mounts. If the 938 * mount has sub mounts this will return busy 939 * regardless of whether the sub mounts are busy. 940 * 941 * Doesn't take quota and stuff into account. IOW, in some cases it will 942 * give false negatives. The main reason why it's here is that we need 943 * a non-destructive way to look for easily umountable filesystems. 944 */ 945 int may_umount(struct vfsmount *mnt) 946 { 947 int ret = 1; 948 spin_lock(&vfsmount_lock); 949 if (propagate_mount_busy(mnt, 2)) 950 ret = 0; 951 spin_unlock(&vfsmount_lock); 952 return ret; 953 } 954 955 EXPORT_SYMBOL(may_umount); 956 957 void release_mounts(struct list_head *head) 958 { 959 struct vfsmount *mnt; 960 while (!list_empty(head)) { 961 mnt = list_first_entry(head, struct vfsmount, mnt_hash); 962 list_del_init(&mnt->mnt_hash); 963 if (mnt->mnt_parent != mnt) { 964 struct dentry *dentry; 965 struct vfsmount *m; 966 spin_lock(&vfsmount_lock); 967 dentry = mnt->mnt_mountpoint; 968 m = mnt->mnt_parent; 969 mnt->mnt_mountpoint = mnt->mnt_root; 970 mnt->mnt_parent = mnt; 971 m->mnt_ghosts--; 972 spin_unlock(&vfsmount_lock); 973 dput(dentry); 974 mntput(m); 975 } 976 mntput(mnt); 977 } 978 } 979 980 void umount_tree(struct vfsmount *mnt, int propagate, struct list_head *kill) 981 { 982 struct vfsmount *p; 983 984 for (p = mnt; p; p = next_mnt(p, mnt)) 985 list_move(&p->mnt_hash, kill); 986 987 if (propagate) 988 propagate_umount(kill); 989 990 list_for_each_entry(p, kill, mnt_hash) { 991 list_del_init(&p->mnt_expire); 992 list_del_init(&p->mnt_list); 993 __touch_mnt_namespace(p->mnt_ns); 994 p->mnt_ns = NULL; 995 list_del_init(&p->mnt_child); 996 if (p->mnt_parent != p) { 997 p->mnt_parent->mnt_ghosts++; 998 p->mnt_mountpoint->d_mounted--; 999 } 1000 change_mnt_propagation(p, MS_PRIVATE); 1001 } 1002 } 1003 1004 static void shrink_submounts(struct vfsmount *mnt, struct list_head *umounts); 1005 1006 static int do_umount(struct vfsmount *mnt, int flags) 1007 { 1008 struct super_block *sb = mnt->mnt_sb; 1009 int retval; 1010 LIST_HEAD(umount_list); 1011 1012 retval = security_sb_umount(mnt, flags); 1013 if (retval) 1014 return retval; 1015 1016 /* 1017 * Allow userspace to request a mountpoint be expired rather than 1018 * unmounting unconditionally. Unmount only happens if: 1019 * (1) the mark is already set (the mark is cleared by mntput()) 1020 * (2) the usage count == 1 [parent vfsmount] + 1 [sys_umount] 1021 */ 1022 if (flags & MNT_EXPIRE) { 1023 if (mnt == current->fs->root.mnt || 1024 flags & (MNT_FORCE | MNT_DETACH)) 1025 return -EINVAL; 1026 1027 if (atomic_read(&mnt->mnt_count) != 2) 1028 return -EBUSY; 1029 1030 if (!xchg(&mnt->mnt_expiry_mark, 1)) 1031 return -EAGAIN; 1032 } 1033 1034 /* 1035 * If we may have to abort operations to get out of this 1036 * mount, and they will themselves hold resources we must 1037 * allow the fs to do things. In the Unix tradition of 1038 * 'Gee thats tricky lets do it in userspace' the umount_begin 1039 * might fail to complete on the first run through as other tasks 1040 * must return, and the like. Thats for the mount program to worry 1041 * about for the moment. 1042 */ 1043 1044 if (flags & MNT_FORCE && sb->s_op->umount_begin) { 1045 sb->s_op->umount_begin(sb); 1046 } 1047 1048 /* 1049 * No sense to grab the lock for this test, but test itself looks 1050 * somewhat bogus. Suggestions for better replacement? 1051 * Ho-hum... In principle, we might treat that as umount + switch 1052 * to rootfs. GC would eventually take care of the old vfsmount. 1053 * Actually it makes sense, especially if rootfs would contain a 1054 * /reboot - static binary that would close all descriptors and 1055 * call reboot(9). Then init(8) could umount root and exec /reboot. 1056 */ 1057 if (mnt == current->fs->root.mnt && !(flags & MNT_DETACH)) { 1058 /* 1059 * Special case for "unmounting" root ... 1060 * we just try to remount it readonly. 1061 */ 1062 down_write(&sb->s_umount); 1063 if (!(sb->s_flags & MS_RDONLY)) 1064 retval = do_remount_sb(sb, MS_RDONLY, NULL, 0); 1065 up_write(&sb->s_umount); 1066 return retval; 1067 } 1068 1069 down_write(&namespace_sem); 1070 spin_lock(&vfsmount_lock); 1071 event++; 1072 1073 if (!(flags & MNT_DETACH)) 1074 shrink_submounts(mnt, &umount_list); 1075 1076 retval = -EBUSY; 1077 if (flags & MNT_DETACH || !propagate_mount_busy(mnt, 2)) { 1078 if (!list_empty(&mnt->mnt_list)) 1079 umount_tree(mnt, 1, &umount_list); 1080 retval = 0; 1081 } 1082 spin_unlock(&vfsmount_lock); 1083 if (retval) 1084 security_sb_umount_busy(mnt); 1085 up_write(&namespace_sem); 1086 release_mounts(&umount_list); 1087 return retval; 1088 } 1089 1090 /* 1091 * Now umount can handle mount points as well as block devices. 1092 * This is important for filesystems which use unnamed block devices. 1093 * 1094 * We now support a flag for forced unmount like the other 'big iron' 1095 * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD 1096 */ 1097 1098 SYSCALL_DEFINE2(umount, char __user *, name, int, flags) 1099 { 1100 struct path path; 1101 int retval; 1102 1103 retval = user_path(name, &path); 1104 if (retval) 1105 goto out; 1106 retval = -EINVAL; 1107 if (path.dentry != path.mnt->mnt_root) 1108 goto dput_and_out; 1109 if (!check_mnt(path.mnt)) 1110 goto dput_and_out; 1111 1112 retval = -EPERM; 1113 if (!capable(CAP_SYS_ADMIN)) 1114 goto dput_and_out; 1115 1116 retval = do_umount(path.mnt, flags); 1117 dput_and_out: 1118 /* we mustn't call path_put() as that would clear mnt_expiry_mark */ 1119 dput(path.dentry); 1120 mntput_no_expire(path.mnt); 1121 out: 1122 return retval; 1123 } 1124 1125 #ifdef __ARCH_WANT_SYS_OLDUMOUNT 1126 1127 /* 1128 * The 2.0 compatible umount. No flags. 1129 */ 1130 SYSCALL_DEFINE1(oldumount, char __user *, name) 1131 { 1132 return sys_umount(name, 0); 1133 } 1134 1135 #endif 1136 1137 static int mount_is_safe(struct path *path) 1138 { 1139 if (capable(CAP_SYS_ADMIN)) 1140 return 0; 1141 return -EPERM; 1142 #ifdef notyet 1143 if (S_ISLNK(path->dentry->d_inode->i_mode)) 1144 return -EPERM; 1145 if (path->dentry->d_inode->i_mode & S_ISVTX) { 1146 if (current_uid() != path->dentry->d_inode->i_uid) 1147 return -EPERM; 1148 } 1149 if (inode_permission(path->dentry->d_inode, MAY_WRITE)) 1150 return -EPERM; 1151 return 0; 1152 #endif 1153 } 1154 1155 struct vfsmount *copy_tree(struct vfsmount *mnt, struct dentry *dentry, 1156 int flag) 1157 { 1158 struct vfsmount *res, *p, *q, *r, *s; 1159 struct path path; 1160 1161 if (!(flag & CL_COPY_ALL) && IS_MNT_UNBINDABLE(mnt)) 1162 return NULL; 1163 1164 res = q = clone_mnt(mnt, dentry, flag); 1165 if (!q) 1166 goto Enomem; 1167 q->mnt_mountpoint = mnt->mnt_mountpoint; 1168 1169 p = mnt; 1170 list_for_each_entry(r, &mnt->mnt_mounts, mnt_child) { 1171 if (!is_subdir(r->mnt_mountpoint, dentry)) 1172 continue; 1173 1174 for (s = r; s; s = next_mnt(s, r)) { 1175 if (!(flag & CL_COPY_ALL) && IS_MNT_UNBINDABLE(s)) { 1176 s = skip_mnt_tree(s); 1177 continue; 1178 } 1179 while (p != s->mnt_parent) { 1180 p = p->mnt_parent; 1181 q = q->mnt_parent; 1182 } 1183 p = s; 1184 path.mnt = q; 1185 path.dentry = p->mnt_mountpoint; 1186 q = clone_mnt(p, p->mnt_root, flag); 1187 if (!q) 1188 goto Enomem; 1189 spin_lock(&vfsmount_lock); 1190 list_add_tail(&q->mnt_list, &res->mnt_list); 1191 attach_mnt(q, &path); 1192 spin_unlock(&vfsmount_lock); 1193 } 1194 } 1195 return res; 1196 Enomem: 1197 if (res) { 1198 LIST_HEAD(umount_list); 1199 spin_lock(&vfsmount_lock); 1200 umount_tree(res, 0, &umount_list); 1201 spin_unlock(&vfsmount_lock); 1202 release_mounts(&umount_list); 1203 } 1204 return NULL; 1205 } 1206 1207 struct vfsmount *collect_mounts(struct path *path) 1208 { 1209 struct vfsmount *tree; 1210 down_write(&namespace_sem); 1211 tree = copy_tree(path->mnt, path->dentry, CL_COPY_ALL | CL_PRIVATE); 1212 up_write(&namespace_sem); 1213 return tree; 1214 } 1215 1216 void drop_collected_mounts(struct vfsmount *mnt) 1217 { 1218 LIST_HEAD(umount_list); 1219 down_write(&namespace_sem); 1220 spin_lock(&vfsmount_lock); 1221 umount_tree(mnt, 0, &umount_list); 1222 spin_unlock(&vfsmount_lock); 1223 up_write(&namespace_sem); 1224 release_mounts(&umount_list); 1225 } 1226 1227 static void cleanup_group_ids(struct vfsmount *mnt, struct vfsmount *end) 1228 { 1229 struct vfsmount *p; 1230 1231 for (p = mnt; p != end; p = next_mnt(p, mnt)) { 1232 if (p->mnt_group_id && !IS_MNT_SHARED(p)) 1233 mnt_release_group_id(p); 1234 } 1235 } 1236 1237 static int invent_group_ids(struct vfsmount *mnt, bool recurse) 1238 { 1239 struct vfsmount *p; 1240 1241 for (p = mnt; p; p = recurse ? next_mnt(p, mnt) : NULL) { 1242 if (!p->mnt_group_id && !IS_MNT_SHARED(p)) { 1243 int err = mnt_alloc_group_id(p); 1244 if (err) { 1245 cleanup_group_ids(mnt, p); 1246 return err; 1247 } 1248 } 1249 } 1250 1251 return 0; 1252 } 1253 1254 /* 1255 * @source_mnt : mount tree to be attached 1256 * @nd : place the mount tree @source_mnt is attached 1257 * @parent_nd : if non-null, detach the source_mnt from its parent and 1258 * store the parent mount and mountpoint dentry. 1259 * (done when source_mnt is moved) 1260 * 1261 * NOTE: in the table below explains the semantics when a source mount 1262 * of a given type is attached to a destination mount of a given type. 1263 * --------------------------------------------------------------------------- 1264 * | BIND MOUNT OPERATION | 1265 * |************************************************************************** 1266 * | source-->| shared | private | slave | unbindable | 1267 * | dest | | | | | 1268 * | | | | | | | 1269 * | v | | | | | 1270 * |************************************************************************** 1271 * | shared | shared (++) | shared (+) | shared(+++)| invalid | 1272 * | | | | | | 1273 * |non-shared| shared (+) | private | slave (*) | invalid | 1274 * *************************************************************************** 1275 * A bind operation clones the source mount and mounts the clone on the 1276 * destination mount. 1277 * 1278 * (++) the cloned mount is propagated to all the mounts in the propagation 1279 * tree of the destination mount and the cloned mount is added to 1280 * the peer group of the source mount. 1281 * (+) the cloned mount is created under the destination mount and is marked 1282 * as shared. The cloned mount is added to the peer group of the source 1283 * mount. 1284 * (+++) the mount is propagated to all the mounts in the propagation tree 1285 * of the destination mount and the cloned mount is made slave 1286 * of the same master as that of the source mount. The cloned mount 1287 * is marked as 'shared and slave'. 1288 * (*) the cloned mount is made a slave of the same master as that of the 1289 * source mount. 1290 * 1291 * --------------------------------------------------------------------------- 1292 * | MOVE MOUNT OPERATION | 1293 * |************************************************************************** 1294 * | source-->| shared | private | slave | unbindable | 1295 * | dest | | | | | 1296 * | | | | | | | 1297 * | v | | | | | 1298 * |************************************************************************** 1299 * | shared | shared (+) | shared (+) | shared(+++) | invalid | 1300 * | | | | | | 1301 * |non-shared| shared (+*) | private | slave (*) | unbindable | 1302 * *************************************************************************** 1303 * 1304 * (+) the mount is moved to the destination. And is then propagated to 1305 * all the mounts in the propagation tree of the destination mount. 1306 * (+*) the mount is moved to the destination. 1307 * (+++) the mount is moved to the destination and is then propagated to 1308 * all the mounts belonging to the destination mount's propagation tree. 1309 * the mount is marked as 'shared and slave'. 1310 * (*) the mount continues to be a slave at the new location. 1311 * 1312 * if the source mount is a tree, the operations explained above is 1313 * applied to each mount in the tree. 1314 * Must be called without spinlocks held, since this function can sleep 1315 * in allocations. 1316 */ 1317 static int attach_recursive_mnt(struct vfsmount *source_mnt, 1318 struct path *path, struct path *parent_path) 1319 { 1320 LIST_HEAD(tree_list); 1321 struct vfsmount *dest_mnt = path->mnt; 1322 struct dentry *dest_dentry = path->dentry; 1323 struct vfsmount *child, *p; 1324 int err; 1325 1326 if (IS_MNT_SHARED(dest_mnt)) { 1327 err = invent_group_ids(source_mnt, true); 1328 if (err) 1329 goto out; 1330 } 1331 err = propagate_mnt(dest_mnt, dest_dentry, source_mnt, &tree_list); 1332 if (err) 1333 goto out_cleanup_ids; 1334 1335 if (IS_MNT_SHARED(dest_mnt)) { 1336 for (p = source_mnt; p; p = next_mnt(p, source_mnt)) 1337 set_mnt_shared(p); 1338 } 1339 1340 spin_lock(&vfsmount_lock); 1341 if (parent_path) { 1342 detach_mnt(source_mnt, parent_path); 1343 attach_mnt(source_mnt, path); 1344 touch_mnt_namespace(parent_path->mnt->mnt_ns); 1345 } else { 1346 mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt); 1347 commit_tree(source_mnt); 1348 } 1349 1350 list_for_each_entry_safe(child, p, &tree_list, mnt_hash) { 1351 list_del_init(&child->mnt_hash); 1352 commit_tree(child); 1353 } 1354 spin_unlock(&vfsmount_lock); 1355 return 0; 1356 1357 out_cleanup_ids: 1358 if (IS_MNT_SHARED(dest_mnt)) 1359 cleanup_group_ids(source_mnt, NULL); 1360 out: 1361 return err; 1362 } 1363 1364 static int graft_tree(struct vfsmount *mnt, struct path *path) 1365 { 1366 int err; 1367 if (mnt->mnt_sb->s_flags & MS_NOUSER) 1368 return -EINVAL; 1369 1370 if (S_ISDIR(path->dentry->d_inode->i_mode) != 1371 S_ISDIR(mnt->mnt_root->d_inode->i_mode)) 1372 return -ENOTDIR; 1373 1374 err = -ENOENT; 1375 mutex_lock(&path->dentry->d_inode->i_mutex); 1376 if (IS_DEADDIR(path->dentry->d_inode)) 1377 goto out_unlock; 1378 1379 err = security_sb_check_sb(mnt, path); 1380 if (err) 1381 goto out_unlock; 1382 1383 err = -ENOENT; 1384 if (!d_unlinked(path->dentry)) 1385 err = attach_recursive_mnt(mnt, path, NULL); 1386 out_unlock: 1387 mutex_unlock(&path->dentry->d_inode->i_mutex); 1388 if (!err) 1389 security_sb_post_addmount(mnt, path); 1390 return err; 1391 } 1392 1393 /* 1394 * recursively change the type of the mountpoint. 1395 */ 1396 static int do_change_type(struct path *path, int flag) 1397 { 1398 struct vfsmount *m, *mnt = path->mnt; 1399 int recurse = flag & MS_REC; 1400 int type = flag & ~MS_REC; 1401 int err = 0; 1402 1403 if (!capable(CAP_SYS_ADMIN)) 1404 return -EPERM; 1405 1406 if (path->dentry != path->mnt->mnt_root) 1407 return -EINVAL; 1408 1409 down_write(&namespace_sem); 1410 if (type == MS_SHARED) { 1411 err = invent_group_ids(mnt, recurse); 1412 if (err) 1413 goto out_unlock; 1414 } 1415 1416 spin_lock(&vfsmount_lock); 1417 for (m = mnt; m; m = (recurse ? next_mnt(m, mnt) : NULL)) 1418 change_mnt_propagation(m, type); 1419 spin_unlock(&vfsmount_lock); 1420 1421 out_unlock: 1422 up_write(&namespace_sem); 1423 return err; 1424 } 1425 1426 /* 1427 * do loopback mount. 1428 */ 1429 static int do_loopback(struct path *path, char *old_name, 1430 int recurse) 1431 { 1432 struct path old_path; 1433 struct vfsmount *mnt = NULL; 1434 int err = mount_is_safe(path); 1435 if (err) 1436 return err; 1437 if (!old_name || !*old_name) 1438 return -EINVAL; 1439 err = kern_path(old_name, LOOKUP_FOLLOW, &old_path); 1440 if (err) 1441 return err; 1442 1443 down_write(&namespace_sem); 1444 err = -EINVAL; 1445 if (IS_MNT_UNBINDABLE(old_path.mnt)) 1446 goto out; 1447 1448 if (!check_mnt(path->mnt) || !check_mnt(old_path.mnt)) 1449 goto out; 1450 1451 err = -ENOMEM; 1452 if (recurse) 1453 mnt = copy_tree(old_path.mnt, old_path.dentry, 0); 1454 else 1455 mnt = clone_mnt(old_path.mnt, old_path.dentry, 0); 1456 1457 if (!mnt) 1458 goto out; 1459 1460 err = graft_tree(mnt, path); 1461 if (err) { 1462 LIST_HEAD(umount_list); 1463 spin_lock(&vfsmount_lock); 1464 umount_tree(mnt, 0, &umount_list); 1465 spin_unlock(&vfsmount_lock); 1466 release_mounts(&umount_list); 1467 } 1468 1469 out: 1470 up_write(&namespace_sem); 1471 path_put(&old_path); 1472 return err; 1473 } 1474 1475 static int change_mount_flags(struct vfsmount *mnt, int ms_flags) 1476 { 1477 int error = 0; 1478 int readonly_request = 0; 1479 1480 if (ms_flags & MS_RDONLY) 1481 readonly_request = 1; 1482 if (readonly_request == __mnt_is_readonly(mnt)) 1483 return 0; 1484 1485 if (readonly_request) 1486 error = mnt_make_readonly(mnt); 1487 else 1488 __mnt_unmake_readonly(mnt); 1489 return error; 1490 } 1491 1492 /* 1493 * change filesystem flags. dir should be a physical root of filesystem. 1494 * If you've mounted a non-root directory somewhere and want to do remount 1495 * on it - tough luck. 1496 */ 1497 static int do_remount(struct path *path, int flags, int mnt_flags, 1498 void *data) 1499 { 1500 int err; 1501 struct super_block *sb = path->mnt->mnt_sb; 1502 1503 if (!capable(CAP_SYS_ADMIN)) 1504 return -EPERM; 1505 1506 if (!check_mnt(path->mnt)) 1507 return -EINVAL; 1508 1509 if (path->dentry != path->mnt->mnt_root) 1510 return -EINVAL; 1511 1512 down_write(&sb->s_umount); 1513 if (flags & MS_BIND) 1514 err = change_mount_flags(path->mnt, flags); 1515 else 1516 err = do_remount_sb(sb, flags, data, 0); 1517 if (!err) 1518 path->mnt->mnt_flags = mnt_flags; 1519 up_write(&sb->s_umount); 1520 if (!err) { 1521 security_sb_post_remount(path->mnt, flags, data); 1522 1523 spin_lock(&vfsmount_lock); 1524 touch_mnt_namespace(path->mnt->mnt_ns); 1525 spin_unlock(&vfsmount_lock); 1526 } 1527 return err; 1528 } 1529 1530 static inline int tree_contains_unbindable(struct vfsmount *mnt) 1531 { 1532 struct vfsmount *p; 1533 for (p = mnt; p; p = next_mnt(p, mnt)) { 1534 if (IS_MNT_UNBINDABLE(p)) 1535 return 1; 1536 } 1537 return 0; 1538 } 1539 1540 static int do_move_mount(struct path *path, char *old_name) 1541 { 1542 struct path old_path, parent_path; 1543 struct vfsmount *p; 1544 int err = 0; 1545 if (!capable(CAP_SYS_ADMIN)) 1546 return -EPERM; 1547 if (!old_name || !*old_name) 1548 return -EINVAL; 1549 err = kern_path(old_name, LOOKUP_FOLLOW, &old_path); 1550 if (err) 1551 return err; 1552 1553 down_write(&namespace_sem); 1554 while (d_mountpoint(path->dentry) && 1555 follow_down(path)) 1556 ; 1557 err = -EINVAL; 1558 if (!check_mnt(path->mnt) || !check_mnt(old_path.mnt)) 1559 goto out; 1560 1561 err = -ENOENT; 1562 mutex_lock(&path->dentry->d_inode->i_mutex); 1563 if (IS_DEADDIR(path->dentry->d_inode)) 1564 goto out1; 1565 1566 if (d_unlinked(path->dentry)) 1567 goto out1; 1568 1569 err = -EINVAL; 1570 if (old_path.dentry != old_path.mnt->mnt_root) 1571 goto out1; 1572 1573 if (old_path.mnt == old_path.mnt->mnt_parent) 1574 goto out1; 1575 1576 if (S_ISDIR(path->dentry->d_inode->i_mode) != 1577 S_ISDIR(old_path.dentry->d_inode->i_mode)) 1578 goto out1; 1579 /* 1580 * Don't move a mount residing in a shared parent. 1581 */ 1582 if (old_path.mnt->mnt_parent && 1583 IS_MNT_SHARED(old_path.mnt->mnt_parent)) 1584 goto out1; 1585 /* 1586 * Don't move a mount tree containing unbindable mounts to a destination 1587 * mount which is shared. 1588 */ 1589 if (IS_MNT_SHARED(path->mnt) && 1590 tree_contains_unbindable(old_path.mnt)) 1591 goto out1; 1592 err = -ELOOP; 1593 for (p = path->mnt; p->mnt_parent != p; p = p->mnt_parent) 1594 if (p == old_path.mnt) 1595 goto out1; 1596 1597 err = attach_recursive_mnt(old_path.mnt, path, &parent_path); 1598 if (err) 1599 goto out1; 1600 1601 /* if the mount is moved, it should no longer be expire 1602 * automatically */ 1603 list_del_init(&old_path.mnt->mnt_expire); 1604 out1: 1605 mutex_unlock(&path->dentry->d_inode->i_mutex); 1606 out: 1607 up_write(&namespace_sem); 1608 if (!err) 1609 path_put(&parent_path); 1610 path_put(&old_path); 1611 return err; 1612 } 1613 1614 /* 1615 * create a new mount for userspace and request it to be added into the 1616 * namespace's tree 1617 */ 1618 static int do_new_mount(struct path *path, char *type, int flags, 1619 int mnt_flags, char *name, void *data) 1620 { 1621 struct vfsmount *mnt; 1622 1623 if (!type || !memchr(type, 0, PAGE_SIZE)) 1624 return -EINVAL; 1625 1626 /* we need capabilities... */ 1627 if (!capable(CAP_SYS_ADMIN)) 1628 return -EPERM; 1629 1630 lock_kernel(); 1631 mnt = do_kern_mount(type, flags, name, data); 1632 unlock_kernel(); 1633 if (IS_ERR(mnt)) 1634 return PTR_ERR(mnt); 1635 1636 return do_add_mount(mnt, path, mnt_flags, NULL); 1637 } 1638 1639 /* 1640 * add a mount into a namespace's mount tree 1641 * - provide the option of adding the new mount to an expiration list 1642 */ 1643 int do_add_mount(struct vfsmount *newmnt, struct path *path, 1644 int mnt_flags, struct list_head *fslist) 1645 { 1646 int err; 1647 1648 down_write(&namespace_sem); 1649 /* Something was mounted here while we slept */ 1650 while (d_mountpoint(path->dentry) && 1651 follow_down(path)) 1652 ; 1653 err = -EINVAL; 1654 if (!(mnt_flags & MNT_SHRINKABLE) && !check_mnt(path->mnt)) 1655 goto unlock; 1656 1657 /* Refuse the same filesystem on the same mount point */ 1658 err = -EBUSY; 1659 if (path->mnt->mnt_sb == newmnt->mnt_sb && 1660 path->mnt->mnt_root == path->dentry) 1661 goto unlock; 1662 1663 err = -EINVAL; 1664 if (S_ISLNK(newmnt->mnt_root->d_inode->i_mode)) 1665 goto unlock; 1666 1667 newmnt->mnt_flags = mnt_flags; 1668 if ((err = graft_tree(newmnt, path))) 1669 goto unlock; 1670 1671 if (fslist) /* add to the specified expiration list */ 1672 list_add_tail(&newmnt->mnt_expire, fslist); 1673 1674 up_write(&namespace_sem); 1675 return 0; 1676 1677 unlock: 1678 up_write(&namespace_sem); 1679 mntput(newmnt); 1680 return err; 1681 } 1682 1683 EXPORT_SYMBOL_GPL(do_add_mount); 1684 1685 /* 1686 * process a list of expirable mountpoints with the intent of discarding any 1687 * mountpoints that aren't in use and haven't been touched since last we came 1688 * here 1689 */ 1690 void mark_mounts_for_expiry(struct list_head *mounts) 1691 { 1692 struct vfsmount *mnt, *next; 1693 LIST_HEAD(graveyard); 1694 LIST_HEAD(umounts); 1695 1696 if (list_empty(mounts)) 1697 return; 1698 1699 down_write(&namespace_sem); 1700 spin_lock(&vfsmount_lock); 1701 1702 /* extract from the expiration list every vfsmount that matches the 1703 * following criteria: 1704 * - only referenced by its parent vfsmount 1705 * - still marked for expiry (marked on the last call here; marks are 1706 * cleared by mntput()) 1707 */ 1708 list_for_each_entry_safe(mnt, next, mounts, mnt_expire) { 1709 if (!xchg(&mnt->mnt_expiry_mark, 1) || 1710 propagate_mount_busy(mnt, 1)) 1711 continue; 1712 list_move(&mnt->mnt_expire, &graveyard); 1713 } 1714 while (!list_empty(&graveyard)) { 1715 mnt = list_first_entry(&graveyard, struct vfsmount, mnt_expire); 1716 touch_mnt_namespace(mnt->mnt_ns); 1717 umount_tree(mnt, 1, &umounts); 1718 } 1719 spin_unlock(&vfsmount_lock); 1720 up_write(&namespace_sem); 1721 1722 release_mounts(&umounts); 1723 } 1724 1725 EXPORT_SYMBOL_GPL(mark_mounts_for_expiry); 1726 1727 /* 1728 * Ripoff of 'select_parent()' 1729 * 1730 * search the list of submounts for a given mountpoint, and move any 1731 * shrinkable submounts to the 'graveyard' list. 1732 */ 1733 static int select_submounts(struct vfsmount *parent, struct list_head *graveyard) 1734 { 1735 struct vfsmount *this_parent = parent; 1736 struct list_head *next; 1737 int found = 0; 1738 1739 repeat: 1740 next = this_parent->mnt_mounts.next; 1741 resume: 1742 while (next != &this_parent->mnt_mounts) { 1743 struct list_head *tmp = next; 1744 struct vfsmount *mnt = list_entry(tmp, struct vfsmount, mnt_child); 1745 1746 next = tmp->next; 1747 if (!(mnt->mnt_flags & MNT_SHRINKABLE)) 1748 continue; 1749 /* 1750 * Descend a level if the d_mounts list is non-empty. 1751 */ 1752 if (!list_empty(&mnt->mnt_mounts)) { 1753 this_parent = mnt; 1754 goto repeat; 1755 } 1756 1757 if (!propagate_mount_busy(mnt, 1)) { 1758 list_move_tail(&mnt->mnt_expire, graveyard); 1759 found++; 1760 } 1761 } 1762 /* 1763 * All done at this level ... ascend and resume the search 1764 */ 1765 if (this_parent != parent) { 1766 next = this_parent->mnt_child.next; 1767 this_parent = this_parent->mnt_parent; 1768 goto resume; 1769 } 1770 return found; 1771 } 1772 1773 /* 1774 * process a list of expirable mountpoints with the intent of discarding any 1775 * submounts of a specific parent mountpoint 1776 */ 1777 static void shrink_submounts(struct vfsmount *mnt, struct list_head *umounts) 1778 { 1779 LIST_HEAD(graveyard); 1780 struct vfsmount *m; 1781 1782 /* extract submounts of 'mountpoint' from the expiration list */ 1783 while (select_submounts(mnt, &graveyard)) { 1784 while (!list_empty(&graveyard)) { 1785 m = list_first_entry(&graveyard, struct vfsmount, 1786 mnt_expire); 1787 touch_mnt_namespace(m->mnt_ns); 1788 umount_tree(m, 1, umounts); 1789 } 1790 } 1791 } 1792 1793 /* 1794 * Some copy_from_user() implementations do not return the exact number of 1795 * bytes remaining to copy on a fault. But copy_mount_options() requires that. 1796 * Note that this function differs from copy_from_user() in that it will oops 1797 * on bad values of `to', rather than returning a short copy. 1798 */ 1799 static long exact_copy_from_user(void *to, const void __user * from, 1800 unsigned long n) 1801 { 1802 char *t = to; 1803 const char __user *f = from; 1804 char c; 1805 1806 if (!access_ok(VERIFY_READ, from, n)) 1807 return n; 1808 1809 while (n) { 1810 if (__get_user(c, f)) { 1811 memset(t, 0, n); 1812 break; 1813 } 1814 *t++ = c; 1815 f++; 1816 n--; 1817 } 1818 return n; 1819 } 1820 1821 int copy_mount_options(const void __user * data, unsigned long *where) 1822 { 1823 int i; 1824 unsigned long page; 1825 unsigned long size; 1826 1827 *where = 0; 1828 if (!data) 1829 return 0; 1830 1831 if (!(page = __get_free_page(GFP_KERNEL))) 1832 return -ENOMEM; 1833 1834 /* We only care that *some* data at the address the user 1835 * gave us is valid. Just in case, we'll zero 1836 * the remainder of the page. 1837 */ 1838 /* copy_from_user cannot cross TASK_SIZE ! */ 1839 size = TASK_SIZE - (unsigned long)data; 1840 if (size > PAGE_SIZE) 1841 size = PAGE_SIZE; 1842 1843 i = size - exact_copy_from_user((void *)page, data, size); 1844 if (!i) { 1845 free_page(page); 1846 return -EFAULT; 1847 } 1848 if (i != PAGE_SIZE) 1849 memset((char *)page + i, 0, PAGE_SIZE - i); 1850 *where = page; 1851 return 0; 1852 } 1853 1854 /* 1855 * Flags is a 32-bit value that allows up to 31 non-fs dependent flags to 1856 * be given to the mount() call (ie: read-only, no-dev, no-suid etc). 1857 * 1858 * data is a (void *) that can point to any structure up to 1859 * PAGE_SIZE-1 bytes, which can contain arbitrary fs-dependent 1860 * information (or be NULL). 1861 * 1862 * Pre-0.97 versions of mount() didn't have a flags word. 1863 * When the flags word was introduced its top half was required 1864 * to have the magic value 0xC0ED, and this remained so until 2.4.0-test9. 1865 * Therefore, if this magic number is present, it carries no information 1866 * and must be discarded. 1867 */ 1868 long do_mount(char *dev_name, char *dir_name, char *type_page, 1869 unsigned long flags, void *data_page) 1870 { 1871 struct path path; 1872 int retval = 0; 1873 int mnt_flags = 0; 1874 1875 /* Discard magic */ 1876 if ((flags & MS_MGC_MSK) == MS_MGC_VAL) 1877 flags &= ~MS_MGC_MSK; 1878 1879 /* Basic sanity checks */ 1880 1881 if (!dir_name || !*dir_name || !memchr(dir_name, 0, PAGE_SIZE)) 1882 return -EINVAL; 1883 if (dev_name && !memchr(dev_name, 0, PAGE_SIZE)) 1884 return -EINVAL; 1885 1886 if (data_page) 1887 ((char *)data_page)[PAGE_SIZE - 1] = 0; 1888 1889 /* Default to relatime unless overriden */ 1890 if (!(flags & MS_NOATIME)) 1891 mnt_flags |= MNT_RELATIME; 1892 1893 /* Separate the per-mountpoint flags */ 1894 if (flags & MS_NOSUID) 1895 mnt_flags |= MNT_NOSUID; 1896 if (flags & MS_NODEV) 1897 mnt_flags |= MNT_NODEV; 1898 if (flags & MS_NOEXEC) 1899 mnt_flags |= MNT_NOEXEC; 1900 if (flags & MS_NOATIME) 1901 mnt_flags |= MNT_NOATIME; 1902 if (flags & MS_NODIRATIME) 1903 mnt_flags |= MNT_NODIRATIME; 1904 if (flags & MS_STRICTATIME) 1905 mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME); 1906 if (flags & MS_RDONLY) 1907 mnt_flags |= MNT_READONLY; 1908 1909 flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | 1910 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT | 1911 MS_STRICTATIME); 1912 1913 /* ... and get the mountpoint */ 1914 retval = kern_path(dir_name, LOOKUP_FOLLOW, &path); 1915 if (retval) 1916 return retval; 1917 1918 retval = security_sb_mount(dev_name, &path, 1919 type_page, flags, data_page); 1920 if (retval) 1921 goto dput_out; 1922 1923 if (flags & MS_REMOUNT) 1924 retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags, 1925 data_page); 1926 else if (flags & MS_BIND) 1927 retval = do_loopback(&path, dev_name, flags & MS_REC); 1928 else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE)) 1929 retval = do_change_type(&path, flags); 1930 else if (flags & MS_MOVE) 1931 retval = do_move_mount(&path, dev_name); 1932 else 1933 retval = do_new_mount(&path, type_page, flags, mnt_flags, 1934 dev_name, data_page); 1935 dput_out: 1936 path_put(&path); 1937 return retval; 1938 } 1939 1940 /* 1941 * Allocate a new namespace structure and populate it with contents 1942 * copied from the namespace of the passed in task structure. 1943 */ 1944 static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns, 1945 struct fs_struct *fs) 1946 { 1947 struct mnt_namespace *new_ns; 1948 struct vfsmount *rootmnt = NULL, *pwdmnt = NULL; 1949 struct vfsmount *p, *q; 1950 1951 new_ns = kmalloc(sizeof(struct mnt_namespace), GFP_KERNEL); 1952 if (!new_ns) 1953 return ERR_PTR(-ENOMEM); 1954 1955 atomic_set(&new_ns->count, 1); 1956 INIT_LIST_HEAD(&new_ns->list); 1957 init_waitqueue_head(&new_ns->poll); 1958 new_ns->event = 0; 1959 1960 down_write(&namespace_sem); 1961 /* First pass: copy the tree topology */ 1962 new_ns->root = copy_tree(mnt_ns->root, mnt_ns->root->mnt_root, 1963 CL_COPY_ALL | CL_EXPIRE); 1964 if (!new_ns->root) { 1965 up_write(&namespace_sem); 1966 kfree(new_ns); 1967 return ERR_PTR(-ENOMEM); 1968 } 1969 spin_lock(&vfsmount_lock); 1970 list_add_tail(&new_ns->list, &new_ns->root->mnt_list); 1971 spin_unlock(&vfsmount_lock); 1972 1973 /* 1974 * Second pass: switch the tsk->fs->* elements and mark new vfsmounts 1975 * as belonging to new namespace. We have already acquired a private 1976 * fs_struct, so tsk->fs->lock is not needed. 1977 */ 1978 p = mnt_ns->root; 1979 q = new_ns->root; 1980 while (p) { 1981 q->mnt_ns = new_ns; 1982 if (fs) { 1983 if (p == fs->root.mnt) { 1984 rootmnt = p; 1985 fs->root.mnt = mntget(q); 1986 } 1987 if (p == fs->pwd.mnt) { 1988 pwdmnt = p; 1989 fs->pwd.mnt = mntget(q); 1990 } 1991 } 1992 p = next_mnt(p, mnt_ns->root); 1993 q = next_mnt(q, new_ns->root); 1994 } 1995 up_write(&namespace_sem); 1996 1997 if (rootmnt) 1998 mntput(rootmnt); 1999 if (pwdmnt) 2000 mntput(pwdmnt); 2001 2002 return new_ns; 2003 } 2004 2005 struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns, 2006 struct fs_struct *new_fs) 2007 { 2008 struct mnt_namespace *new_ns; 2009 2010 BUG_ON(!ns); 2011 get_mnt_ns(ns); 2012 2013 if (!(flags & CLONE_NEWNS)) 2014 return ns; 2015 2016 new_ns = dup_mnt_ns(ns, new_fs); 2017 2018 put_mnt_ns(ns); 2019 return new_ns; 2020 } 2021 2022 SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, 2023 char __user *, type, unsigned long, flags, void __user *, data) 2024 { 2025 int retval; 2026 unsigned long data_page; 2027 unsigned long type_page; 2028 unsigned long dev_page; 2029 char *dir_page; 2030 2031 retval = copy_mount_options(type, &type_page); 2032 if (retval < 0) 2033 return retval; 2034 2035 dir_page = getname(dir_name); 2036 retval = PTR_ERR(dir_page); 2037 if (IS_ERR(dir_page)) 2038 goto out1; 2039 2040 retval = copy_mount_options(dev_name, &dev_page); 2041 if (retval < 0) 2042 goto out2; 2043 2044 retval = copy_mount_options(data, &data_page); 2045 if (retval < 0) 2046 goto out3; 2047 2048 retval = do_mount((char *)dev_page, dir_page, (char *)type_page, 2049 flags, (void *)data_page); 2050 free_page(data_page); 2051 2052 out3: 2053 free_page(dev_page); 2054 out2: 2055 putname(dir_page); 2056 out1: 2057 free_page(type_page); 2058 return retval; 2059 } 2060 2061 /* 2062 * pivot_root Semantics: 2063 * Moves the root file system of the current process to the directory put_old, 2064 * makes new_root as the new root file system of the current process, and sets 2065 * root/cwd of all processes which had them on the current root to new_root. 2066 * 2067 * Restrictions: 2068 * The new_root and put_old must be directories, and must not be on the 2069 * same file system as the current process root. The put_old must be 2070 * underneath new_root, i.e. adding a non-zero number of /.. to the string 2071 * pointed to by put_old must yield the same directory as new_root. No other 2072 * file system may be mounted on put_old. After all, new_root is a mountpoint. 2073 * 2074 * Also, the current root cannot be on the 'rootfs' (initial ramfs) filesystem. 2075 * See Documentation/filesystems/ramfs-rootfs-initramfs.txt for alternatives 2076 * in this situation. 2077 * 2078 * Notes: 2079 * - we don't move root/cwd if they are not at the root (reason: if something 2080 * cared enough to change them, it's probably wrong to force them elsewhere) 2081 * - it's okay to pick a root that isn't the root of a file system, e.g. 2082 * /nfs/my_root where /nfs is the mount point. It must be a mountpoint, 2083 * though, so you may need to say mount --bind /nfs/my_root /nfs/my_root 2084 * first. 2085 */ 2086 SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, 2087 const char __user *, put_old) 2088 { 2089 struct vfsmount *tmp; 2090 struct path new, old, parent_path, root_parent, root; 2091 int error; 2092 2093 if (!capable(CAP_SYS_ADMIN)) 2094 return -EPERM; 2095 2096 error = user_path_dir(new_root, &new); 2097 if (error) 2098 goto out0; 2099 error = -EINVAL; 2100 if (!check_mnt(new.mnt)) 2101 goto out1; 2102 2103 error = user_path_dir(put_old, &old); 2104 if (error) 2105 goto out1; 2106 2107 error = security_sb_pivotroot(&old, &new); 2108 if (error) { 2109 path_put(&old); 2110 goto out1; 2111 } 2112 2113 read_lock(¤t->fs->lock); 2114 root = current->fs->root; 2115 path_get(¤t->fs->root); 2116 read_unlock(¤t->fs->lock); 2117 down_write(&namespace_sem); 2118 mutex_lock(&old.dentry->d_inode->i_mutex); 2119 error = -EINVAL; 2120 if (IS_MNT_SHARED(old.mnt) || 2121 IS_MNT_SHARED(new.mnt->mnt_parent) || 2122 IS_MNT_SHARED(root.mnt->mnt_parent)) 2123 goto out2; 2124 if (!check_mnt(root.mnt)) 2125 goto out2; 2126 error = -ENOENT; 2127 if (IS_DEADDIR(new.dentry->d_inode)) 2128 goto out2; 2129 if (d_unlinked(new.dentry)) 2130 goto out2; 2131 if (d_unlinked(old.dentry)) 2132 goto out2; 2133 error = -EBUSY; 2134 if (new.mnt == root.mnt || 2135 old.mnt == root.mnt) 2136 goto out2; /* loop, on the same file system */ 2137 error = -EINVAL; 2138 if (root.mnt->mnt_root != root.dentry) 2139 goto out2; /* not a mountpoint */ 2140 if (root.mnt->mnt_parent == root.mnt) 2141 goto out2; /* not attached */ 2142 if (new.mnt->mnt_root != new.dentry) 2143 goto out2; /* not a mountpoint */ 2144 if (new.mnt->mnt_parent == new.mnt) 2145 goto out2; /* not attached */ 2146 /* make sure we can reach put_old from new_root */ 2147 tmp = old.mnt; 2148 spin_lock(&vfsmount_lock); 2149 if (tmp != new.mnt) { 2150 for (;;) { 2151 if (tmp->mnt_parent == tmp) 2152 goto out3; /* already mounted on put_old */ 2153 if (tmp->mnt_parent == new.mnt) 2154 break; 2155 tmp = tmp->mnt_parent; 2156 } 2157 if (!is_subdir(tmp->mnt_mountpoint, new.dentry)) 2158 goto out3; 2159 } else if (!is_subdir(old.dentry, new.dentry)) 2160 goto out3; 2161 detach_mnt(new.mnt, &parent_path); 2162 detach_mnt(root.mnt, &root_parent); 2163 /* mount old root on put_old */ 2164 attach_mnt(root.mnt, &old); 2165 /* mount new_root on / */ 2166 attach_mnt(new.mnt, &root_parent); 2167 touch_mnt_namespace(current->nsproxy->mnt_ns); 2168 spin_unlock(&vfsmount_lock); 2169 chroot_fs_refs(&root, &new); 2170 security_sb_post_pivotroot(&root, &new); 2171 error = 0; 2172 path_put(&root_parent); 2173 path_put(&parent_path); 2174 out2: 2175 mutex_unlock(&old.dentry->d_inode->i_mutex); 2176 up_write(&namespace_sem); 2177 path_put(&root); 2178 path_put(&old); 2179 out1: 2180 path_put(&new); 2181 out0: 2182 return error; 2183 out3: 2184 spin_unlock(&vfsmount_lock); 2185 goto out2; 2186 } 2187 2188 static void __init init_mount_tree(void) 2189 { 2190 struct vfsmount *mnt; 2191 struct mnt_namespace *ns; 2192 struct path root; 2193 2194 mnt = do_kern_mount("rootfs", 0, "rootfs", NULL); 2195 if (IS_ERR(mnt)) 2196 panic("Can't create rootfs"); 2197 ns = kmalloc(sizeof(*ns), GFP_KERNEL); 2198 if (!ns) 2199 panic("Can't allocate initial namespace"); 2200 atomic_set(&ns->count, 1); 2201 INIT_LIST_HEAD(&ns->list); 2202 init_waitqueue_head(&ns->poll); 2203 ns->event = 0; 2204 list_add(&mnt->mnt_list, &ns->list); 2205 ns->root = mnt; 2206 mnt->mnt_ns = ns; 2207 2208 init_task.nsproxy->mnt_ns = ns; 2209 get_mnt_ns(ns); 2210 2211 root.mnt = ns->root; 2212 root.dentry = ns->root->mnt_root; 2213 2214 set_fs_pwd(current->fs, &root); 2215 set_fs_root(current->fs, &root); 2216 } 2217 2218 void __init mnt_init(void) 2219 { 2220 unsigned u; 2221 int err; 2222 2223 init_rwsem(&namespace_sem); 2224 2225 mnt_cache = kmem_cache_create("mnt_cache", sizeof(struct vfsmount), 2226 0, SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL); 2227 2228 mount_hashtable = (struct list_head *)__get_free_page(GFP_ATOMIC); 2229 2230 if (!mount_hashtable) 2231 panic("Failed to allocate mount hash table\n"); 2232 2233 printk("Mount-cache hash table entries: %lu\n", HASH_SIZE); 2234 2235 for (u = 0; u < HASH_SIZE; u++) 2236 INIT_LIST_HEAD(&mount_hashtable[u]); 2237 2238 err = sysfs_init(); 2239 if (err) 2240 printk(KERN_WARNING "%s: sysfs_init error: %d\n", 2241 __func__, err); 2242 fs_kobj = kobject_create_and_add("fs", NULL); 2243 if (!fs_kobj) 2244 printk(KERN_WARNING "%s: kobj create error\n", __func__); 2245 init_rootfs(); 2246 init_mount_tree(); 2247 } 2248 2249 void __put_mnt_ns(struct mnt_namespace *ns) 2250 { 2251 struct vfsmount *root = ns->root; 2252 LIST_HEAD(umount_list); 2253 ns->root = NULL; 2254 spin_unlock(&vfsmount_lock); 2255 down_write(&namespace_sem); 2256 spin_lock(&vfsmount_lock); 2257 umount_tree(root, 0, &umount_list); 2258 spin_unlock(&vfsmount_lock); 2259 up_write(&namespace_sem); 2260 release_mounts(&umount_list); 2261 kfree(ns); 2262 } 2263