inode.c (17368B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/proc/inode.c 4 * 5 * Copyright (C) 1991, 1992 Linus Torvalds 6 */ 7 8#include <linux/cache.h> 9#include <linux/time.h> 10#include <linux/proc_fs.h> 11#include <linux/kernel.h> 12#include <linux/pid_namespace.h> 13#include <linux/mm.h> 14#include <linux/string.h> 15#include <linux/stat.h> 16#include <linux/completion.h> 17#include <linux/poll.h> 18#include <linux/printk.h> 19#include <linux/file.h> 20#include <linux/limits.h> 21#include <linux/init.h> 22#include <linux/module.h> 23#include <linux/sysctl.h> 24#include <linux/seq_file.h> 25#include <linux/slab.h> 26#include <linux/mount.h> 27#include <linux/bug.h> 28 29#include <linux/uaccess.h> 30 31#include "internal.h" 32 33static void proc_evict_inode(struct inode *inode) 34{ 35 struct proc_dir_entry *de; 36 struct ctl_table_header *head; 37 struct proc_inode *ei = PROC_I(inode); 38 39 truncate_inode_pages_final(&inode->i_data); 40 clear_inode(inode); 41 42 /* Stop tracking associated processes */ 43 if (ei->pid) { 44 proc_pid_evict_inode(ei); 45 ei->pid = NULL; 46 } 47 48 /* Let go of any associated proc directory entry */ 49 de = ei->pde; 50 if (de) { 51 pde_put(de); 52 ei->pde = NULL; 53 } 54 55 head = ei->sysctl; 56 if (head) { 57 RCU_INIT_POINTER(ei->sysctl, NULL); 58 proc_sys_evict_inode(inode, head); 59 } 60} 61 62static struct kmem_cache *proc_inode_cachep __ro_after_init; 63static struct kmem_cache *pde_opener_cache __ro_after_init; 64 65static struct inode *proc_alloc_inode(struct super_block *sb) 66{ 67 struct proc_inode *ei; 68 69 ei = alloc_inode_sb(sb, proc_inode_cachep, GFP_KERNEL); 70 if (!ei) 71 return NULL; 72 ei->pid = NULL; 73 ei->fd = 0; 74 ei->op.proc_get_link = NULL; 75 ei->pde = NULL; 76 ei->sysctl = NULL; 77 ei->sysctl_entry = NULL; 78 INIT_HLIST_NODE(&ei->sibling_inodes); 79 ei->ns_ops = NULL; 80 return &ei->vfs_inode; 81} 82 83static void proc_free_inode(struct inode *inode) 84{ 85 kmem_cache_free(proc_inode_cachep, PROC_I(inode)); 86} 87 88static void init_once(void *foo) 89{ 90 struct proc_inode *ei = (struct proc_inode *) foo; 91 92 inode_init_once(&ei->vfs_inode); 93} 94 95void __init proc_init_kmemcache(void) 96{ 97 proc_inode_cachep = kmem_cache_create("proc_inode_cache", 98 sizeof(struct proc_inode), 99 0, (SLAB_RECLAIM_ACCOUNT| 100 SLAB_MEM_SPREAD|SLAB_ACCOUNT| 101 SLAB_PANIC), 102 init_once); 103 pde_opener_cache = 104 kmem_cache_create("pde_opener", sizeof(struct pde_opener), 0, 105 SLAB_ACCOUNT|SLAB_PANIC, NULL); 106 proc_dir_entry_cache = kmem_cache_create_usercopy( 107 "proc_dir_entry", SIZEOF_PDE, 0, SLAB_PANIC, 108 offsetof(struct proc_dir_entry, inline_name), 109 SIZEOF_PDE_INLINE_NAME, NULL); 110 BUILD_BUG_ON(sizeof(struct proc_dir_entry) >= SIZEOF_PDE); 111} 112 113void proc_invalidate_siblings_dcache(struct hlist_head *inodes, spinlock_t *lock) 114{ 115 struct inode *inode; 116 struct proc_inode *ei; 117 struct hlist_node *node; 118 struct super_block *old_sb = NULL; 119 120 rcu_read_lock(); 121 for (;;) { 122 struct super_block *sb; 123 node = hlist_first_rcu(inodes); 124 if (!node) 125 break; 126 ei = hlist_entry(node, struct proc_inode, sibling_inodes); 127 spin_lock(lock); 128 hlist_del_init_rcu(&ei->sibling_inodes); 129 spin_unlock(lock); 130 131 inode = &ei->vfs_inode; 132 sb = inode->i_sb; 133 if ((sb != old_sb) && !atomic_inc_not_zero(&sb->s_active)) 134 continue; 135 inode = igrab(inode); 136 rcu_read_unlock(); 137 if (sb != old_sb) { 138 if (old_sb) 139 deactivate_super(old_sb); 140 old_sb = sb; 141 } 142 if (unlikely(!inode)) { 143 rcu_read_lock(); 144 continue; 145 } 146 147 if (S_ISDIR(inode->i_mode)) { 148 struct dentry *dir = d_find_any_alias(inode); 149 if (dir) { 150 d_invalidate(dir); 151 dput(dir); 152 } 153 } else { 154 struct dentry *dentry; 155 while ((dentry = d_find_alias(inode))) { 156 d_invalidate(dentry); 157 dput(dentry); 158 } 159 } 160 iput(inode); 161 162 rcu_read_lock(); 163 } 164 rcu_read_unlock(); 165 if (old_sb) 166 deactivate_super(old_sb); 167} 168 169static inline const char *hidepid2str(enum proc_hidepid v) 170{ 171 switch (v) { 172 case HIDEPID_OFF: return "off"; 173 case HIDEPID_NO_ACCESS: return "noaccess"; 174 case HIDEPID_INVISIBLE: return "invisible"; 175 case HIDEPID_NOT_PTRACEABLE: return "ptraceable"; 176 } 177 WARN_ONCE(1, "bad hide_pid value: %d\n", v); 178 return "unknown"; 179} 180 181static int proc_show_options(struct seq_file *seq, struct dentry *root) 182{ 183 struct proc_fs_info *fs_info = proc_sb_info(root->d_sb); 184 185 if (!gid_eq(fs_info->pid_gid, GLOBAL_ROOT_GID)) 186 seq_printf(seq, ",gid=%u", from_kgid_munged(&init_user_ns, fs_info->pid_gid)); 187 if (fs_info->hide_pid != HIDEPID_OFF) 188 seq_printf(seq, ",hidepid=%s", hidepid2str(fs_info->hide_pid)); 189 if (fs_info->pidonly != PROC_PIDONLY_OFF) 190 seq_printf(seq, ",subset=pid"); 191 192 return 0; 193} 194 195const struct super_operations proc_sops = { 196 .alloc_inode = proc_alloc_inode, 197 .free_inode = proc_free_inode, 198 .drop_inode = generic_delete_inode, 199 .evict_inode = proc_evict_inode, 200 .statfs = simple_statfs, 201 .show_options = proc_show_options, 202}; 203 204enum {BIAS = -1U<<31}; 205 206static inline int use_pde(struct proc_dir_entry *pde) 207{ 208 return likely(atomic_inc_unless_negative(&pde->in_use)); 209} 210 211static void unuse_pde(struct proc_dir_entry *pde) 212{ 213 if (unlikely(atomic_dec_return(&pde->in_use) == BIAS)) 214 complete(pde->pde_unload_completion); 215} 216 217/* pde is locked on entry, unlocked on exit */ 218static void close_pdeo(struct proc_dir_entry *pde, struct pde_opener *pdeo) 219 __releases(&pde->pde_unload_lock) 220{ 221 /* 222 * close() (proc_reg_release()) can't delete an entry and proceed: 223 * ->release hook needs to be available at the right moment. 224 * 225 * rmmod (remove_proc_entry() et al) can't delete an entry and proceed: 226 * "struct file" needs to be available at the right moment. 227 * 228 * Therefore, first process to enter this function does ->release() and 229 * signals its completion to the other process which does nothing. 230 */ 231 if (pdeo->closing) { 232 /* somebody else is doing that, just wait */ 233 DECLARE_COMPLETION_ONSTACK(c); 234 pdeo->c = &c; 235 spin_unlock(&pde->pde_unload_lock); 236 wait_for_completion(&c); 237 } else { 238 struct file *file; 239 struct completion *c; 240 241 pdeo->closing = true; 242 spin_unlock(&pde->pde_unload_lock); 243 file = pdeo->file; 244 pde->proc_ops->proc_release(file_inode(file), file); 245 spin_lock(&pde->pde_unload_lock); 246 /* After ->release. */ 247 list_del(&pdeo->lh); 248 c = pdeo->c; 249 spin_unlock(&pde->pde_unload_lock); 250 if (unlikely(c)) 251 complete(c); 252 kmem_cache_free(pde_opener_cache, pdeo); 253 } 254} 255 256void proc_entry_rundown(struct proc_dir_entry *de) 257{ 258 DECLARE_COMPLETION_ONSTACK(c); 259 /* Wait until all existing callers into module are done. */ 260 de->pde_unload_completion = &c; 261 if (atomic_add_return(BIAS, &de->in_use) != BIAS) 262 wait_for_completion(&c); 263 264 /* ->pde_openers list can't grow from now on. */ 265 266 spin_lock(&de->pde_unload_lock); 267 while (!list_empty(&de->pde_openers)) { 268 struct pde_opener *pdeo; 269 pdeo = list_first_entry(&de->pde_openers, struct pde_opener, lh); 270 close_pdeo(de, pdeo); 271 spin_lock(&de->pde_unload_lock); 272 } 273 spin_unlock(&de->pde_unload_lock); 274} 275 276static loff_t proc_reg_llseek(struct file *file, loff_t offset, int whence) 277{ 278 struct proc_dir_entry *pde = PDE(file_inode(file)); 279 loff_t rv = -EINVAL; 280 281 if (pde_is_permanent(pde)) { 282 return pde->proc_ops->proc_lseek(file, offset, whence); 283 } else if (use_pde(pde)) { 284 rv = pde->proc_ops->proc_lseek(file, offset, whence); 285 unuse_pde(pde); 286 } 287 return rv; 288} 289 290static ssize_t proc_reg_read_iter(struct kiocb *iocb, struct iov_iter *iter) 291{ 292 struct proc_dir_entry *pde = PDE(file_inode(iocb->ki_filp)); 293 ssize_t ret; 294 295 if (pde_is_permanent(pde)) 296 return pde->proc_ops->proc_read_iter(iocb, iter); 297 298 if (!use_pde(pde)) 299 return -EIO; 300 ret = pde->proc_ops->proc_read_iter(iocb, iter); 301 unuse_pde(pde); 302 return ret; 303} 304 305static ssize_t pde_read(struct proc_dir_entry *pde, struct file *file, char __user *buf, size_t count, loff_t *ppos) 306{ 307 typeof_member(struct proc_ops, proc_read) read; 308 309 read = pde->proc_ops->proc_read; 310 if (read) 311 return read(file, buf, count, ppos); 312 return -EIO; 313} 314 315static ssize_t proc_reg_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) 316{ 317 struct proc_dir_entry *pde = PDE(file_inode(file)); 318 ssize_t rv = -EIO; 319 320 if (pde_is_permanent(pde)) { 321 return pde_read(pde, file, buf, count, ppos); 322 } else if (use_pde(pde)) { 323 rv = pde_read(pde, file, buf, count, ppos); 324 unuse_pde(pde); 325 } 326 return rv; 327} 328 329static ssize_t pde_write(struct proc_dir_entry *pde, struct file *file, const char __user *buf, size_t count, loff_t *ppos) 330{ 331 typeof_member(struct proc_ops, proc_write) write; 332 333 write = pde->proc_ops->proc_write; 334 if (write) 335 return write(file, buf, count, ppos); 336 return -EIO; 337} 338 339static ssize_t proc_reg_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) 340{ 341 struct proc_dir_entry *pde = PDE(file_inode(file)); 342 ssize_t rv = -EIO; 343 344 if (pde_is_permanent(pde)) { 345 return pde_write(pde, file, buf, count, ppos); 346 } else if (use_pde(pde)) { 347 rv = pde_write(pde, file, buf, count, ppos); 348 unuse_pde(pde); 349 } 350 return rv; 351} 352 353static __poll_t pde_poll(struct proc_dir_entry *pde, struct file *file, struct poll_table_struct *pts) 354{ 355 typeof_member(struct proc_ops, proc_poll) poll; 356 357 poll = pde->proc_ops->proc_poll; 358 if (poll) 359 return poll(file, pts); 360 return DEFAULT_POLLMASK; 361} 362 363static __poll_t proc_reg_poll(struct file *file, struct poll_table_struct *pts) 364{ 365 struct proc_dir_entry *pde = PDE(file_inode(file)); 366 __poll_t rv = DEFAULT_POLLMASK; 367 368 if (pde_is_permanent(pde)) { 369 return pde_poll(pde, file, pts); 370 } else if (use_pde(pde)) { 371 rv = pde_poll(pde, file, pts); 372 unuse_pde(pde); 373 } 374 return rv; 375} 376 377static long pde_ioctl(struct proc_dir_entry *pde, struct file *file, unsigned int cmd, unsigned long arg) 378{ 379 typeof_member(struct proc_ops, proc_ioctl) ioctl; 380 381 ioctl = pde->proc_ops->proc_ioctl; 382 if (ioctl) 383 return ioctl(file, cmd, arg); 384 return -ENOTTY; 385} 386 387static long proc_reg_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 388{ 389 struct proc_dir_entry *pde = PDE(file_inode(file)); 390 long rv = -ENOTTY; 391 392 if (pde_is_permanent(pde)) { 393 return pde_ioctl(pde, file, cmd, arg); 394 } else if (use_pde(pde)) { 395 rv = pde_ioctl(pde, file, cmd, arg); 396 unuse_pde(pde); 397 } 398 return rv; 399} 400 401#ifdef CONFIG_COMPAT 402static long pde_compat_ioctl(struct proc_dir_entry *pde, struct file *file, unsigned int cmd, unsigned long arg) 403{ 404 typeof_member(struct proc_ops, proc_compat_ioctl) compat_ioctl; 405 406 compat_ioctl = pde->proc_ops->proc_compat_ioctl; 407 if (compat_ioctl) 408 return compat_ioctl(file, cmd, arg); 409 return -ENOTTY; 410} 411 412static long proc_reg_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 413{ 414 struct proc_dir_entry *pde = PDE(file_inode(file)); 415 long rv = -ENOTTY; 416 if (pde_is_permanent(pde)) { 417 return pde_compat_ioctl(pde, file, cmd, arg); 418 } else if (use_pde(pde)) { 419 rv = pde_compat_ioctl(pde, file, cmd, arg); 420 unuse_pde(pde); 421 } 422 return rv; 423} 424#endif 425 426static int pde_mmap(struct proc_dir_entry *pde, struct file *file, struct vm_area_struct *vma) 427{ 428 typeof_member(struct proc_ops, proc_mmap) mmap; 429 430 mmap = pde->proc_ops->proc_mmap; 431 if (mmap) 432 return mmap(file, vma); 433 return -EIO; 434} 435 436static int proc_reg_mmap(struct file *file, struct vm_area_struct *vma) 437{ 438 struct proc_dir_entry *pde = PDE(file_inode(file)); 439 int rv = -EIO; 440 441 if (pde_is_permanent(pde)) { 442 return pde_mmap(pde, file, vma); 443 } else if (use_pde(pde)) { 444 rv = pde_mmap(pde, file, vma); 445 unuse_pde(pde); 446 } 447 return rv; 448} 449 450static unsigned long 451pde_get_unmapped_area(struct proc_dir_entry *pde, struct file *file, unsigned long orig_addr, 452 unsigned long len, unsigned long pgoff, 453 unsigned long flags) 454{ 455 typeof_member(struct proc_ops, proc_get_unmapped_area) get_area; 456 457 get_area = pde->proc_ops->proc_get_unmapped_area; 458#ifdef CONFIG_MMU 459 if (!get_area) 460 get_area = current->mm->get_unmapped_area; 461#endif 462 if (get_area) 463 return get_area(file, orig_addr, len, pgoff, flags); 464 return orig_addr; 465} 466 467static unsigned long 468proc_reg_get_unmapped_area(struct file *file, unsigned long orig_addr, 469 unsigned long len, unsigned long pgoff, 470 unsigned long flags) 471{ 472 struct proc_dir_entry *pde = PDE(file_inode(file)); 473 unsigned long rv = -EIO; 474 475 if (pde_is_permanent(pde)) { 476 return pde_get_unmapped_area(pde, file, orig_addr, len, pgoff, flags); 477 } else if (use_pde(pde)) { 478 rv = pde_get_unmapped_area(pde, file, orig_addr, len, pgoff, flags); 479 unuse_pde(pde); 480 } 481 return rv; 482} 483 484static int proc_reg_open(struct inode *inode, struct file *file) 485{ 486 struct proc_dir_entry *pde = PDE(inode); 487 int rv = 0; 488 typeof_member(struct proc_ops, proc_open) open; 489 typeof_member(struct proc_ops, proc_release) release; 490 struct pde_opener *pdeo; 491 492 if (pde_is_permanent(pde)) { 493 open = pde->proc_ops->proc_open; 494 if (open) 495 rv = open(inode, file); 496 return rv; 497 } 498 499 /* 500 * Ensure that 501 * 1) PDE's ->release hook will be called no matter what 502 * either normally by close()/->release, or forcefully by 503 * rmmod/remove_proc_entry. 504 * 505 * 2) rmmod isn't blocked by opening file in /proc and sitting on 506 * the descriptor (including "rmmod foo </proc/foo" scenario). 507 * 508 * Save every "struct file" with custom ->release hook. 509 */ 510 if (!use_pde(pde)) 511 return -ENOENT; 512 513 release = pde->proc_ops->proc_release; 514 if (release) { 515 pdeo = kmem_cache_alloc(pde_opener_cache, GFP_KERNEL); 516 if (!pdeo) { 517 rv = -ENOMEM; 518 goto out_unuse; 519 } 520 } 521 522 open = pde->proc_ops->proc_open; 523 if (open) 524 rv = open(inode, file); 525 526 if (release) { 527 if (rv == 0) { 528 /* To know what to release. */ 529 pdeo->file = file; 530 pdeo->closing = false; 531 pdeo->c = NULL; 532 spin_lock(&pde->pde_unload_lock); 533 list_add(&pdeo->lh, &pde->pde_openers); 534 spin_unlock(&pde->pde_unload_lock); 535 } else 536 kmem_cache_free(pde_opener_cache, pdeo); 537 } 538 539out_unuse: 540 unuse_pde(pde); 541 return rv; 542} 543 544static int proc_reg_release(struct inode *inode, struct file *file) 545{ 546 struct proc_dir_entry *pde = PDE(inode); 547 struct pde_opener *pdeo; 548 549 if (pde_is_permanent(pde)) { 550 typeof_member(struct proc_ops, proc_release) release; 551 552 release = pde->proc_ops->proc_release; 553 if (release) { 554 return release(inode, file); 555 } 556 return 0; 557 } 558 559 spin_lock(&pde->pde_unload_lock); 560 list_for_each_entry(pdeo, &pde->pde_openers, lh) { 561 if (pdeo->file == file) { 562 close_pdeo(pde, pdeo); 563 return 0; 564 } 565 } 566 spin_unlock(&pde->pde_unload_lock); 567 return 0; 568} 569 570static const struct file_operations proc_reg_file_ops = { 571 .llseek = proc_reg_llseek, 572 .read = proc_reg_read, 573 .write = proc_reg_write, 574 .poll = proc_reg_poll, 575 .unlocked_ioctl = proc_reg_unlocked_ioctl, 576 .mmap = proc_reg_mmap, 577 .get_unmapped_area = proc_reg_get_unmapped_area, 578 .open = proc_reg_open, 579 .release = proc_reg_release, 580}; 581 582static const struct file_operations proc_iter_file_ops = { 583 .llseek = proc_reg_llseek, 584 .read_iter = proc_reg_read_iter, 585 .write = proc_reg_write, 586 .splice_read = generic_file_splice_read, 587 .poll = proc_reg_poll, 588 .unlocked_ioctl = proc_reg_unlocked_ioctl, 589 .mmap = proc_reg_mmap, 590 .get_unmapped_area = proc_reg_get_unmapped_area, 591 .open = proc_reg_open, 592 .release = proc_reg_release, 593}; 594 595#ifdef CONFIG_COMPAT 596static const struct file_operations proc_reg_file_ops_compat = { 597 .llseek = proc_reg_llseek, 598 .read = proc_reg_read, 599 .write = proc_reg_write, 600 .poll = proc_reg_poll, 601 .unlocked_ioctl = proc_reg_unlocked_ioctl, 602 .compat_ioctl = proc_reg_compat_ioctl, 603 .mmap = proc_reg_mmap, 604 .get_unmapped_area = proc_reg_get_unmapped_area, 605 .open = proc_reg_open, 606 .release = proc_reg_release, 607}; 608 609static const struct file_operations proc_iter_file_ops_compat = { 610 .llseek = proc_reg_llseek, 611 .read_iter = proc_reg_read_iter, 612 .splice_read = generic_file_splice_read, 613 .write = proc_reg_write, 614 .poll = proc_reg_poll, 615 .unlocked_ioctl = proc_reg_unlocked_ioctl, 616 .compat_ioctl = proc_reg_compat_ioctl, 617 .mmap = proc_reg_mmap, 618 .get_unmapped_area = proc_reg_get_unmapped_area, 619 .open = proc_reg_open, 620 .release = proc_reg_release, 621}; 622#endif 623 624static void proc_put_link(void *p) 625{ 626 unuse_pde(p); 627} 628 629static const char *proc_get_link(struct dentry *dentry, 630 struct inode *inode, 631 struct delayed_call *done) 632{ 633 struct proc_dir_entry *pde = PDE(inode); 634 if (!use_pde(pde)) 635 return ERR_PTR(-EINVAL); 636 set_delayed_call(done, proc_put_link, pde); 637 return pde->data; 638} 639 640const struct inode_operations proc_link_inode_operations = { 641 .get_link = proc_get_link, 642}; 643 644struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) 645{ 646 struct inode *inode = new_inode(sb); 647 648 if (!inode) { 649 pde_put(de); 650 return NULL; 651 } 652 653 inode->i_private = de->data; 654 inode->i_ino = de->low_ino; 655 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode); 656 PROC_I(inode)->pde = de; 657 if (is_empty_pde(de)) { 658 make_empty_dir_inode(inode); 659 return inode; 660 } 661 662 if (de->mode) { 663 inode->i_mode = de->mode; 664 inode->i_uid = de->uid; 665 inode->i_gid = de->gid; 666 } 667 if (de->size) 668 inode->i_size = de->size; 669 if (de->nlink) 670 set_nlink(inode, de->nlink); 671 672 if (S_ISREG(inode->i_mode)) { 673 inode->i_op = de->proc_iops; 674 if (de->proc_ops->proc_read_iter) 675 inode->i_fop = &proc_iter_file_ops; 676 else 677 inode->i_fop = &proc_reg_file_ops; 678#ifdef CONFIG_COMPAT 679 if (de->proc_ops->proc_compat_ioctl) { 680 if (de->proc_ops->proc_read_iter) 681 inode->i_fop = &proc_iter_file_ops_compat; 682 else 683 inode->i_fop = &proc_reg_file_ops_compat; 684 } 685#endif 686 } else if (S_ISDIR(inode->i_mode)) { 687 inode->i_op = de->proc_iops; 688 inode->i_fop = de->proc_dir_ops; 689 } else if (S_ISLNK(inode->i_mode)) { 690 inode->i_op = de->proc_iops; 691 inode->i_fop = NULL; 692 } else { 693 BUG(); 694 } 695 return inode; 696}