1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2021, Microsoft Corporation. 4 * 5 * Authors: 6 * Beau Belgrave <beaub@linux.microsoft.com> 7 */ 8 9 #include <linux/bitmap.h> 10 #include <linux/cdev.h> 11 #include <linux/hashtable.h> 12 #include <linux/list.h> 13 #include <linux/io.h> 14 #include <linux/uio.h> 15 #include <linux/ioctl.h> 16 #include <linux/jhash.h> 17 #include <linux/refcount.h> 18 #include <linux/trace_events.h> 19 #include <linux/tracefs.h> 20 #include <linux/types.h> 21 #include <linux/uaccess.h> 22 #include <linux/highmem.h> 23 #include <linux/init.h> 24 #include <linux/user_events.h> 25 #include "trace_dynevent.h" 26 #include "trace_output.h" 27 #include "trace.h" 28 29 #define USER_EVENTS_PREFIX_LEN (sizeof(USER_EVENTS_PREFIX)-1) 30 31 #define FIELD_DEPTH_TYPE 0 32 #define FIELD_DEPTH_NAME 1 33 #define FIELD_DEPTH_SIZE 2 34 35 /* Limit how long of an event name plus args within the subsystem. */ 36 #define MAX_EVENT_DESC 512 37 #define EVENT_NAME(user_event) ((user_event)->reg_name) 38 #define EVENT_TP_NAME(user_event) ((user_event)->tracepoint.name) 39 #define MAX_FIELD_ARRAY_SIZE 1024 40 41 /* 42 * Internal bits (kernel side only) to keep track of connected probes: 43 * These are used when status is requested in text form about an event. These 44 * bits are compared against an internal byte on the event to determine which 45 * probes to print out to the user. 46 * 47 * These do not reflect the mapped bytes between the user and kernel space. 48 */ 49 #define EVENT_STATUS_FTRACE BIT(0) 50 #define EVENT_STATUS_PERF BIT(1) 51 #define EVENT_STATUS_OTHER BIT(7) 52 53 /* 54 * Stores the system name, tables, and locks for a group of events. This 55 * allows isolation for events by various means. 56 */ 57 struct user_event_group { 58 char *system_name; 59 char *system_multi_name; 60 struct hlist_node node; 61 struct mutex reg_mutex; 62 DECLARE_HASHTABLE(register_table, 8); 63 /* ID that moves forward within the group for multi-event names */ 64 u64 multi_id; 65 }; 66 67 /* Group for init_user_ns mapping, top-most group */ 68 static struct user_event_group *init_group; 69 70 /* Max allowed events for the whole system */ 71 static unsigned int max_user_events = 32768; 72 73 /* Current number of events on the whole system */ 74 static unsigned int current_user_events; 75 76 /* 77 * Stores per-event properties, as users register events 78 * within a file a user_event might be created if it does not 79 * already exist. These are globally used and their lifetime 80 * is tied to the refcnt member. These cannot go away until the 81 * refcnt reaches one. 82 */ 83 struct user_event { 84 struct user_event_group *group; 85 char *reg_name; 86 struct tracepoint tracepoint; 87 struct trace_event_call call; 88 struct trace_event_class class; 89 struct dyn_event devent; 90 struct hlist_node node; 91 struct list_head fields; 92 struct list_head validators; 93 struct work_struct put_work; 94 refcount_t refcnt; 95 int min_size; 96 int reg_flags; 97 char status; 98 }; 99 100 /* 101 * Stores per-mm/event properties that enable an address to be 102 * updated properly for each task. As tasks are forked, we use 103 * these to track enablement sites that are tied to an event. 104 */ 105 struct user_event_enabler { 106 struct list_head mm_enablers_link; 107 struct user_event *event; 108 unsigned long addr; 109 110 /* Track enable bit, flags, etc. Aligned for bitops. */ 111 unsigned long values; 112 113 /* Defer the event put and enabler free past an RCU grace period. */ 114 struct rcu_work put_rwork; 115 }; 116 117 /* Bits 0-5 are for the bit to update upon enable/disable (0-63 allowed) */ 118 #define ENABLE_VAL_BIT_MASK 0x3F 119 120 /* Bit 6 is for faulting status of enablement */ 121 #define ENABLE_VAL_FAULTING_BIT 6 122 123 /* Bit 7 is for freeing status of enablement */ 124 #define ENABLE_VAL_FREEING_BIT 7 125 126 /* Bit 8 is for marking 32-bit on 64-bit */ 127 #define ENABLE_VAL_32_ON_64_BIT 8 128 129 #define ENABLE_VAL_COMPAT_MASK (1 << ENABLE_VAL_32_ON_64_BIT) 130 131 /* Only duplicate the bit and compat values */ 132 #define ENABLE_VAL_DUP_MASK (ENABLE_VAL_BIT_MASK | ENABLE_VAL_COMPAT_MASK) 133 134 #define ENABLE_BITOPS(e) (&(e)->values) 135 136 #define ENABLE_BIT(e) ((int)((e)->values & ENABLE_VAL_BIT_MASK)) 137 138 #define EVENT_MULTI_FORMAT(f) ((f) & USER_EVENT_REG_MULTI_FORMAT) 139 140 /* Used for asynchronous faulting in of pages */ 141 struct user_event_enabler_fault { 142 struct work_struct work; 143 struct user_event_mm *mm; 144 struct user_event_enabler *enabler; 145 int attempt; 146 }; 147 148 static struct kmem_cache *fault_cache; 149 150 /* Global list of memory descriptors using user_events */ 151 static LIST_HEAD(user_event_mms); 152 static DEFINE_SPINLOCK(user_event_mms_lock); 153 154 /* 155 * Stores per-file events references, as users register events 156 * within a file this structure is modified and freed via RCU. 157 * The lifetime of this struct is tied to the lifetime of the file. 158 * These are not shared and only accessible by the file that created it. 159 */ 160 struct user_event_refs { 161 struct rcu_head rcu; 162 int count; 163 struct user_event *events[]; 164 }; 165 166 struct user_event_file_info { 167 struct user_event_group *group; 168 struct user_event_refs *refs; 169 }; 170 171 #define VALIDATOR_ENSURE_NULL (1 << 0) 172 #define VALIDATOR_REL (1 << 1) 173 174 struct user_event_validator { 175 struct list_head user_event_link; 176 int offset; 177 int flags; 178 }; 179 180 static inline void align_addr_bit(unsigned long *addr, int *bit, 181 unsigned long *flags) 182 { 183 if (IS_ALIGNED(*addr, sizeof(long))) { 184 #ifdef __BIG_ENDIAN 185 /* 32 bit on BE 64 bit requires a 32 bit offset when aligned. */ 186 if (test_bit(ENABLE_VAL_32_ON_64_BIT, flags)) 187 *bit += 32; 188 #endif 189 return; 190 } 191 192 *addr = ALIGN_DOWN(*addr, sizeof(long)); 193 194 /* 195 * We only support 32 and 64 bit values. The only time we need 196 * to align is a 32 bit value on a 64 bit kernel, which on LE 197 * is always 32 bits, and on BE requires no change when unaligned. 198 */ 199 #ifdef __LITTLE_ENDIAN 200 *bit += 32; 201 #endif 202 } 203 204 typedef void (*user_event_func_t) (struct user_event *user, struct iov_iter *i, 205 void *tpdata, bool *faulted); 206 207 static int user_event_parse(struct user_event_group *group, char *name, 208 char *args, char *flags, 209 struct user_event **newuser, int reg_flags); 210 211 static struct user_event_mm *user_event_mm_get(struct user_event_mm *mm); 212 static struct user_event_mm *user_event_mm_get_all(struct user_event *user); 213 static void user_event_mm_put(struct user_event_mm *mm); 214 static int destroy_user_event(struct user_event *user); 215 static bool user_fields_match(struct user_event *user, int argc, 216 const char **argv); 217 218 static u32 user_event_key(char *name) 219 { 220 return jhash(name, strlen(name), 0); 221 } 222 223 static bool user_event_capable(u16 reg_flags) 224 { 225 /* Persistent events require CAP_PERFMON / CAP_SYS_ADMIN */ 226 if (reg_flags & USER_EVENT_REG_PERSIST) { 227 if (!perfmon_capable()) 228 return false; 229 } 230 231 return true; 232 } 233 234 static struct user_event *user_event_get(struct user_event *user) 235 { 236 refcount_inc(&user->refcnt); 237 238 return user; 239 } 240 241 static void delayed_destroy_user_event(struct work_struct *work) 242 { 243 struct user_event *user = container_of( 244 work, struct user_event, put_work); 245 246 mutex_lock(&event_mutex); 247 248 if (!refcount_dec_and_test(&user->refcnt)) 249 goto out; 250 251 if (destroy_user_event(user)) { 252 /* 253 * The only reason this would fail here is if we cannot 254 * update the visibility of the event. In this case the 255 * event stays in the hashtable, waiting for someone to 256 * attempt to delete it later. 257 */ 258 pr_warn("user_events: Unable to delete event\n"); 259 refcount_set(&user->refcnt, 1); 260 } 261 out: 262 mutex_unlock(&event_mutex); 263 } 264 265 static void user_event_put(struct user_event *user, bool locked) 266 { 267 bool delete; 268 269 if (unlikely(!user)) 270 return; 271 272 /* 273 * When the event is not enabled for auto-delete there will always 274 * be at least 1 reference to the event. During the event creation 275 * we initially set the refcnt to 2 to achieve this. In those cases 276 * the caller must acquire event_mutex and after decrement check if 277 * the refcnt is 1, meaning this is the last reference. When auto 278 * delete is enabled, there will only be 1 ref, IE: refcnt will be 279 * only set to 1 during creation to allow the below checks to go 280 * through upon the last put. The last put must always be done with 281 * the event mutex held. 282 */ 283 if (!locked) { 284 lockdep_assert_not_held(&event_mutex); 285 delete = refcount_dec_and_mutex_lock(&user->refcnt, &event_mutex); 286 } else { 287 lockdep_assert_held(&event_mutex); 288 delete = refcount_dec_and_test(&user->refcnt); 289 } 290 291 if (!delete) 292 return; 293 294 /* 295 * We now have the event_mutex in all cases, which ensures that 296 * no new references will be taken until event_mutex is released. 297 * New references come through find_user_event(), which requires 298 * the event_mutex to be held. 299 */ 300 301 if (user->reg_flags & USER_EVENT_REG_PERSIST) { 302 /* We should not get here when persist flag is set */ 303 pr_alert("BUG: Auto-delete engaged on persistent event\n"); 304 goto out; 305 } 306 307 /* 308 * Unfortunately we have to attempt the actual destroy in a work 309 * queue. This is because not all cases handle a trace_event_call 310 * being removed within the class->reg() operation for unregister. 311 */ 312 INIT_WORK(&user->put_work, delayed_destroy_user_event); 313 314 /* 315 * Since the event is still in the hashtable, we have to re-inc 316 * the ref count to 1. This count will be decremented and checked 317 * in the work queue to ensure it's still the last ref. This is 318 * needed because a user-process could register the same event in 319 * between the time of event_mutex release and the work queue 320 * running the delayed destroy. If we removed the item now from 321 * the hashtable, this would result in a timing window where a 322 * user process would fail a register because the trace_event_call 323 * register would fail in the tracing layers. 324 */ 325 refcount_set(&user->refcnt, 1); 326 327 if (WARN_ON_ONCE(!schedule_work(&user->put_work))) { 328 /* 329 * If we fail we must wait for an admin to attempt delete or 330 * another register/close of the event, whichever is first. 331 */ 332 pr_warn("user_events: Unable to queue delayed destroy\n"); 333 } 334 out: 335 /* Ensure if we didn't have event_mutex before we unlock it */ 336 if (!locked) 337 mutex_unlock(&event_mutex); 338 } 339 340 static void user_event_group_destroy(struct user_event_group *group) 341 { 342 kfree(group->system_name); 343 kfree(group->system_multi_name); 344 kfree(group); 345 } 346 347 static char *user_event_group_system_name(void) 348 { 349 char *system_name; 350 int len = sizeof(USER_EVENTS_SYSTEM) + 1; 351 352 system_name = kmalloc(len, GFP_KERNEL); 353 354 if (!system_name) 355 return NULL; 356 357 snprintf(system_name, len, "%s", USER_EVENTS_SYSTEM); 358 359 return system_name; 360 } 361 362 static char *user_event_group_system_multi_name(void) 363 { 364 return kstrdup(USER_EVENTS_MULTI_SYSTEM, GFP_KERNEL); 365 } 366 367 static struct user_event_group *current_user_event_group(void) 368 { 369 return init_group; 370 } 371 372 static struct user_event_group *user_event_group_create(void) 373 { 374 struct user_event_group *group; 375 376 group = kzalloc_obj(*group); 377 378 if (!group) 379 return NULL; 380 381 group->system_name = user_event_group_system_name(); 382 383 if (!group->system_name) 384 goto error; 385 386 group->system_multi_name = user_event_group_system_multi_name(); 387 388 if (!group->system_multi_name) 389 goto error; 390 391 mutex_init(&group->reg_mutex); 392 hash_init(group->register_table); 393 394 return group; 395 error: 396 if (group) 397 user_event_group_destroy(group); 398 399 return NULL; 400 }; 401 402 static void delayed_user_event_enabler_put(struct work_struct *work) 403 { 404 struct user_event_enabler *enabler = container_of(to_rcu_work(work), 405 struct user_event_enabler, put_rwork); 406 407 /* No longer tracking the event via the enabler */ 408 user_event_put(enabler->event, false); 409 410 /* Run from queue_rcu_work(), the RCU grace period has elapsed */ 411 kfree(enabler); 412 } 413 414 static void user_event_enabler_destroy(struct user_event_enabler *enabler) 415 { 416 list_del_rcu(&enabler->mm_enablers_link); 417 418 /* 419 * The enabler is removed from an RCU-traversed list 420 * (user_event_mm_dup() walks mm->enablers under rcu_read_lock() only), 421 * and readers there dereference enabler->event and take a new ref on 422 * it. Both the put of that event reference and the free of the enabler 423 * therefore have to wait for a grace period so no reader can be looking 424 * at the enabler or racing the last put of its event. 425 * 426 * The put itself must not run in RCU context: when it drops the last 427 * reference user_event_put() takes event_mutex, which cannot be taken 428 * from a softirq/RCU callback. Defer both to a work item scheduled 429 * after a grace period via queue_rcu_work(). 430 */ 431 INIT_RCU_WORK(&enabler->put_rwork, delayed_user_event_enabler_put); 432 queue_rcu_work(system_percpu_wq, &enabler->put_rwork); 433 } 434 435 static int user_event_mm_fault_in(struct user_event_mm *mm, unsigned long uaddr, 436 int attempt) 437 { 438 bool unlocked; 439 int ret; 440 441 /* 442 * Normally this is low, ensure that it cannot be taken advantage of by 443 * bad user processes to cause excessive looping. 444 */ 445 if (attempt > 10) 446 return -EFAULT; 447 448 mmap_read_lock(mm->mm); 449 450 /* Ensure MM has tasks, cannot use after exit_mm() */ 451 if (refcount_read(&mm->tasks) == 0) { 452 ret = -ENOENT; 453 goto out; 454 } 455 456 ret = fixup_user_fault(mm->mm, uaddr, FAULT_FLAG_WRITE | FAULT_FLAG_REMOTE, 457 &unlocked); 458 out: 459 mmap_read_unlock(mm->mm); 460 461 return ret; 462 } 463 464 static int user_event_enabler_write(struct user_event_mm *mm, 465 struct user_event_enabler *enabler, 466 bool fixup_fault, int *attempt); 467 468 static void user_event_enabler_fault_fixup(struct work_struct *work) 469 { 470 struct user_event_enabler_fault *fault = container_of( 471 work, struct user_event_enabler_fault, work); 472 struct user_event_enabler *enabler = fault->enabler; 473 struct user_event_mm *mm = fault->mm; 474 unsigned long uaddr = enabler->addr; 475 int attempt = fault->attempt; 476 int ret; 477 478 ret = user_event_mm_fault_in(mm, uaddr, attempt); 479 480 if (ret && ret != -ENOENT) { 481 struct user_event *user = enabler->event; 482 483 pr_warn("user_events: Fault for mm: 0x%p @ 0x%llx event: %s\n", 484 mm->mm, (unsigned long long)uaddr, EVENT_NAME(user)); 485 } 486 487 /* Prevent state changes from racing */ 488 mutex_lock(&event_mutex); 489 490 /* User asked for enabler to be removed during fault */ 491 if (test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler))) { 492 user_event_enabler_destroy(enabler); 493 goto out; 494 } 495 496 /* 497 * If we managed to get the page, re-issue the write. We do not 498 * want to get into a possible infinite loop, which is why we only 499 * attempt again directly if the page came in. If we couldn't get 500 * the page here, then we will try again the next time the event is 501 * enabled/disabled. 502 */ 503 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); 504 505 if (!ret) { 506 mmap_read_lock(mm->mm); 507 user_event_enabler_write(mm, enabler, true, &attempt); 508 mmap_read_unlock(mm->mm); 509 } 510 out: 511 mutex_unlock(&event_mutex); 512 513 /* In all cases we no longer need the mm or fault */ 514 user_event_mm_put(mm); 515 kmem_cache_free(fault_cache, fault); 516 } 517 518 static bool user_event_enabler_queue_fault(struct user_event_mm *mm, 519 struct user_event_enabler *enabler, 520 int attempt) 521 { 522 struct user_event_enabler_fault *fault; 523 524 fault = kmem_cache_zalloc(fault_cache, GFP_NOWAIT); 525 526 if (!fault) 527 return false; 528 529 INIT_WORK(&fault->work, user_event_enabler_fault_fixup); 530 fault->mm = user_event_mm_get(mm); 531 fault->enabler = enabler; 532 fault->attempt = attempt; 533 534 /* Don't try to queue in again while we have a pending fault */ 535 set_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); 536 537 if (!schedule_work(&fault->work)) { 538 /* Allow another attempt later */ 539 clear_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)); 540 541 user_event_mm_put(mm); 542 kmem_cache_free(fault_cache, fault); 543 544 return false; 545 } 546 547 return true; 548 } 549 550 static int user_event_enabler_write(struct user_event_mm *mm, 551 struct user_event_enabler *enabler, 552 bool fixup_fault, int *attempt) 553 { 554 unsigned long uaddr = enabler->addr; 555 unsigned long *ptr; 556 struct page *page; 557 void *kaddr; 558 int bit = ENABLE_BIT(enabler); 559 int ret; 560 561 lockdep_assert_held(&event_mutex); 562 mmap_assert_locked(mm->mm); 563 564 *attempt += 1; 565 566 /* Ensure MM has tasks, cannot use after exit_mm() */ 567 if (refcount_read(&mm->tasks) == 0) 568 return -ENOENT; 569 570 if (unlikely(test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler)) || 571 test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)))) 572 return -EBUSY; 573 574 align_addr_bit(&uaddr, &bit, ENABLE_BITOPS(enabler)); 575 576 ret = pin_user_pages_remote(mm->mm, uaddr, 1, FOLL_WRITE | FOLL_NOFAULT, 577 &page, NULL); 578 579 if (unlikely(ret <= 0)) { 580 if (!fixup_fault) 581 return -EFAULT; 582 583 if (!user_event_enabler_queue_fault(mm, enabler, *attempt)) 584 pr_warn("user_events: Unable to queue fault handler\n"); 585 586 return -EFAULT; 587 } 588 589 kaddr = kmap_local_page(page); 590 ptr = kaddr + (uaddr & ~PAGE_MASK); 591 592 /* Update bit atomically, user tracers must be atomic as well */ 593 if (enabler->event && enabler->event->status) 594 set_bit(bit, ptr); 595 else 596 clear_bit(bit, ptr); 597 598 kunmap_local(kaddr); 599 unpin_user_pages_dirty_lock(&page, 1, true); 600 601 return 0; 602 } 603 604 static bool user_event_enabler_exists(struct user_event_mm *mm, 605 unsigned long uaddr, unsigned char bit) 606 { 607 struct user_event_enabler *enabler; 608 609 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { 610 if (enabler->addr == uaddr && ENABLE_BIT(enabler) == bit) 611 return true; 612 } 613 614 return false; 615 } 616 617 static void user_event_enabler_update(struct user_event *user) 618 { 619 struct user_event_enabler *enabler; 620 struct user_event_mm *next; 621 struct user_event_mm *mm; 622 int attempt; 623 624 lockdep_assert_held(&event_mutex); 625 626 /* 627 * We need to build a one-shot list of all the mms that have an 628 * enabler for the user_event passed in. This list is only valid 629 * while holding the event_mutex. The only reason for this is due 630 * to the global mm list being RCU protected and we use methods 631 * which can wait (mmap_read_lock and pin_user_pages_remote). 632 * 633 * NOTE: user_event_mm_get_all() increments the ref count of each 634 * mm that is added to the list to prevent removal timing windows. 635 * We must always put each mm after they are used, which may wait. 636 */ 637 mm = user_event_mm_get_all(user); 638 639 while (mm) { 640 next = mm->next; 641 mmap_read_lock(mm->mm); 642 643 list_for_each_entry(enabler, &mm->enablers, mm_enablers_link) { 644 if (enabler->event == user) { 645 attempt = 0; 646 user_event_enabler_write(mm, enabler, true, &attempt); 647 } 648 } 649 650 mmap_read_unlock(mm->mm); 651 user_event_mm_put(mm); 652 mm = next; 653 } 654 } 655 656 static bool user_event_enabler_dup(struct user_event_enabler *orig, 657 struct user_event_mm *mm) 658 { 659 struct user_event_enabler *enabler; 660 661 /* Skip pending frees */ 662 if (unlikely(test_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(orig)))) 663 return true; 664 665 enabler = kzalloc_obj(*enabler, GFP_NOWAIT | __GFP_ACCOUNT); 666 667 if (!enabler) 668 return false; 669 670 enabler->event = user_event_get(orig->event); 671 enabler->addr = orig->addr; 672 673 /* Only dup part of value (ignore future flags, etc) */ 674 enabler->values = orig->values & ENABLE_VAL_DUP_MASK; 675 676 /* Enablers not exposed yet, RCU not required */ 677 list_add(&enabler->mm_enablers_link, &mm->enablers); 678 679 return true; 680 } 681 682 static struct user_event_mm *user_event_mm_get(struct user_event_mm *mm) 683 { 684 refcount_inc(&mm->refcnt); 685 686 return mm; 687 } 688 689 static struct user_event_mm *user_event_mm_get_all(struct user_event *user) 690 { 691 struct user_event_mm *found = NULL; 692 struct user_event_enabler *enabler; 693 struct user_event_mm *mm; 694 695 /* 696 * We use the mm->next field to build a one-shot list from the global 697 * RCU protected list. To build this list the event_mutex must be held. 698 * This lets us build a list without requiring allocs that could fail 699 * when user based events are most wanted for diagnostics. 700 */ 701 lockdep_assert_held(&event_mutex); 702 703 /* 704 * We do not want to block fork/exec while enablements are being 705 * updated, so we use RCU to walk the current tasks that have used 706 * user_events ABI for 1 or more events. Each enabler found in each 707 * task that matches the event being updated has a write to reflect 708 * the kernel state back into the process. Waits/faults must not occur 709 * during this. So we scan the list under RCU for all the mm that have 710 * the event within it. This is needed because mm_read_lock() can wait. 711 * Each user mm returned has a ref inc to handle remove RCU races. 712 */ 713 rcu_read_lock(); 714 715 list_for_each_entry_rcu(mm, &user_event_mms, mms_link) { 716 list_for_each_entry_rcu(enabler, &mm->enablers, mm_enablers_link) { 717 if (enabler->event == user) { 718 mm->next = found; 719 found = user_event_mm_get(mm); 720 break; 721 } 722 } 723 } 724 725 rcu_read_unlock(); 726 727 return found; 728 } 729 730 static struct user_event_mm *user_event_mm_alloc(struct task_struct *t) 731 { 732 struct user_event_mm *user_mm; 733 734 user_mm = kzalloc_obj(*user_mm, GFP_KERNEL_ACCOUNT); 735 736 if (!user_mm) 737 return NULL; 738 739 user_mm->mm = t->mm; 740 INIT_LIST_HEAD(&user_mm->enablers); 741 refcount_set(&user_mm->refcnt, 1); 742 refcount_set(&user_mm->tasks, 1); 743 744 /* 745 * The lifetime of the memory descriptor can slightly outlast 746 * the task lifetime if a ref to the user_event_mm is taken 747 * between list_del_rcu() and call_rcu(). Therefore we need 748 * to take a reference to it to ensure it can live this long 749 * under this corner case. This can also occur in clones that 750 * outlast the parent. 751 */ 752 mmgrab(user_mm->mm); 753 754 return user_mm; 755 } 756 757 static void user_event_mm_attach(struct user_event_mm *user_mm, struct task_struct *t) 758 { 759 unsigned long flags; 760 761 spin_lock_irqsave(&user_event_mms_lock, flags); 762 list_add_rcu(&user_mm->mms_link, &user_event_mms); 763 spin_unlock_irqrestore(&user_event_mms_lock, flags); 764 765 t->user_event_mm = user_mm; 766 } 767 768 static struct user_event_mm *current_user_event_mm(void) 769 { 770 struct user_event_mm *user_mm = current->user_event_mm; 771 772 if (user_mm) 773 goto inc; 774 775 user_mm = user_event_mm_alloc(current); 776 777 if (!user_mm) 778 goto error; 779 780 user_event_mm_attach(user_mm, current); 781 inc: 782 refcount_inc(&user_mm->refcnt); 783 error: 784 return user_mm; 785 } 786 787 static void user_event_mm_destroy(struct user_event_mm *mm) 788 { 789 struct user_event_enabler *enabler, *next; 790 791 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) 792 user_event_enabler_destroy(enabler); 793 794 mmdrop(mm->mm); 795 kfree(mm); 796 } 797 798 static void user_event_mm_put(struct user_event_mm *mm) 799 { 800 if (mm && refcount_dec_and_test(&mm->refcnt)) 801 user_event_mm_destroy(mm); 802 } 803 804 static void delayed_user_event_mm_put(struct work_struct *work) 805 { 806 struct user_event_mm *mm; 807 808 mm = container_of(to_rcu_work(work), struct user_event_mm, put_rwork); 809 user_event_mm_put(mm); 810 } 811 812 void user_event_mm_remove(struct task_struct *t) 813 { 814 struct user_event_mm *mm; 815 unsigned long flags; 816 817 might_sleep(); 818 819 mm = t->user_event_mm; 820 t->user_event_mm = NULL; 821 822 /* Clone will increment the tasks, only remove if last clone */ 823 if (!refcount_dec_and_test(&mm->tasks)) 824 return; 825 826 /* Remove the mm from the list, so it can no longer be enabled */ 827 spin_lock_irqsave(&user_event_mms_lock, flags); 828 list_del_rcu(&mm->mms_link); 829 spin_unlock_irqrestore(&user_event_mms_lock, flags); 830 831 /* 832 * We need to wait for currently occurring writes to stop within 833 * the mm. This is required since exit_mm() snaps the current rss 834 * stats and clears them. On the final mmdrop(), check_mm() will 835 * report a bug if these increment. 836 * 837 * All writes/pins are done under mmap_read lock, take the write 838 * lock to ensure in-progress faults have completed. Faults that 839 * are pending but yet to run will check the task count and skip 840 * the fault since the mm is going away. 841 */ 842 mmap_write_lock(mm->mm); 843 mmap_write_unlock(mm->mm); 844 845 /* 846 * Put for mm must be done after RCU delay to handle new refs in 847 * between the list_del_rcu() and now. This ensures any get refs 848 * during rcu_read_lock() are accounted for during list removal. 849 * 850 * CPU A | CPU B 851 * --------------------------------------------------------------- 852 * user_event_mm_remove() | rcu_read_lock(); 853 * list_del_rcu() | list_for_each_entry_rcu(); 854 * call_rcu() | refcount_inc(); 855 * . | rcu_read_unlock(); 856 * schedule_work() | . 857 * user_event_mm_put() | . 858 * 859 * mmdrop() cannot be called in the softirq context of call_rcu() 860 * so we use a work queue after call_rcu() to run within. 861 */ 862 INIT_RCU_WORK(&mm->put_rwork, delayed_user_event_mm_put); 863 queue_rcu_work(system_percpu_wq, &mm->put_rwork); 864 } 865 866 void user_event_mm_dup(struct task_struct *t, struct user_event_mm *old_mm) 867 { 868 struct user_event_mm *mm = user_event_mm_alloc(t); 869 struct user_event_enabler *enabler; 870 871 /* On failure, do not free parent's copy */ 872 t->user_event_mm = NULL; 873 874 if (!mm) 875 return; 876 877 rcu_read_lock(); 878 879 list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) { 880 if (!user_event_enabler_dup(enabler, mm)) 881 goto error; 882 } 883 884 rcu_read_unlock(); 885 886 user_event_mm_attach(mm, t); 887 return; 888 error: 889 rcu_read_unlock(); 890 user_event_mm_destroy(mm); 891 } 892 893 static bool current_user_event_enabler_exists(unsigned long uaddr, 894 unsigned char bit) 895 { 896 struct user_event_mm *user_mm = current_user_event_mm(); 897 bool exists; 898 899 if (!user_mm) 900 return false; 901 902 exists = user_event_enabler_exists(user_mm, uaddr, bit); 903 904 user_event_mm_put(user_mm); 905 906 return exists; 907 } 908 909 static struct user_event_enabler 910 *user_event_enabler_create(struct user_reg *reg, struct user_event *user, 911 int *write_result) 912 { 913 struct user_event_enabler *enabler; 914 struct user_event_mm *user_mm; 915 unsigned long uaddr = (unsigned long)reg->enable_addr; 916 int attempt = 0; 917 918 user_mm = current_user_event_mm(); 919 920 if (!user_mm) 921 return NULL; 922 923 enabler = kzalloc_obj(*enabler, GFP_KERNEL_ACCOUNT); 924 925 if (!enabler) 926 goto out; 927 928 enabler->event = user; 929 enabler->addr = uaddr; 930 enabler->values = reg->enable_bit; 931 932 #if BITS_PER_LONG >= 64 933 if (reg->enable_size == 4) 934 set_bit(ENABLE_VAL_32_ON_64_BIT, ENABLE_BITOPS(enabler)); 935 #endif 936 937 retry: 938 /* Prevents state changes from racing with new enablers */ 939 mutex_lock(&event_mutex); 940 941 /* Attempt to reflect the current state within the process */ 942 mmap_read_lock(user_mm->mm); 943 *write_result = user_event_enabler_write(user_mm, enabler, false, 944 &attempt); 945 mmap_read_unlock(user_mm->mm); 946 947 /* 948 * If the write works, then we will track the enabler. A ref to the 949 * underlying user_event is held by the enabler to prevent it going 950 * away while the enabler is still in use by a process. The ref is 951 * removed when the enabler is destroyed. This means a event cannot 952 * be forcefully deleted from the system until all tasks using it 953 * exit or run exec(), which includes forks and clones. 954 */ 955 if (!*write_result) { 956 user_event_get(user); 957 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers); 958 } 959 960 mutex_unlock(&event_mutex); 961 962 if (*write_result) { 963 /* Attempt to fault-in and retry if it worked */ 964 if (!user_event_mm_fault_in(user_mm, uaddr, attempt)) 965 goto retry; 966 967 kfree(enabler); 968 enabler = NULL; 969 } 970 out: 971 user_event_mm_put(user_mm); 972 973 return enabler; 974 } 975 976 static __always_inline __must_check 977 bool user_event_last_ref(struct user_event *user) 978 { 979 int last = 0; 980 981 if (user->reg_flags & USER_EVENT_REG_PERSIST) 982 last = 1; 983 984 return refcount_read(&user->refcnt) == last; 985 } 986 987 static __always_inline __must_check 988 size_t copy_nofault(void *addr, size_t bytes, struct iov_iter *i) 989 { 990 size_t ret; 991 992 pagefault_disable(); 993 994 ret = copy_from_iter_nocache(addr, bytes, i); 995 996 pagefault_enable(); 997 998 return ret; 999 } 1000 1001 static struct list_head *user_event_get_fields(struct trace_event_call *call) 1002 { 1003 struct user_event *user = (struct user_event *)call->data; 1004 1005 return &user->fields; 1006 } 1007 1008 /* 1009 * Parses a register command for user_events 1010 * Format: event_name[:FLAG1[,FLAG2...]] [field1[;field2...]] 1011 * 1012 * Example event named 'test' with a 20 char 'msg' field with an unsigned int 1013 * 'id' field after: 1014 * test char[20] msg;unsigned int id 1015 * 1016 * NOTE: Offsets are from the user data perspective, they are not from the 1017 * trace_entry/buffer perspective. We automatically add the common properties 1018 * sizes to the offset for the user. 1019 * 1020 * Upon success user_event has its ref count increased by 1. 1021 */ 1022 static int user_event_parse_cmd(struct user_event_group *group, 1023 char *raw_command, struct user_event **newuser, 1024 int reg_flags) 1025 { 1026 char *name = raw_command; 1027 char *args = strpbrk(name, " "); 1028 char *flags; 1029 1030 if (args) 1031 *args++ = '\0'; 1032 1033 flags = strpbrk(name, ":"); 1034 1035 if (flags) 1036 *flags++ = '\0'; 1037 1038 return user_event_parse(group, name, args, flags, newuser, reg_flags); 1039 } 1040 1041 static int user_field_array_size(const char *type) 1042 { 1043 const char *start = strchr(type, '['); 1044 char val[8]; 1045 char *bracket; 1046 int size = 0; 1047 1048 if (start == NULL) 1049 return -EINVAL; 1050 1051 if (strscpy(val, start + 1, sizeof(val)) <= 0) 1052 return -EINVAL; 1053 1054 bracket = strchr(val, ']'); 1055 1056 if (!bracket) 1057 return -EINVAL; 1058 1059 *bracket = '\0'; 1060 1061 if (kstrtouint(val, 0, &size)) 1062 return -EINVAL; 1063 1064 if (size > MAX_FIELD_ARRAY_SIZE) 1065 return -EINVAL; 1066 1067 return size; 1068 } 1069 1070 static int user_field_size(const char *type) 1071 { 1072 /* long is not allowed from a user, since it's ambiguous in size */ 1073 if (strcmp(type, "s64") == 0) 1074 return sizeof(s64); 1075 if (strcmp(type, "u64") == 0) 1076 return sizeof(u64); 1077 if (strcmp(type, "s32") == 0) 1078 return sizeof(s32); 1079 if (strcmp(type, "u32") == 0) 1080 return sizeof(u32); 1081 if (strcmp(type, "int") == 0) 1082 return sizeof(int); 1083 if (strcmp(type, "unsigned int") == 0) 1084 return sizeof(unsigned int); 1085 if (strcmp(type, "s16") == 0) 1086 return sizeof(s16); 1087 if (strcmp(type, "u16") == 0) 1088 return sizeof(u16); 1089 if (strcmp(type, "short") == 0) 1090 return sizeof(short); 1091 if (strcmp(type, "unsigned short") == 0) 1092 return sizeof(unsigned short); 1093 if (strcmp(type, "s8") == 0) 1094 return sizeof(s8); 1095 if (strcmp(type, "u8") == 0) 1096 return sizeof(u8); 1097 if (strcmp(type, "char") == 0) 1098 return sizeof(char); 1099 if (strcmp(type, "unsigned char") == 0) 1100 return sizeof(unsigned char); 1101 if (str_has_prefix(type, "char[")) 1102 return user_field_array_size(type); 1103 if (str_has_prefix(type, "unsigned char[")) 1104 return user_field_array_size(type); 1105 if (str_has_prefix(type, "__data_loc ")) 1106 return sizeof(u32); 1107 if (str_has_prefix(type, "__rel_loc ")) 1108 return sizeof(u32); 1109 1110 /* Unknown basic type, error */ 1111 return -EINVAL; 1112 } 1113 1114 static void user_event_destroy_validators(struct user_event *user) 1115 { 1116 struct user_event_validator *validator, *next; 1117 struct list_head *head = &user->validators; 1118 1119 list_for_each_entry_safe(validator, next, head, user_event_link) { 1120 list_del(&validator->user_event_link); 1121 kfree(validator); 1122 } 1123 } 1124 1125 static void user_event_destroy_fields(struct user_event *user) 1126 { 1127 struct ftrace_event_field *field, *next; 1128 struct list_head *head = &user->fields; 1129 1130 list_for_each_entry_safe(field, next, head, link) { 1131 list_del(&field->link); 1132 kfree(field); 1133 } 1134 } 1135 1136 static int user_event_add_field(struct user_event *user, const char *type, 1137 const char *name, int offset, int size, 1138 int is_signed, int filter_type) 1139 { 1140 struct user_event_validator *validator; 1141 struct ftrace_event_field *field; 1142 int validator_flags = 0; 1143 1144 field = kmalloc_obj(*field, GFP_KERNEL_ACCOUNT); 1145 1146 if (!field) 1147 return -ENOMEM; 1148 1149 if (str_has_prefix(type, "__data_loc ")) 1150 goto add_validator; 1151 1152 if (str_has_prefix(type, "__rel_loc ")) { 1153 validator_flags |= VALIDATOR_REL; 1154 goto add_validator; 1155 } 1156 1157 goto add_field; 1158 1159 add_validator: 1160 if (strstr(type, "char") != NULL) 1161 validator_flags |= VALIDATOR_ENSURE_NULL; 1162 1163 validator = kmalloc_obj(*validator, GFP_KERNEL_ACCOUNT); 1164 1165 if (!validator) { 1166 kfree(field); 1167 return -ENOMEM; 1168 } 1169 1170 validator->flags = validator_flags; 1171 validator->offset = offset; 1172 1173 /* Want sequential access when validating */ 1174 list_add_tail(&validator->user_event_link, &user->validators); 1175 1176 add_field: 1177 field->type = type; 1178 field->name = name; 1179 field->offset = offset; 1180 field->size = size; 1181 field->is_signed = is_signed; 1182 field->filter_type = filter_type; 1183 1184 if (filter_type == FILTER_OTHER) 1185 field->filter_type = filter_assign_type(type); 1186 1187 list_add(&field->link, &user->fields); 1188 1189 /* 1190 * Min size from user writes that are required, this does not include 1191 * the size of trace_entry (common fields). 1192 */ 1193 user->min_size = (offset + size) - sizeof(struct trace_entry); 1194 1195 return 0; 1196 } 1197 1198 /* 1199 * Parses the values of a field within the description 1200 * Format: type name [size] 1201 */ 1202 static int user_event_parse_field(char *field, struct user_event *user, 1203 u32 *offset) 1204 { 1205 char *part, *type, *name; 1206 u32 depth = 0, saved_offset = *offset; 1207 int len, size = -EINVAL; 1208 bool is_struct = false; 1209 1210 field = skip_spaces(field); 1211 1212 if (*field == '\0') 1213 return 0; 1214 1215 /* Handle types that have a space within */ 1216 len = str_has_prefix(field, "unsigned "); 1217 if (len) 1218 goto skip_next; 1219 1220 len = str_has_prefix(field, "struct "); 1221 if (len) { 1222 is_struct = true; 1223 goto skip_next; 1224 } 1225 1226 len = str_has_prefix(field, "__data_loc unsigned "); 1227 if (len) 1228 goto skip_next; 1229 1230 len = str_has_prefix(field, "__data_loc "); 1231 if (len) 1232 goto skip_next; 1233 1234 len = str_has_prefix(field, "__rel_loc unsigned "); 1235 if (len) 1236 goto skip_next; 1237 1238 len = str_has_prefix(field, "__rel_loc "); 1239 if (len) 1240 goto skip_next; 1241 1242 goto parse; 1243 skip_next: 1244 type = field; 1245 field = strpbrk(field + len, " "); 1246 1247 if (field == NULL) 1248 return -EINVAL; 1249 1250 *field++ = '\0'; 1251 depth++; 1252 parse: 1253 name = NULL; 1254 1255 while ((part = strsep(&field, " ")) != NULL) { 1256 switch (depth++) { 1257 case FIELD_DEPTH_TYPE: 1258 type = part; 1259 break; 1260 case FIELD_DEPTH_NAME: 1261 name = part; 1262 break; 1263 case FIELD_DEPTH_SIZE: 1264 if (!is_struct) 1265 return -EINVAL; 1266 1267 if (kstrtou32(part, 10, &size)) 1268 return -EINVAL; 1269 break; 1270 default: 1271 return -EINVAL; 1272 } 1273 } 1274 1275 if (depth < FIELD_DEPTH_SIZE || !name) 1276 return -EINVAL; 1277 1278 if (depth == FIELD_DEPTH_SIZE) 1279 size = user_field_size(type); 1280 1281 if (size == 0) 1282 return -EINVAL; 1283 1284 if (size < 0) 1285 return size; 1286 1287 *offset = saved_offset + size; 1288 1289 return user_event_add_field(user, type, name, saved_offset, size, 1290 type[0] != 'u', FILTER_OTHER); 1291 } 1292 1293 static int user_event_parse_fields(struct user_event *user, char *args) 1294 { 1295 char *field; 1296 u32 offset = sizeof(struct trace_entry); 1297 int ret = -EINVAL; 1298 1299 if (args == NULL) 1300 return 0; 1301 1302 while ((field = strsep(&args, ";")) != NULL) { 1303 ret = user_event_parse_field(field, user, &offset); 1304 1305 if (ret) 1306 break; 1307 } 1308 1309 return ret; 1310 } 1311 1312 static struct trace_event_fields user_event_fields_array[1]; 1313 1314 static const char *user_field_format(const char *type) 1315 { 1316 if (strcmp(type, "s64") == 0) 1317 return "%lld"; 1318 if (strcmp(type, "u64") == 0) 1319 return "%llu"; 1320 if (strcmp(type, "s32") == 0) 1321 return "%d"; 1322 if (strcmp(type, "u32") == 0) 1323 return "%u"; 1324 if (strcmp(type, "int") == 0) 1325 return "%d"; 1326 if (strcmp(type, "unsigned int") == 0) 1327 return "%u"; 1328 if (strcmp(type, "s16") == 0) 1329 return "%d"; 1330 if (strcmp(type, "u16") == 0) 1331 return "%u"; 1332 if (strcmp(type, "short") == 0) 1333 return "%d"; 1334 if (strcmp(type, "unsigned short") == 0) 1335 return "%u"; 1336 if (strcmp(type, "s8") == 0) 1337 return "%d"; 1338 if (strcmp(type, "u8") == 0) 1339 return "%u"; 1340 if (strcmp(type, "char") == 0) 1341 return "%d"; 1342 if (strcmp(type, "unsigned char") == 0) 1343 return "%u"; 1344 if (strstr(type, "char[") != NULL) 1345 return "%s"; 1346 1347 /* Unknown, likely struct, allowed treat as 64-bit */ 1348 return "%llu"; 1349 } 1350 1351 static bool user_field_is_dyn_string(const char *type, const char **str_func) 1352 { 1353 if (str_has_prefix(type, "__data_loc ")) { 1354 *str_func = "__get_str"; 1355 goto check; 1356 } 1357 1358 if (str_has_prefix(type, "__rel_loc ")) { 1359 *str_func = "__get_rel_str"; 1360 goto check; 1361 } 1362 1363 return false; 1364 check: 1365 return strstr(type, "char") != NULL; 1366 } 1367 1368 #define LEN_OR_ZERO (len ? len - pos : 0) 1369 static int user_dyn_field_set_string(int argc, const char **argv, int *iout, 1370 char *buf, int len, bool *colon) 1371 { 1372 int pos = 0, i = *iout; 1373 1374 *colon = false; 1375 1376 for (; i < argc; ++i) { 1377 if (i != *iout) 1378 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1379 1380 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", argv[i]); 1381 1382 if (strchr(argv[i], ';')) { 1383 ++i; 1384 *colon = true; 1385 break; 1386 } 1387 } 1388 1389 /* Actual set, advance i */ 1390 if (len != 0) 1391 *iout = i; 1392 1393 return pos + 1; 1394 } 1395 1396 static int user_field_set_string(struct ftrace_event_field *field, 1397 char *buf, int len, bool colon) 1398 { 1399 int pos = 0; 1400 1401 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", field->type); 1402 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1403 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", field->name); 1404 1405 if (str_has_prefix(field->type, "struct ")) 1406 pos += snprintf(buf + pos, LEN_OR_ZERO, " %d", field->size); 1407 1408 if (colon) 1409 pos += snprintf(buf + pos, LEN_OR_ZERO, ";"); 1410 1411 return pos + 1; 1412 } 1413 1414 static int user_event_set_print_fmt(struct user_event *user, char *buf, int len) 1415 { 1416 struct ftrace_event_field *field; 1417 struct list_head *head = &user->fields; 1418 int pos = 0, depth = 0; 1419 const char *str_func; 1420 1421 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); 1422 1423 list_for_each_entry_reverse(field, head, link) { 1424 if (depth != 0) 1425 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1426 1427 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s=%s", 1428 field->name, user_field_format(field->type)); 1429 1430 depth++; 1431 } 1432 1433 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); 1434 1435 list_for_each_entry_reverse(field, head, link) { 1436 if (user_field_is_dyn_string(field->type, &str_func)) 1437 pos += snprintf(buf + pos, LEN_OR_ZERO, 1438 ", %s(%s)", str_func, field->name); 1439 else 1440 pos += snprintf(buf + pos, LEN_OR_ZERO, 1441 ", REC->%s", field->name); 1442 } 1443 1444 return pos + 1; 1445 } 1446 #undef LEN_OR_ZERO 1447 1448 static int user_event_create_print_fmt(struct user_event *user) 1449 { 1450 char *print_fmt; 1451 int len; 1452 1453 len = user_event_set_print_fmt(user, NULL, 0); 1454 1455 print_fmt = kmalloc(len, GFP_KERNEL_ACCOUNT); 1456 1457 if (!print_fmt) 1458 return -ENOMEM; 1459 1460 user_event_set_print_fmt(user, print_fmt, len); 1461 1462 user->call.print_fmt = print_fmt; 1463 1464 return 0; 1465 } 1466 1467 static enum print_line_t user_event_print_trace(struct trace_iterator *iter, 1468 int flags, 1469 struct trace_event *event) 1470 { 1471 return print_event_fields(iter, event); 1472 } 1473 1474 static struct trace_event_functions user_event_funcs = { 1475 .trace = user_event_print_trace, 1476 }; 1477 1478 static int user_event_set_call_visible(struct user_event *user, bool visible) 1479 { 1480 CLASS(prepare_creds, cred)(); 1481 if (!cred) 1482 return -ENOMEM; 1483 1484 /* 1485 * While by default tracefs is locked down, systems can be configured 1486 * to allow user_event files to be less locked down. The extreme case 1487 * being "other" has read/write access to user_events_data/status. 1488 * 1489 * When not locked down, processes may not have permissions to 1490 * add/remove calls themselves to tracefs. We need to temporarily 1491 * switch to root file permission to allow for this scenario. 1492 */ 1493 cred->fsuid = GLOBAL_ROOT_UID; 1494 1495 scoped_with_creds(cred) { 1496 if (visible) 1497 return trace_add_event_call(&user->call); 1498 1499 return trace_remove_event_call(&user->call); 1500 } 1501 } 1502 1503 static int destroy_user_event(struct user_event *user) 1504 { 1505 int ret = 0; 1506 1507 lockdep_assert_held(&event_mutex); 1508 1509 /* Must destroy fields before call removal */ 1510 user_event_destroy_fields(user); 1511 1512 ret = user_event_set_call_visible(user, false); 1513 1514 if (ret) 1515 return ret; 1516 1517 dyn_event_remove(&user->devent); 1518 hash_del(&user->node); 1519 1520 user_event_destroy_validators(user); 1521 1522 /* If we have different names, both must be freed */ 1523 if (EVENT_NAME(user) != EVENT_TP_NAME(user)) 1524 kfree(EVENT_TP_NAME(user)); 1525 1526 kfree(user->call.print_fmt); 1527 kfree(EVENT_NAME(user)); 1528 kfree(user); 1529 1530 if (current_user_events > 0) 1531 current_user_events--; 1532 else 1533 pr_alert("BUG: Bad current_user_events\n"); 1534 1535 return ret; 1536 } 1537 1538 static struct user_event *find_user_event(struct user_event_group *group, 1539 char *name, int argc, const char **argv, 1540 u32 flags, u32 *outkey) 1541 { 1542 struct user_event *user; 1543 u32 key = user_event_key(name); 1544 1545 *outkey = key; 1546 1547 hash_for_each_possible(group->register_table, user, node, key) { 1548 /* 1549 * Single-format events shouldn't return multi-format 1550 * events. Callers expect the underlying tracepoint to match 1551 * the name exactly in these cases. Only check like-formats. 1552 */ 1553 if (EVENT_MULTI_FORMAT(flags) != EVENT_MULTI_FORMAT(user->reg_flags)) 1554 continue; 1555 1556 if (strcmp(EVENT_NAME(user), name)) 1557 continue; 1558 1559 if (user_fields_match(user, argc, argv)) 1560 return user_event_get(user); 1561 1562 /* Scan others if this is a multi-format event */ 1563 if (EVENT_MULTI_FORMAT(flags)) 1564 continue; 1565 1566 return ERR_PTR(-EADDRINUSE); 1567 } 1568 1569 return NULL; 1570 } 1571 1572 static int user_event_validate(struct user_event *user, void *data, int len) 1573 { 1574 struct list_head *head = &user->validators; 1575 struct user_event_validator *validator; 1576 void *pos, *end = data + len; 1577 u32 loc, offset, size; 1578 1579 list_for_each_entry(validator, head, user_event_link) { 1580 pos = data + validator->offset; 1581 1582 /* Already done min_size check, no bounds check here */ 1583 loc = *(u32 *)pos; 1584 offset = loc & 0xffff; 1585 size = loc >> 16; 1586 1587 if (likely(validator->flags & VALIDATOR_REL)) 1588 pos += offset + sizeof(loc); 1589 else 1590 pos = data + offset; 1591 1592 pos += size; 1593 1594 if (unlikely(pos > end)) 1595 return -EFAULT; 1596 1597 if (likely(validator->flags & VALIDATOR_ENSURE_NULL)) 1598 if (unlikely(*(char *)(pos - 1) != '\0')) 1599 return -EFAULT; 1600 } 1601 1602 return 0; 1603 } 1604 1605 /* 1606 * Writes the user supplied payload out to a trace file. 1607 */ 1608 static void user_event_ftrace(struct user_event *user, struct iov_iter *i, 1609 void *tpdata, bool *faulted) 1610 { 1611 struct trace_event_file *file; 1612 struct trace_entry *entry; 1613 struct trace_event_buffer event_buffer; 1614 size_t size = sizeof(*entry) + i->count; 1615 1616 file = (struct trace_event_file *)tpdata; 1617 1618 if (!file || 1619 !(file->flags & EVENT_FILE_FL_ENABLED) || 1620 trace_trigger_soft_disabled(file)) 1621 return; 1622 1623 /* Allocates and fills trace_entry, + 1 of this is data payload */ 1624 entry = trace_event_buffer_reserve(&event_buffer, file, size); 1625 1626 if (unlikely(!entry)) 1627 return; 1628 1629 if (unlikely(i->count != 0 && !copy_nofault(entry + 1, i->count, i))) 1630 goto discard; 1631 1632 if (!list_empty(&user->validators) && 1633 unlikely(user_event_validate(user, entry, size))) 1634 goto discard; 1635 1636 trace_event_buffer_commit(&event_buffer); 1637 1638 return; 1639 discard: 1640 *faulted = true; 1641 __trace_event_discard_commit(event_buffer.buffer, 1642 event_buffer.event); 1643 } 1644 1645 #ifdef CONFIG_PERF_EVENTS 1646 /* 1647 * Writes the user supplied payload out to perf ring buffer. 1648 */ 1649 static void user_event_perf(struct user_event *user, struct iov_iter *i, 1650 void *tpdata, bool *faulted) 1651 { 1652 struct hlist_head *perf_head; 1653 1654 perf_head = this_cpu_ptr(user->call.perf_events); 1655 1656 if (perf_head && !hlist_empty(perf_head)) { 1657 struct trace_entry *perf_entry; 1658 struct pt_regs *regs; 1659 size_t size = sizeof(*perf_entry) + i->count; 1660 int context; 1661 1662 perf_entry = perf_trace_buf_alloc(ALIGN(size, 8), 1663 ®s, &context); 1664 1665 if (unlikely(!perf_entry)) 1666 return; 1667 1668 perf_fetch_caller_regs(regs); 1669 1670 if (unlikely(i->count != 0 && !copy_nofault(perf_entry + 1, i->count, i))) 1671 goto discard; 1672 1673 if (!list_empty(&user->validators) && 1674 unlikely(user_event_validate(user, perf_entry, size))) 1675 goto discard; 1676 1677 perf_trace_buf_submit(perf_entry, size, context, 1678 user->call.event.type, 1, regs, 1679 perf_head, NULL); 1680 1681 return; 1682 discard: 1683 *faulted = true; 1684 perf_swevent_put_recursion_context(context); 1685 } 1686 } 1687 #endif 1688 1689 /* 1690 * Update the enabled bit among all user processes. 1691 */ 1692 static void update_enable_bit_for(struct user_event *user) 1693 { 1694 struct tracepoint *tp = &user->tracepoint; 1695 char status = 0; 1696 1697 if (static_key_enabled(&tp->key)) { 1698 struct tracepoint_func *probe_func_ptr; 1699 user_event_func_t probe_func; 1700 1701 rcu_read_lock_sched(); 1702 1703 probe_func_ptr = rcu_dereference_sched(tp->funcs); 1704 1705 if (probe_func_ptr) { 1706 do { 1707 probe_func = probe_func_ptr->func; 1708 1709 if (probe_func == user_event_ftrace) 1710 status |= EVENT_STATUS_FTRACE; 1711 #ifdef CONFIG_PERF_EVENTS 1712 else if (probe_func == user_event_perf) 1713 status |= EVENT_STATUS_PERF; 1714 #endif 1715 else 1716 status |= EVENT_STATUS_OTHER; 1717 } while ((++probe_func_ptr)->func); 1718 } 1719 1720 rcu_read_unlock_sched(); 1721 } 1722 1723 user->status = status; 1724 1725 user_event_enabler_update(user); 1726 } 1727 1728 /* 1729 * Register callback for our events from tracing sub-systems. 1730 */ 1731 static int user_event_reg(struct trace_event_call *call, 1732 enum trace_reg type, 1733 void *data) 1734 { 1735 struct user_event *user = (struct user_event *)call->data; 1736 int ret = 0; 1737 1738 if (!user) 1739 return -ENOENT; 1740 1741 switch (type) { 1742 case TRACE_REG_REGISTER: 1743 ret = tracepoint_probe_register(call->tp, 1744 call->class->probe, 1745 data); 1746 if (!ret) 1747 goto inc; 1748 break; 1749 1750 case TRACE_REG_UNREGISTER: 1751 tracepoint_probe_unregister(call->tp, 1752 call->class->probe, 1753 data); 1754 goto dec; 1755 1756 #ifdef CONFIG_PERF_EVENTS 1757 case TRACE_REG_PERF_REGISTER: 1758 ret = tracepoint_probe_register(call->tp, 1759 call->class->perf_probe, 1760 data); 1761 if (!ret) 1762 goto inc; 1763 break; 1764 1765 case TRACE_REG_PERF_UNREGISTER: 1766 tracepoint_probe_unregister(call->tp, 1767 call->class->perf_probe, 1768 data); 1769 goto dec; 1770 1771 case TRACE_REG_PERF_OPEN: 1772 case TRACE_REG_PERF_CLOSE: 1773 case TRACE_REG_PERF_ADD: 1774 case TRACE_REG_PERF_DEL: 1775 break; 1776 #endif 1777 } 1778 1779 return ret; 1780 inc: 1781 user_event_get(user); 1782 update_enable_bit_for(user); 1783 return 0; 1784 dec: 1785 update_enable_bit_for(user); 1786 user_event_put(user, true); 1787 return 0; 1788 } 1789 1790 static int user_event_create(const char *raw_command) 1791 { 1792 struct user_event_group *group; 1793 struct user_event *user; 1794 char *name; 1795 int ret; 1796 1797 if (!str_has_prefix(raw_command, USER_EVENTS_PREFIX)) 1798 return -ECANCELED; 1799 1800 raw_command += USER_EVENTS_PREFIX_LEN; 1801 raw_command = skip_spaces(raw_command); 1802 1803 name = kstrdup(raw_command, GFP_KERNEL_ACCOUNT); 1804 1805 if (!name) 1806 return -ENOMEM; 1807 1808 group = current_user_event_group(); 1809 1810 if (!group) { 1811 kfree(name); 1812 return -ENOENT; 1813 } 1814 1815 mutex_lock(&group->reg_mutex); 1816 1817 /* Dyn events persist, otherwise they would cleanup immediately */ 1818 ret = user_event_parse_cmd(group, name, &user, USER_EVENT_REG_PERSIST); 1819 1820 if (!ret) 1821 user_event_put(user, false); 1822 1823 mutex_unlock(&group->reg_mutex); 1824 1825 if (ret) 1826 kfree(name); 1827 1828 return ret; 1829 } 1830 1831 static int user_event_show(struct seq_file *m, struct dyn_event *ev) 1832 { 1833 struct user_event *user = container_of(ev, struct user_event, devent); 1834 struct ftrace_event_field *field; 1835 struct list_head *head; 1836 int depth = 0; 1837 1838 seq_printf(m, "%s%s", USER_EVENTS_PREFIX, EVENT_NAME(user)); 1839 1840 head = trace_get_fields(&user->call); 1841 1842 list_for_each_entry_reverse(field, head, link) { 1843 if (depth == 0) 1844 seq_putc(m, ' '); 1845 else 1846 seq_puts(m, "; "); 1847 1848 seq_printf(m, "%s %s", field->type, field->name); 1849 1850 if (str_has_prefix(field->type, "struct ")) 1851 seq_printf(m, " %d", field->size); 1852 1853 depth++; 1854 } 1855 1856 seq_putc(m, '\n'); 1857 1858 return 0; 1859 } 1860 1861 static bool user_event_is_busy(struct dyn_event *ev) 1862 { 1863 struct user_event *user = container_of(ev, struct user_event, devent); 1864 1865 return !user_event_last_ref(user); 1866 } 1867 1868 static int user_event_free(struct dyn_event *ev) 1869 { 1870 struct user_event *user = container_of(ev, struct user_event, devent); 1871 1872 if (!user_event_last_ref(user)) 1873 return -EBUSY; 1874 1875 if (!user_event_capable(user->reg_flags)) 1876 return -EPERM; 1877 1878 return destroy_user_event(user); 1879 } 1880 1881 static bool user_field_match(struct ftrace_event_field *field, int argc, 1882 const char **argv, int *iout) 1883 { 1884 char *field_name = NULL, *dyn_field_name = NULL; 1885 bool colon = false, match = false; 1886 int dyn_len, len; 1887 1888 if (*iout >= argc) 1889 return false; 1890 1891 dyn_len = user_dyn_field_set_string(argc, argv, iout, dyn_field_name, 1892 0, &colon); 1893 1894 len = user_field_set_string(field, field_name, 0, colon); 1895 1896 if (dyn_len != len) 1897 return false; 1898 1899 dyn_field_name = kmalloc(dyn_len, GFP_KERNEL); 1900 field_name = kmalloc(len, GFP_KERNEL); 1901 1902 if (!dyn_field_name || !field_name) 1903 goto out; 1904 1905 user_dyn_field_set_string(argc, argv, iout, dyn_field_name, 1906 dyn_len, &colon); 1907 1908 user_field_set_string(field, field_name, len, colon); 1909 1910 match = strcmp(dyn_field_name, field_name) == 0; 1911 out: 1912 kfree(dyn_field_name); 1913 kfree(field_name); 1914 1915 return match; 1916 } 1917 1918 static bool user_fields_match(struct user_event *user, int argc, 1919 const char **argv) 1920 { 1921 struct ftrace_event_field *field; 1922 struct list_head *head = &user->fields; 1923 int i = 0; 1924 1925 if (argc == 0) 1926 return list_empty(head); 1927 1928 list_for_each_entry_reverse(field, head, link) { 1929 if (!user_field_match(field, argc, argv, &i)) 1930 return false; 1931 } 1932 1933 if (i != argc) 1934 return false; 1935 1936 return true; 1937 } 1938 1939 static bool user_event_match(const char *system, const char *event, 1940 int argc, const char **argv, struct dyn_event *ev) 1941 { 1942 struct user_event *user = container_of(ev, struct user_event, devent); 1943 bool match; 1944 1945 match = strcmp(EVENT_NAME(user), event) == 0; 1946 1947 if (match && system) { 1948 match = strcmp(system, user->group->system_name) == 0 || 1949 strcmp(system, user->group->system_multi_name) == 0; 1950 } 1951 1952 if (match) 1953 match = user_fields_match(user, argc, argv); 1954 1955 return match; 1956 } 1957 1958 static struct dyn_event_operations user_event_dops = { 1959 .create = user_event_create, 1960 .show = user_event_show, 1961 .is_busy = user_event_is_busy, 1962 .free = user_event_free, 1963 .match = user_event_match, 1964 }; 1965 1966 static int user_event_trace_register(struct user_event *user) 1967 { 1968 int ret; 1969 1970 ret = register_trace_event(&user->call.event); 1971 1972 if (!ret) 1973 return -ENODEV; 1974 1975 ret = user_event_set_call_visible(user, true); 1976 1977 if (ret) 1978 unregister_trace_event(&user->call.event); 1979 1980 return ret; 1981 } 1982 1983 static int user_event_set_tp_name(struct user_event *user) 1984 { 1985 lockdep_assert_held(&user->group->reg_mutex); 1986 1987 if (EVENT_MULTI_FORMAT(user->reg_flags)) { 1988 char *multi_name; 1989 1990 multi_name = kasprintf(GFP_KERNEL_ACCOUNT, "%s.%llx", 1991 user->reg_name, user->group->multi_id); 1992 1993 if (!multi_name) 1994 return -ENOMEM; 1995 1996 user->call.name = multi_name; 1997 user->tracepoint.name = multi_name; 1998 1999 /* Inc to ensure unique multi-event name next time */ 2000 user->group->multi_id++; 2001 } else { 2002 /* Non Multi-format uses register name */ 2003 user->call.name = user->reg_name; 2004 user->tracepoint.name = user->reg_name; 2005 } 2006 2007 return 0; 2008 } 2009 2010 /* 2011 * Counts how many ';' without a trailing space are in the args. 2012 */ 2013 static int count_semis_no_space(char *args) 2014 { 2015 int count = 0; 2016 2017 while ((args = strchr(args, ';'))) { 2018 args++; 2019 2020 if (!isspace(*args)) 2021 count++; 2022 } 2023 2024 return count; 2025 } 2026 2027 /* 2028 * Copies the arguments while ensuring all ';' have a trailing space. 2029 */ 2030 static char *insert_space_after_semis(char *args, int count) 2031 { 2032 char *fixed, *pos; 2033 int len; 2034 2035 len = strlen(args) + count; 2036 fixed = kmalloc(len + 1, GFP_KERNEL); 2037 2038 if (!fixed) 2039 return NULL; 2040 2041 pos = fixed; 2042 2043 /* Insert a space after ';' if there is no trailing space. */ 2044 while (*args) { 2045 *pos = *args++; 2046 2047 if (*pos++ == ';' && !isspace(*args)) 2048 *pos++ = ' '; 2049 } 2050 2051 *pos = '\0'; 2052 2053 return fixed; 2054 } 2055 2056 static char **user_event_argv_split(char *args, int *argc) 2057 { 2058 char **split; 2059 char *fixed; 2060 int count; 2061 2062 /* Count how many ';' without a trailing space */ 2063 count = count_semis_no_space(args); 2064 2065 /* No fixup is required */ 2066 if (!count) 2067 return argv_split(GFP_KERNEL, args, argc); 2068 2069 /* We must fixup 'field;field' to 'field; field' */ 2070 fixed = insert_space_after_semis(args, count); 2071 2072 if (!fixed) 2073 return NULL; 2074 2075 /* We do a normal split afterwards */ 2076 split = argv_split(GFP_KERNEL, fixed, argc); 2077 2078 /* We can free since argv_split makes a copy */ 2079 kfree(fixed); 2080 2081 return split; 2082 } 2083 2084 /* 2085 * Parses the event name, arguments and flags then registers if successful. 2086 * The name buffer lifetime is owned by this method for success cases only. 2087 * Upon success the returned user_event has its ref count increased by 1. 2088 */ 2089 static int user_event_parse(struct user_event_group *group, char *name, 2090 char *args, char *flags, 2091 struct user_event **newuser, int reg_flags) 2092 { 2093 struct user_event *user; 2094 char **argv = NULL; 2095 int argc = 0; 2096 int ret; 2097 u32 key; 2098 2099 /* Currently don't support any text based flags */ 2100 if (flags != NULL) 2101 return -EINVAL; 2102 2103 if (!user_event_capable(reg_flags)) 2104 return -EPERM; 2105 2106 if (args) { 2107 argv = user_event_argv_split(args, &argc); 2108 2109 if (!argv) 2110 return -ENOMEM; 2111 } 2112 2113 /* Prevent dyn_event from racing */ 2114 mutex_lock(&event_mutex); 2115 user = find_user_event(group, name, argc, (const char **)argv, 2116 reg_flags, &key); 2117 mutex_unlock(&event_mutex); 2118 2119 if (argv) 2120 argv_free(argv); 2121 2122 if (IS_ERR(user)) 2123 return PTR_ERR(user); 2124 2125 if (user) { 2126 *newuser = user; 2127 /* 2128 * Name is allocated by caller, free it since it already exists. 2129 * Caller only worries about failure cases for freeing. 2130 */ 2131 kfree(name); 2132 2133 return 0; 2134 } 2135 2136 user = kzalloc_obj(*user, GFP_KERNEL_ACCOUNT); 2137 2138 if (!user) 2139 return -ENOMEM; 2140 2141 INIT_LIST_HEAD(&user->class.fields); 2142 INIT_LIST_HEAD(&user->fields); 2143 INIT_LIST_HEAD(&user->validators); 2144 2145 user->group = group; 2146 user->reg_name = name; 2147 user->reg_flags = reg_flags; 2148 2149 ret = user_event_set_tp_name(user); 2150 2151 if (ret) 2152 goto put_user; 2153 2154 ret = user_event_parse_fields(user, args); 2155 2156 if (ret) 2157 goto put_user; 2158 2159 ret = user_event_create_print_fmt(user); 2160 2161 if (ret) 2162 goto put_user; 2163 2164 user->call.data = user; 2165 user->call.class = &user->class; 2166 user->call.flags = TRACE_EVENT_FL_TRACEPOINT; 2167 user->call.tp = &user->tracepoint; 2168 user->call.event.funcs = &user_event_funcs; 2169 2170 if (EVENT_MULTI_FORMAT(user->reg_flags)) 2171 user->class.system = group->system_multi_name; 2172 else 2173 user->class.system = group->system_name; 2174 2175 user->class.fields_array = user_event_fields_array; 2176 user->class.get_fields = user_event_get_fields; 2177 user->class.reg = user_event_reg; 2178 user->class.probe = user_event_ftrace; 2179 #ifdef CONFIG_PERF_EVENTS 2180 user->class.perf_probe = user_event_perf; 2181 #endif 2182 2183 mutex_lock(&event_mutex); 2184 2185 if (current_user_events >= max_user_events) { 2186 ret = -EMFILE; 2187 goto put_user_lock; 2188 } 2189 2190 ret = user_event_trace_register(user); 2191 2192 if (ret) 2193 goto put_user_lock; 2194 2195 if (user->reg_flags & USER_EVENT_REG_PERSIST) { 2196 /* Ensure we track self ref and caller ref (2) */ 2197 refcount_set(&user->refcnt, 2); 2198 } else { 2199 /* Ensure we track only caller ref (1) */ 2200 refcount_set(&user->refcnt, 1); 2201 } 2202 2203 dyn_event_init(&user->devent, &user_event_dops); 2204 dyn_event_add(&user->devent, &user->call); 2205 hash_add(group->register_table, &user->node, key); 2206 current_user_events++; 2207 2208 mutex_unlock(&event_mutex); 2209 2210 *newuser = user; 2211 return 0; 2212 put_user_lock: 2213 mutex_unlock(&event_mutex); 2214 put_user: 2215 user_event_destroy_fields(user); 2216 user_event_destroy_validators(user); 2217 kfree(user->call.print_fmt); 2218 2219 /* Caller frees reg_name on error, but not multi-name */ 2220 if (EVENT_NAME(user) != EVENT_TP_NAME(user)) 2221 kfree(EVENT_TP_NAME(user)); 2222 2223 kfree(user); 2224 return ret; 2225 } 2226 2227 /* 2228 * Deletes previously created events if they are no longer being used. 2229 */ 2230 static int delete_user_event(struct user_event_group *group, char *name) 2231 { 2232 struct user_event *user; 2233 struct hlist_node *tmp; 2234 u32 key = user_event_key(name); 2235 int ret = -ENOENT; 2236 2237 /* Attempt to delete all event(s) with the name passed in */ 2238 hash_for_each_possible_safe(group->register_table, user, tmp, node, key) { 2239 if (strcmp(EVENT_NAME(user), name)) 2240 continue; 2241 2242 if (!user_event_last_ref(user)) 2243 return -EBUSY; 2244 2245 if (!user_event_capable(user->reg_flags)) 2246 return -EPERM; 2247 2248 ret = destroy_user_event(user); 2249 2250 if (ret) 2251 goto out; 2252 } 2253 out: 2254 return ret; 2255 } 2256 2257 /* 2258 * Validates the user payload and writes via iterator. 2259 */ 2260 static ssize_t user_events_write_core(struct file *file, struct iov_iter *i) 2261 { 2262 struct user_event_file_info *info = file->private_data; 2263 struct user_event_refs *refs; 2264 struct user_event *user = NULL; 2265 struct tracepoint *tp; 2266 ssize_t ret = i->count; 2267 int idx; 2268 2269 if (unlikely(copy_from_iter(&idx, sizeof(idx), i) != sizeof(idx))) 2270 return -EFAULT; 2271 2272 if (idx < 0) 2273 return -EINVAL; 2274 2275 rcu_read_lock_sched(); 2276 2277 refs = rcu_dereference_sched(info->refs); 2278 2279 /* 2280 * The refs->events array is protected by RCU, and new items may be 2281 * added. But the user retrieved from indexing into the events array 2282 * shall be immutable while the file is opened. 2283 */ 2284 if (likely(refs && idx < refs->count)) 2285 user = refs->events[idx]; 2286 2287 rcu_read_unlock_sched(); 2288 2289 if (unlikely(user == NULL)) 2290 return -ENOENT; 2291 2292 if (unlikely(i->count < user->min_size)) 2293 return -EINVAL; 2294 2295 tp = &user->tracepoint; 2296 2297 /* 2298 * It's possible key.enabled disables after this check, however 2299 * we don't mind if a few events are included in this condition. 2300 */ 2301 if (likely(static_key_enabled(&tp->key))) { 2302 struct tracepoint_func *probe_func_ptr; 2303 user_event_func_t probe_func; 2304 struct iov_iter copy; 2305 void *tpdata; 2306 bool faulted; 2307 2308 if (unlikely(fault_in_iov_iter_readable(i, i->count))) 2309 return -EFAULT; 2310 2311 faulted = false; 2312 2313 rcu_read_lock_sched(); 2314 2315 probe_func_ptr = rcu_dereference_sched(tp->funcs); 2316 2317 if (probe_func_ptr) { 2318 do { 2319 copy = *i; 2320 probe_func = probe_func_ptr->func; 2321 tpdata = probe_func_ptr->data; 2322 probe_func(user, ©, tpdata, &faulted); 2323 } while ((++probe_func_ptr)->func); 2324 } 2325 2326 rcu_read_unlock_sched(); 2327 2328 if (unlikely(faulted)) 2329 return -EFAULT; 2330 } else 2331 return -EBADF; 2332 2333 return ret; 2334 } 2335 2336 static int user_events_open(struct inode *node, struct file *file) 2337 { 2338 struct user_event_group *group; 2339 struct user_event_file_info *info; 2340 2341 group = current_user_event_group(); 2342 2343 if (!group) 2344 return -ENOENT; 2345 2346 info = kzalloc_obj(*info, GFP_KERNEL_ACCOUNT); 2347 2348 if (!info) 2349 return -ENOMEM; 2350 2351 info->group = group; 2352 2353 file->private_data = info; 2354 2355 return 0; 2356 } 2357 2358 static ssize_t user_events_write(struct file *file, const char __user *ubuf, 2359 size_t count, loff_t *ppos) 2360 { 2361 struct iov_iter i; 2362 2363 if (unlikely(*ppos != 0)) 2364 return -EFAULT; 2365 2366 if (unlikely(import_ubuf(ITER_SOURCE, (char __user *)ubuf, count, &i))) 2367 return -EFAULT; 2368 2369 return user_events_write_core(file, &i); 2370 } 2371 2372 static ssize_t user_events_write_iter(struct kiocb *kp, struct iov_iter *i) 2373 { 2374 return user_events_write_core(kp->ki_filp, i); 2375 } 2376 2377 static int user_events_ref_add(struct user_event_file_info *info, 2378 struct user_event *user) 2379 { 2380 struct user_event_group *group = info->group; 2381 struct user_event_refs *refs, *new_refs; 2382 int i, size, count = 0; 2383 2384 refs = rcu_dereference_protected(info->refs, 2385 lockdep_is_held(&group->reg_mutex)); 2386 2387 if (refs) { 2388 count = refs->count; 2389 2390 for (i = 0; i < count; ++i) 2391 if (refs->events[i] == user) 2392 return i; 2393 } 2394 2395 size = struct_size(refs, events, count + 1); 2396 2397 new_refs = kzalloc(size, GFP_KERNEL_ACCOUNT); 2398 2399 if (!new_refs) 2400 return -ENOMEM; 2401 2402 new_refs->count = count + 1; 2403 2404 for (i = 0; i < count; ++i) 2405 new_refs->events[i] = refs->events[i]; 2406 2407 new_refs->events[i] = user_event_get(user); 2408 2409 rcu_assign_pointer(info->refs, new_refs); 2410 2411 if (refs) 2412 kfree_rcu(refs, rcu); 2413 2414 return i; 2415 } 2416 2417 static long user_reg_get(struct user_reg __user *ureg, struct user_reg *kreg) 2418 { 2419 u32 size; 2420 long ret; 2421 2422 ret = get_user(size, &ureg->size); 2423 2424 if (ret) 2425 return ret; 2426 2427 if (size > PAGE_SIZE) 2428 return -E2BIG; 2429 2430 if (size < offsetofend(struct user_reg, write_index)) 2431 return -EINVAL; 2432 2433 ret = copy_struct_from_user(kreg, sizeof(*kreg), ureg, size); 2434 2435 if (ret) 2436 return ret; 2437 2438 /* Ensure only valid flags */ 2439 if (kreg->flags & ~(USER_EVENT_REG_MAX-1)) 2440 return -EINVAL; 2441 2442 /* Ensure supported size */ 2443 switch (kreg->enable_size) { 2444 case 4: 2445 /* 32-bit */ 2446 break; 2447 #if BITS_PER_LONG >= 64 2448 case 8: 2449 /* 64-bit */ 2450 break; 2451 #endif 2452 default: 2453 return -EINVAL; 2454 } 2455 2456 /* Ensure natural alignment */ 2457 if (kreg->enable_addr % kreg->enable_size) 2458 return -EINVAL; 2459 2460 /* Ensure bit range for size */ 2461 if (kreg->enable_bit > (kreg->enable_size * BITS_PER_BYTE) - 1) 2462 return -EINVAL; 2463 2464 /* Ensure accessible */ 2465 if (!access_ok((const void __user *)(uintptr_t)kreg->enable_addr, 2466 kreg->enable_size)) 2467 return -EFAULT; 2468 2469 kreg->size = size; 2470 2471 return 0; 2472 } 2473 2474 /* 2475 * Registers a user_event on behalf of a user process. 2476 */ 2477 static long user_events_ioctl_reg(struct user_event_file_info *info, 2478 unsigned long uarg) 2479 { 2480 struct user_reg __user *ureg = (struct user_reg __user *)uarg; 2481 struct user_reg reg; 2482 struct user_event *user; 2483 struct user_event_enabler *enabler; 2484 char *name; 2485 long ret; 2486 int write_result; 2487 2488 ret = user_reg_get(ureg, ®); 2489 2490 if (ret) 2491 return ret; 2492 2493 /* 2494 * Prevent users from using the same address and bit multiple times 2495 * within the same mm address space. This can cause unexpected behavior 2496 * for user processes that is far easier to debug if this is explicitly 2497 * an error upon registering. 2498 */ 2499 if (current_user_event_enabler_exists((unsigned long)reg.enable_addr, 2500 reg.enable_bit)) 2501 return -EADDRINUSE; 2502 2503 name = strndup_user((const char __user *)(uintptr_t)reg.name_args, 2504 MAX_EVENT_DESC); 2505 2506 if (IS_ERR(name)) { 2507 ret = PTR_ERR(name); 2508 return ret; 2509 } 2510 2511 ret = user_event_parse_cmd(info->group, name, &user, reg.flags); 2512 2513 if (ret) { 2514 kfree(name); 2515 return ret; 2516 } 2517 2518 ret = user_events_ref_add(info, user); 2519 2520 /* No longer need parse ref, ref_add either worked or not */ 2521 user_event_put(user, false); 2522 2523 /* Positive number is index and valid */ 2524 if (ret < 0) 2525 return ret; 2526 2527 /* 2528 * user_events_ref_add succeeded: 2529 * At this point we have a user_event, it's lifetime is bound by the 2530 * reference count, not this file. If anything fails, the user_event 2531 * still has a reference until the file is released. During release 2532 * any remaining references (from user_events_ref_add) are decremented. 2533 * 2534 * Attempt to create an enabler, which too has a lifetime tied in the 2535 * same way for the event. Once the task that caused the enabler to be 2536 * created exits or issues exec() then the enablers it has created 2537 * will be destroyed and the ref to the event will be decremented. 2538 */ 2539 enabler = user_event_enabler_create(®, user, &write_result); 2540 2541 if (!enabler) 2542 return -ENOMEM; 2543 2544 /* Write failed/faulted, give error back to caller */ 2545 if (write_result) 2546 return write_result; 2547 2548 put_user((u32)ret, &ureg->write_index); 2549 2550 return 0; 2551 } 2552 2553 /* 2554 * Deletes a user_event on behalf of a user process. 2555 */ 2556 static long user_events_ioctl_del(struct user_event_file_info *info, 2557 unsigned long uarg) 2558 { 2559 void __user *ubuf = (void __user *)uarg; 2560 char *name; 2561 long ret; 2562 2563 name = strndup_user(ubuf, MAX_EVENT_DESC); 2564 2565 if (IS_ERR(name)) 2566 return PTR_ERR(name); 2567 2568 /* event_mutex prevents dyn_event from racing */ 2569 mutex_lock(&event_mutex); 2570 ret = delete_user_event(info->group, name); 2571 mutex_unlock(&event_mutex); 2572 2573 kfree(name); 2574 2575 return ret; 2576 } 2577 2578 static long user_unreg_get(struct user_unreg __user *ureg, 2579 struct user_unreg *kreg) 2580 { 2581 u32 size; 2582 long ret; 2583 2584 ret = get_user(size, &ureg->size); 2585 2586 if (ret) 2587 return ret; 2588 2589 if (size > PAGE_SIZE) 2590 return -E2BIG; 2591 2592 if (size < offsetofend(struct user_unreg, disable_addr)) 2593 return -EINVAL; 2594 2595 ret = copy_struct_from_user(kreg, sizeof(*kreg), ureg, size); 2596 2597 /* Ensure no reserved values, since we don't support any yet */ 2598 if (kreg->__reserved || kreg->__reserved2) 2599 return -EINVAL; 2600 2601 return ret; 2602 } 2603 2604 static int user_event_mm_clear_bit(struct user_event_mm *user_mm, 2605 unsigned long uaddr, unsigned char bit, 2606 unsigned long flags) 2607 { 2608 struct user_event_enabler enabler; 2609 int result; 2610 int attempt = 0; 2611 2612 memset(&enabler, 0, sizeof(enabler)); 2613 enabler.addr = uaddr; 2614 enabler.values = bit | flags; 2615 retry: 2616 /* Prevents state changes from racing with new enablers */ 2617 mutex_lock(&event_mutex); 2618 2619 /* Force the bit to be cleared, since no event is attached */ 2620 mmap_read_lock(user_mm->mm); 2621 result = user_event_enabler_write(user_mm, &enabler, false, &attempt); 2622 mmap_read_unlock(user_mm->mm); 2623 2624 mutex_unlock(&event_mutex); 2625 2626 if (result) { 2627 /* Attempt to fault-in and retry if it worked */ 2628 if (!user_event_mm_fault_in(user_mm, uaddr, attempt)) 2629 goto retry; 2630 } 2631 2632 return result; 2633 } 2634 2635 /* 2636 * Unregisters an enablement address/bit within a task/user mm. 2637 */ 2638 static long user_events_ioctl_unreg(unsigned long uarg) 2639 { 2640 struct user_unreg __user *ureg = (struct user_unreg __user *)uarg; 2641 struct user_event_mm *mm = current->user_event_mm; 2642 struct user_event_enabler *enabler, *next; 2643 struct user_unreg reg; 2644 unsigned long flags; 2645 long ret; 2646 2647 ret = user_unreg_get(ureg, ®); 2648 2649 if (ret) 2650 return ret; 2651 2652 if (!mm) 2653 return -ENOENT; 2654 2655 flags = 0; 2656 ret = -ENOENT; 2657 2658 /* 2659 * Flags freeing and faulting are used to indicate if the enabler is in 2660 * use at all. When faulting is set a page-fault is occurring asyncly. 2661 * During async fault if freeing is set, the enabler will be destroyed. 2662 * If no async fault is happening, we can destroy it now since we hold 2663 * the event_mutex during these checks. 2664 */ 2665 mutex_lock(&event_mutex); 2666 2667 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) { 2668 if (enabler->addr == reg.disable_addr && 2669 ENABLE_BIT(enabler) == reg.disable_bit) { 2670 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)); 2671 2672 /* We must keep compat flags for the clear */ 2673 flags |= enabler->values & ENABLE_VAL_COMPAT_MASK; 2674 2675 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler))) 2676 user_event_enabler_destroy(enabler); 2677 2678 /* Removed at least one */ 2679 ret = 0; 2680 } 2681 } 2682 2683 mutex_unlock(&event_mutex); 2684 2685 /* Ensure bit is now cleared for user, regardless of event status */ 2686 if (!ret) 2687 ret = user_event_mm_clear_bit(mm, reg.disable_addr, 2688 reg.disable_bit, flags); 2689 2690 return ret; 2691 } 2692 2693 /* 2694 * Handles the ioctl from user mode to register or alter operations. 2695 */ 2696 static long user_events_ioctl(struct file *file, unsigned int cmd, 2697 unsigned long uarg) 2698 { 2699 struct user_event_file_info *info = file->private_data; 2700 struct user_event_group *group = info->group; 2701 long ret = -ENOTTY; 2702 2703 switch (cmd) { 2704 case DIAG_IOCSREG: 2705 mutex_lock(&group->reg_mutex); 2706 ret = user_events_ioctl_reg(info, uarg); 2707 mutex_unlock(&group->reg_mutex); 2708 break; 2709 2710 case DIAG_IOCSDEL: 2711 mutex_lock(&group->reg_mutex); 2712 ret = user_events_ioctl_del(info, uarg); 2713 mutex_unlock(&group->reg_mutex); 2714 break; 2715 2716 case DIAG_IOCSUNREG: 2717 mutex_lock(&group->reg_mutex); 2718 ret = user_events_ioctl_unreg(uarg); 2719 mutex_unlock(&group->reg_mutex); 2720 break; 2721 } 2722 2723 return ret; 2724 } 2725 2726 /* 2727 * Handles the final close of the file from user mode. 2728 */ 2729 static int user_events_release(struct inode *node, struct file *file) 2730 { 2731 struct user_event_file_info *info = file->private_data; 2732 struct user_event_group *group; 2733 struct user_event_refs *refs; 2734 int i; 2735 2736 if (!info) 2737 return -EINVAL; 2738 2739 group = info->group; 2740 2741 /* 2742 * Ensure refs cannot change under any situation by taking the 2743 * register mutex during the final freeing of the references. 2744 */ 2745 mutex_lock(&group->reg_mutex); 2746 2747 refs = info->refs; 2748 2749 if (!refs) 2750 goto out; 2751 2752 /* 2753 * The lifetime of refs has reached an end, it's tied to this file. 2754 * The underlying user_events are ref counted, and cannot be freed. 2755 * After this decrement, the user_events may be freed elsewhere. 2756 */ 2757 for (i = 0; i < refs->count; ++i) 2758 user_event_put(refs->events[i], false); 2759 2760 out: 2761 file->private_data = NULL; 2762 2763 mutex_unlock(&group->reg_mutex); 2764 2765 kfree(refs); 2766 kfree(info); 2767 2768 return 0; 2769 } 2770 2771 static const struct file_operations user_data_fops = { 2772 .open = user_events_open, 2773 .write = user_events_write, 2774 .write_iter = user_events_write_iter, 2775 .unlocked_ioctl = user_events_ioctl, 2776 .release = user_events_release, 2777 }; 2778 2779 static void *user_seq_start(struct seq_file *m, loff_t *pos) 2780 { 2781 if (*pos) 2782 return NULL; 2783 2784 return (void *)1; 2785 } 2786 2787 static void *user_seq_next(struct seq_file *m, void *p, loff_t *pos) 2788 { 2789 ++*pos; 2790 return NULL; 2791 } 2792 2793 static void user_seq_stop(struct seq_file *m, void *p) 2794 { 2795 } 2796 2797 static int user_seq_show(struct seq_file *m, void *p) 2798 { 2799 struct user_event_group *group = m->private; 2800 struct user_event *user; 2801 char status; 2802 int i, active = 0, busy = 0; 2803 2804 if (!group) 2805 return -EINVAL; 2806 2807 mutex_lock(&group->reg_mutex); 2808 2809 hash_for_each(group->register_table, i, user, node) { 2810 status = user->status; 2811 2812 seq_puts(m, EVENT_TP_NAME(user)); 2813 2814 if (status != 0) { 2815 seq_puts(m, " # Used by"); 2816 if (status & EVENT_STATUS_FTRACE) 2817 seq_puts(m, " ftrace"); 2818 if (status & EVENT_STATUS_PERF) 2819 seq_puts(m, " perf"); 2820 if (status & EVENT_STATUS_OTHER) 2821 seq_puts(m, " other"); 2822 busy++; 2823 } 2824 2825 seq_putc(m, '\n'); 2826 active++; 2827 } 2828 2829 mutex_unlock(&group->reg_mutex); 2830 2831 seq_putc(m, '\n'); 2832 seq_printf(m, "Active: %d\n", active); 2833 seq_printf(m, "Busy: %d\n", busy); 2834 2835 return 0; 2836 } 2837 2838 static const struct seq_operations user_seq_ops = { 2839 .start = user_seq_start, 2840 .next = user_seq_next, 2841 .stop = user_seq_stop, 2842 .show = user_seq_show, 2843 }; 2844 2845 static int user_status_open(struct inode *node, struct file *file) 2846 { 2847 struct user_event_group *group; 2848 int ret; 2849 2850 group = current_user_event_group(); 2851 2852 if (!group) 2853 return -ENOENT; 2854 2855 ret = seq_open(file, &user_seq_ops); 2856 2857 if (!ret) { 2858 /* Chain group to seq_file */ 2859 struct seq_file *m = file->private_data; 2860 2861 m->private = group; 2862 } 2863 2864 return ret; 2865 } 2866 2867 static const struct file_operations user_status_fops = { 2868 .open = user_status_open, 2869 .read = seq_read, 2870 .llseek = seq_lseek, 2871 .release = seq_release, 2872 }; 2873 2874 /* 2875 * Creates a set of tracefs files to allow user mode interactions. 2876 */ 2877 static int create_user_tracefs(void) 2878 { 2879 struct dentry *edata, *emmap; 2880 2881 edata = tracefs_create_file("user_events_data", TRACE_MODE_WRITE, 2882 NULL, NULL, &user_data_fops); 2883 2884 if (!edata) { 2885 pr_warn("Could not create tracefs 'user_events_data' entry\n"); 2886 goto err; 2887 } 2888 2889 emmap = tracefs_create_file("user_events_status", TRACE_MODE_READ, 2890 NULL, NULL, &user_status_fops); 2891 2892 if (!emmap) { 2893 tracefs_remove(edata); 2894 pr_warn("Could not create tracefs 'user_events_mmap' entry\n"); 2895 goto err; 2896 } 2897 2898 return 0; 2899 err: 2900 return -ENODEV; 2901 } 2902 2903 static int set_max_user_events_sysctl(const struct ctl_table *table, int write, 2904 void *buffer, size_t *lenp, loff_t *ppos) 2905 { 2906 int ret; 2907 2908 mutex_lock(&event_mutex); 2909 2910 ret = proc_douintvec(table, write, buffer, lenp, ppos); 2911 2912 mutex_unlock(&event_mutex); 2913 2914 return ret; 2915 } 2916 2917 static const struct ctl_table user_event_sysctls[] = { 2918 { 2919 .procname = "user_events_max", 2920 .data = &max_user_events, 2921 .maxlen = sizeof(unsigned int), 2922 .mode = 0644, 2923 .proc_handler = set_max_user_events_sysctl, 2924 }, 2925 }; 2926 2927 static int __init trace_events_user_init(void) 2928 { 2929 int ret; 2930 2931 fault_cache = KMEM_CACHE(user_event_enabler_fault, 0); 2932 2933 if (!fault_cache) 2934 return -ENOMEM; 2935 2936 init_group = user_event_group_create(); 2937 2938 if (!init_group) { 2939 kmem_cache_destroy(fault_cache); 2940 return -ENOMEM; 2941 } 2942 2943 ret = create_user_tracefs(); 2944 2945 if (ret) { 2946 pr_warn("user_events could not register with tracefs\n"); 2947 user_event_group_destroy(init_group); 2948 kmem_cache_destroy(fault_cache); 2949 init_group = NULL; 2950 return ret; 2951 } 2952 2953 if (dyn_event_register(&user_event_dops)) 2954 pr_warn("user_events could not register with dyn_events\n"); 2955 2956 register_sysctl_init("kernel", user_event_sysctls); 2957 2958 return 0; 2959 } 2960 2961 fs_initcall(trace_events_user_init); 2962