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 if (!mm) 872 return; 873 874 rcu_read_lock(); 875 876 list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link) { 877 if (!user_event_enabler_dup(enabler, mm)) 878 goto error; 879 } 880 881 rcu_read_unlock(); 882 883 user_event_mm_attach(mm, t); 884 return; 885 error: 886 rcu_read_unlock(); 887 user_event_mm_destroy(mm); 888 } 889 890 static bool current_user_event_enabler_exists(unsigned long uaddr, 891 unsigned char bit) 892 { 893 struct user_event_mm *user_mm = current_user_event_mm(); 894 bool exists; 895 896 if (!user_mm) 897 return false; 898 899 exists = user_event_enabler_exists(user_mm, uaddr, bit); 900 901 user_event_mm_put(user_mm); 902 903 return exists; 904 } 905 906 static struct user_event_enabler 907 *user_event_enabler_create(struct user_reg *reg, struct user_event *user, 908 int *write_result) 909 { 910 struct user_event_enabler *enabler; 911 struct user_event_mm *user_mm; 912 unsigned long uaddr = (unsigned long)reg->enable_addr; 913 int attempt = 0; 914 915 user_mm = current_user_event_mm(); 916 917 if (!user_mm) 918 return NULL; 919 920 enabler = kzalloc_obj(*enabler, GFP_KERNEL_ACCOUNT); 921 922 if (!enabler) 923 goto out; 924 925 enabler->event = user; 926 enabler->addr = uaddr; 927 enabler->values = reg->enable_bit; 928 929 #if BITS_PER_LONG >= 64 930 if (reg->enable_size == 4) 931 set_bit(ENABLE_VAL_32_ON_64_BIT, ENABLE_BITOPS(enabler)); 932 #endif 933 934 retry: 935 /* Prevents state changes from racing with new enablers */ 936 mutex_lock(&event_mutex); 937 938 /* Attempt to reflect the current state within the process */ 939 mmap_read_lock(user_mm->mm); 940 *write_result = user_event_enabler_write(user_mm, enabler, false, 941 &attempt); 942 mmap_read_unlock(user_mm->mm); 943 944 /* 945 * If the write works, then we will track the enabler. A ref to the 946 * underlying user_event is held by the enabler to prevent it going 947 * away while the enabler is still in use by a process. The ref is 948 * removed when the enabler is destroyed. This means a event cannot 949 * be forcefully deleted from the system until all tasks using it 950 * exit or run exec(), which includes forks and clones. 951 */ 952 if (!*write_result) { 953 user_event_get(user); 954 list_add_rcu(&enabler->mm_enablers_link, &user_mm->enablers); 955 } 956 957 mutex_unlock(&event_mutex); 958 959 if (*write_result) { 960 /* Attempt to fault-in and retry if it worked */ 961 if (!user_event_mm_fault_in(user_mm, uaddr, attempt)) 962 goto retry; 963 964 kfree(enabler); 965 enabler = NULL; 966 } 967 out: 968 user_event_mm_put(user_mm); 969 970 return enabler; 971 } 972 973 static __always_inline __must_check 974 bool user_event_last_ref(struct user_event *user) 975 { 976 int last = 0; 977 978 if (user->reg_flags & USER_EVENT_REG_PERSIST) 979 last = 1; 980 981 return refcount_read(&user->refcnt) == last; 982 } 983 984 static __always_inline __must_check 985 size_t copy_nofault(void *addr, size_t bytes, struct iov_iter *i) 986 { 987 size_t ret; 988 989 pagefault_disable(); 990 991 ret = copy_from_iter_nocache(addr, bytes, i); 992 993 pagefault_enable(); 994 995 return ret; 996 } 997 998 static struct list_head *user_event_get_fields(struct trace_event_call *call) 999 { 1000 struct user_event *user = (struct user_event *)call->data; 1001 1002 return &user->fields; 1003 } 1004 1005 /* 1006 * Parses a register command for user_events 1007 * Format: event_name[:FLAG1[,FLAG2...]] [field1[;field2...]] 1008 * 1009 * Example event named 'test' with a 20 char 'msg' field with an unsigned int 1010 * 'id' field after: 1011 * test char[20] msg;unsigned int id 1012 * 1013 * NOTE: Offsets are from the user data perspective, they are not from the 1014 * trace_entry/buffer perspective. We automatically add the common properties 1015 * sizes to the offset for the user. 1016 * 1017 * Upon success user_event has its ref count increased by 1. 1018 */ 1019 static int user_event_parse_cmd(struct user_event_group *group, 1020 char *raw_command, struct user_event **newuser, 1021 int reg_flags) 1022 { 1023 char *name = raw_command; 1024 char *args = strpbrk(name, " "); 1025 char *flags; 1026 1027 if (args) 1028 *args++ = '\0'; 1029 1030 flags = strpbrk(name, ":"); 1031 1032 if (flags) 1033 *flags++ = '\0'; 1034 1035 return user_event_parse(group, name, args, flags, newuser, reg_flags); 1036 } 1037 1038 static int user_field_array_size(const char *type) 1039 { 1040 const char *start = strchr(type, '['); 1041 char val[8]; 1042 char *bracket; 1043 int size = 0; 1044 1045 if (start == NULL) 1046 return -EINVAL; 1047 1048 if (strscpy(val, start + 1, sizeof(val)) <= 0) 1049 return -EINVAL; 1050 1051 bracket = strchr(val, ']'); 1052 1053 if (!bracket) 1054 return -EINVAL; 1055 1056 *bracket = '\0'; 1057 1058 if (kstrtouint(val, 0, &size)) 1059 return -EINVAL; 1060 1061 if (size > MAX_FIELD_ARRAY_SIZE) 1062 return -EINVAL; 1063 1064 return size; 1065 } 1066 1067 static int user_field_size(const char *type) 1068 { 1069 /* long is not allowed from a user, since it's ambiguous in size */ 1070 if (strcmp(type, "s64") == 0) 1071 return sizeof(s64); 1072 if (strcmp(type, "u64") == 0) 1073 return sizeof(u64); 1074 if (strcmp(type, "s32") == 0) 1075 return sizeof(s32); 1076 if (strcmp(type, "u32") == 0) 1077 return sizeof(u32); 1078 if (strcmp(type, "int") == 0) 1079 return sizeof(int); 1080 if (strcmp(type, "unsigned int") == 0) 1081 return sizeof(unsigned int); 1082 if (strcmp(type, "s16") == 0) 1083 return sizeof(s16); 1084 if (strcmp(type, "u16") == 0) 1085 return sizeof(u16); 1086 if (strcmp(type, "short") == 0) 1087 return sizeof(short); 1088 if (strcmp(type, "unsigned short") == 0) 1089 return sizeof(unsigned short); 1090 if (strcmp(type, "s8") == 0) 1091 return sizeof(s8); 1092 if (strcmp(type, "u8") == 0) 1093 return sizeof(u8); 1094 if (strcmp(type, "char") == 0) 1095 return sizeof(char); 1096 if (strcmp(type, "unsigned char") == 0) 1097 return sizeof(unsigned char); 1098 if (str_has_prefix(type, "char[")) 1099 return user_field_array_size(type); 1100 if (str_has_prefix(type, "unsigned char[")) 1101 return user_field_array_size(type); 1102 if (str_has_prefix(type, "__data_loc ")) 1103 return sizeof(u32); 1104 if (str_has_prefix(type, "__rel_loc ")) 1105 return sizeof(u32); 1106 1107 /* Unknown basic type, error */ 1108 return -EINVAL; 1109 } 1110 1111 static void user_event_destroy_validators(struct user_event *user) 1112 { 1113 struct user_event_validator *validator, *next; 1114 struct list_head *head = &user->validators; 1115 1116 list_for_each_entry_safe(validator, next, head, user_event_link) { 1117 list_del(&validator->user_event_link); 1118 kfree(validator); 1119 } 1120 } 1121 1122 static void user_event_destroy_fields(struct user_event *user) 1123 { 1124 struct ftrace_event_field *field, *next; 1125 struct list_head *head = &user->fields; 1126 1127 list_for_each_entry_safe(field, next, head, link) { 1128 list_del(&field->link); 1129 kfree(field); 1130 } 1131 } 1132 1133 static int user_event_add_field(struct user_event *user, const char *type, 1134 const char *name, int offset, int size, 1135 int is_signed, int filter_type) 1136 { 1137 struct user_event_validator *validator; 1138 struct ftrace_event_field *field; 1139 int validator_flags = 0; 1140 1141 field = kmalloc_obj(*field, GFP_KERNEL_ACCOUNT); 1142 1143 if (!field) 1144 return -ENOMEM; 1145 1146 if (str_has_prefix(type, "__data_loc ")) 1147 goto add_validator; 1148 1149 if (str_has_prefix(type, "__rel_loc ")) { 1150 validator_flags |= VALIDATOR_REL; 1151 goto add_validator; 1152 } 1153 1154 goto add_field; 1155 1156 add_validator: 1157 if (strstr(type, "char") != NULL) 1158 validator_flags |= VALIDATOR_ENSURE_NULL; 1159 1160 validator = kmalloc_obj(*validator, GFP_KERNEL_ACCOUNT); 1161 1162 if (!validator) { 1163 kfree(field); 1164 return -ENOMEM; 1165 } 1166 1167 validator->flags = validator_flags; 1168 validator->offset = offset; 1169 1170 /* Want sequential access when validating */ 1171 list_add_tail(&validator->user_event_link, &user->validators); 1172 1173 add_field: 1174 field->type = type; 1175 field->name = name; 1176 field->offset = offset; 1177 field->size = size; 1178 field->is_signed = is_signed; 1179 field->filter_type = filter_type; 1180 1181 if (filter_type == FILTER_OTHER) 1182 field->filter_type = filter_assign_type(type); 1183 1184 list_add(&field->link, &user->fields); 1185 1186 /* 1187 * Min size from user writes that are required, this does not include 1188 * the size of trace_entry (common fields). 1189 */ 1190 user->min_size = (offset + size) - sizeof(struct trace_entry); 1191 1192 return 0; 1193 } 1194 1195 /* 1196 * Parses the values of a field within the description 1197 * Format: type name [size] 1198 */ 1199 static int user_event_parse_field(char *field, struct user_event *user, 1200 u32 *offset) 1201 { 1202 char *part, *type, *name; 1203 u32 depth = 0, saved_offset = *offset; 1204 int len, size = -EINVAL; 1205 bool is_struct = false; 1206 1207 field = skip_spaces(field); 1208 1209 if (*field == '\0') 1210 return 0; 1211 1212 /* Handle types that have a space within */ 1213 len = str_has_prefix(field, "unsigned "); 1214 if (len) 1215 goto skip_next; 1216 1217 len = str_has_prefix(field, "struct "); 1218 if (len) { 1219 is_struct = true; 1220 goto skip_next; 1221 } 1222 1223 len = str_has_prefix(field, "__data_loc unsigned "); 1224 if (len) 1225 goto skip_next; 1226 1227 len = str_has_prefix(field, "__data_loc "); 1228 if (len) 1229 goto skip_next; 1230 1231 len = str_has_prefix(field, "__rel_loc unsigned "); 1232 if (len) 1233 goto skip_next; 1234 1235 len = str_has_prefix(field, "__rel_loc "); 1236 if (len) 1237 goto skip_next; 1238 1239 goto parse; 1240 skip_next: 1241 type = field; 1242 field = strpbrk(field + len, " "); 1243 1244 if (field == NULL) 1245 return -EINVAL; 1246 1247 *field++ = '\0'; 1248 depth++; 1249 parse: 1250 name = NULL; 1251 1252 while ((part = strsep(&field, " ")) != NULL) { 1253 switch (depth++) { 1254 case FIELD_DEPTH_TYPE: 1255 type = part; 1256 break; 1257 case FIELD_DEPTH_NAME: 1258 name = part; 1259 break; 1260 case FIELD_DEPTH_SIZE: 1261 if (!is_struct) 1262 return -EINVAL; 1263 1264 if (kstrtou32(part, 10, &size)) 1265 return -EINVAL; 1266 break; 1267 default: 1268 return -EINVAL; 1269 } 1270 } 1271 1272 if (depth < FIELD_DEPTH_SIZE || !name) 1273 return -EINVAL; 1274 1275 if (depth == FIELD_DEPTH_SIZE) 1276 size = user_field_size(type); 1277 1278 if (size == 0) 1279 return -EINVAL; 1280 1281 if (size < 0) 1282 return size; 1283 1284 *offset = saved_offset + size; 1285 1286 return user_event_add_field(user, type, name, saved_offset, size, 1287 type[0] != 'u', FILTER_OTHER); 1288 } 1289 1290 static int user_event_parse_fields(struct user_event *user, char *args) 1291 { 1292 char *field; 1293 u32 offset = sizeof(struct trace_entry); 1294 int ret = -EINVAL; 1295 1296 if (args == NULL) 1297 return 0; 1298 1299 while ((field = strsep(&args, ";")) != NULL) { 1300 ret = user_event_parse_field(field, user, &offset); 1301 1302 if (ret) 1303 break; 1304 } 1305 1306 return ret; 1307 } 1308 1309 static struct trace_event_fields user_event_fields_array[1]; 1310 1311 static const char *user_field_format(const char *type) 1312 { 1313 if (strcmp(type, "s64") == 0) 1314 return "%lld"; 1315 if (strcmp(type, "u64") == 0) 1316 return "%llu"; 1317 if (strcmp(type, "s32") == 0) 1318 return "%d"; 1319 if (strcmp(type, "u32") == 0) 1320 return "%u"; 1321 if (strcmp(type, "int") == 0) 1322 return "%d"; 1323 if (strcmp(type, "unsigned int") == 0) 1324 return "%u"; 1325 if (strcmp(type, "s16") == 0) 1326 return "%d"; 1327 if (strcmp(type, "u16") == 0) 1328 return "%u"; 1329 if (strcmp(type, "short") == 0) 1330 return "%d"; 1331 if (strcmp(type, "unsigned short") == 0) 1332 return "%u"; 1333 if (strcmp(type, "s8") == 0) 1334 return "%d"; 1335 if (strcmp(type, "u8") == 0) 1336 return "%u"; 1337 if (strcmp(type, "char") == 0) 1338 return "%d"; 1339 if (strcmp(type, "unsigned char") == 0) 1340 return "%u"; 1341 if (strstr(type, "char[") != NULL) 1342 return "%s"; 1343 1344 /* Unknown, likely struct, allowed treat as 64-bit */ 1345 return "%llu"; 1346 } 1347 1348 static bool user_field_is_dyn_string(const char *type, const char **str_func) 1349 { 1350 if (str_has_prefix(type, "__data_loc ")) { 1351 *str_func = "__get_str"; 1352 goto check; 1353 } 1354 1355 if (str_has_prefix(type, "__rel_loc ")) { 1356 *str_func = "__get_rel_str"; 1357 goto check; 1358 } 1359 1360 return false; 1361 check: 1362 return strstr(type, "char") != NULL; 1363 } 1364 1365 #define LEN_OR_ZERO (len ? len - pos : 0) 1366 static int user_dyn_field_set_string(int argc, const char **argv, int *iout, 1367 char *buf, int len, bool *colon) 1368 { 1369 int pos = 0, i = *iout; 1370 1371 *colon = false; 1372 1373 for (; i < argc; ++i) { 1374 if (i != *iout) 1375 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1376 1377 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", argv[i]); 1378 1379 if (strchr(argv[i], ';')) { 1380 ++i; 1381 *colon = true; 1382 break; 1383 } 1384 } 1385 1386 /* Actual set, advance i */ 1387 if (len != 0) 1388 *iout = i; 1389 1390 return pos + 1; 1391 } 1392 1393 static int user_field_set_string(struct ftrace_event_field *field, 1394 char *buf, int len, bool colon) 1395 { 1396 int pos = 0; 1397 1398 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", field->type); 1399 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1400 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s", field->name); 1401 1402 if (str_has_prefix(field->type, "struct ")) 1403 pos += snprintf(buf + pos, LEN_OR_ZERO, " %d", field->size); 1404 1405 if (colon) 1406 pos += snprintf(buf + pos, LEN_OR_ZERO, ";"); 1407 1408 return pos + 1; 1409 } 1410 1411 static int user_event_set_print_fmt(struct user_event *user, char *buf, int len) 1412 { 1413 struct ftrace_event_field *field; 1414 struct list_head *head = &user->fields; 1415 int pos = 0, depth = 0; 1416 const char *str_func; 1417 1418 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); 1419 1420 list_for_each_entry_reverse(field, head, link) { 1421 if (depth != 0) 1422 pos += snprintf(buf + pos, LEN_OR_ZERO, " "); 1423 1424 pos += snprintf(buf + pos, LEN_OR_ZERO, "%s=%s", 1425 field->name, user_field_format(field->type)); 1426 1427 depth++; 1428 } 1429 1430 pos += snprintf(buf + pos, LEN_OR_ZERO, "\""); 1431 1432 list_for_each_entry_reverse(field, head, link) { 1433 if (user_field_is_dyn_string(field->type, &str_func)) 1434 pos += snprintf(buf + pos, LEN_OR_ZERO, 1435 ", %s(%s)", str_func, field->name); 1436 else 1437 pos += snprintf(buf + pos, LEN_OR_ZERO, 1438 ", REC->%s", field->name); 1439 } 1440 1441 return pos + 1; 1442 } 1443 #undef LEN_OR_ZERO 1444 1445 static int user_event_create_print_fmt(struct user_event *user) 1446 { 1447 char *print_fmt; 1448 int len; 1449 1450 len = user_event_set_print_fmt(user, NULL, 0); 1451 1452 print_fmt = kmalloc(len, GFP_KERNEL_ACCOUNT); 1453 1454 if (!print_fmt) 1455 return -ENOMEM; 1456 1457 user_event_set_print_fmt(user, print_fmt, len); 1458 1459 user->call.print_fmt = print_fmt; 1460 1461 return 0; 1462 } 1463 1464 static enum print_line_t user_event_print_trace(struct trace_iterator *iter, 1465 int flags, 1466 struct trace_event *event) 1467 { 1468 return print_event_fields(iter, event); 1469 } 1470 1471 static struct trace_event_functions user_event_funcs = { 1472 .trace = user_event_print_trace, 1473 }; 1474 1475 static int user_event_set_call_visible(struct user_event *user, bool visible) 1476 { 1477 CLASS(prepare_creds, cred)(); 1478 if (!cred) 1479 return -ENOMEM; 1480 1481 /* 1482 * While by default tracefs is locked down, systems can be configured 1483 * to allow user_event files to be less locked down. The extreme case 1484 * being "other" has read/write access to user_events_data/status. 1485 * 1486 * When not locked down, processes may not have permissions to 1487 * add/remove calls themselves to tracefs. We need to temporarily 1488 * switch to root file permission to allow for this scenario. 1489 */ 1490 cred->fsuid = GLOBAL_ROOT_UID; 1491 1492 scoped_with_creds(cred) { 1493 if (visible) 1494 return trace_add_event_call(&user->call); 1495 1496 return trace_remove_event_call(&user->call); 1497 } 1498 } 1499 1500 static int destroy_user_event(struct user_event *user) 1501 { 1502 int ret = 0; 1503 1504 lockdep_assert_held(&event_mutex); 1505 1506 /* Must destroy fields before call removal */ 1507 user_event_destroy_fields(user); 1508 1509 ret = user_event_set_call_visible(user, false); 1510 1511 if (ret) 1512 return ret; 1513 1514 dyn_event_remove(&user->devent); 1515 hash_del(&user->node); 1516 1517 user_event_destroy_validators(user); 1518 1519 /* If we have different names, both must be freed */ 1520 if (EVENT_NAME(user) != EVENT_TP_NAME(user)) 1521 kfree(EVENT_TP_NAME(user)); 1522 1523 kfree(user->call.print_fmt); 1524 kfree(EVENT_NAME(user)); 1525 kfree(user); 1526 1527 if (current_user_events > 0) 1528 current_user_events--; 1529 else 1530 pr_alert("BUG: Bad current_user_events\n"); 1531 1532 return ret; 1533 } 1534 1535 static struct user_event *find_user_event(struct user_event_group *group, 1536 char *name, int argc, const char **argv, 1537 u32 flags, u32 *outkey) 1538 { 1539 struct user_event *user; 1540 u32 key = user_event_key(name); 1541 1542 *outkey = key; 1543 1544 hash_for_each_possible(group->register_table, user, node, key) { 1545 /* 1546 * Single-format events shouldn't return multi-format 1547 * events. Callers expect the underlying tracepoint to match 1548 * the name exactly in these cases. Only check like-formats. 1549 */ 1550 if (EVENT_MULTI_FORMAT(flags) != EVENT_MULTI_FORMAT(user->reg_flags)) 1551 continue; 1552 1553 if (strcmp(EVENT_NAME(user), name)) 1554 continue; 1555 1556 if (user_fields_match(user, argc, argv)) 1557 return user_event_get(user); 1558 1559 /* Scan others if this is a multi-format event */ 1560 if (EVENT_MULTI_FORMAT(flags)) 1561 continue; 1562 1563 return ERR_PTR(-EADDRINUSE); 1564 } 1565 1566 return NULL; 1567 } 1568 1569 static int user_event_validate(struct user_event *user, void *data, int len) 1570 { 1571 struct list_head *head = &user->validators; 1572 struct user_event_validator *validator; 1573 void *pos, *end = data + len; 1574 u32 loc, offset, size; 1575 1576 list_for_each_entry(validator, head, user_event_link) { 1577 pos = data + validator->offset; 1578 1579 /* Already done min_size check, no bounds check here */ 1580 loc = *(u32 *)pos; 1581 offset = loc & 0xffff; 1582 size = loc >> 16; 1583 1584 if (likely(validator->flags & VALIDATOR_REL)) 1585 pos += offset + sizeof(loc); 1586 else 1587 pos = data + offset; 1588 1589 pos += size; 1590 1591 if (unlikely(pos > end)) 1592 return -EFAULT; 1593 1594 if (likely(validator->flags & VALIDATOR_ENSURE_NULL)) 1595 if (unlikely(*(char *)(pos - 1) != '\0')) 1596 return -EFAULT; 1597 } 1598 1599 return 0; 1600 } 1601 1602 /* 1603 * Writes the user supplied payload out to a trace file. 1604 */ 1605 static void user_event_ftrace(struct user_event *user, struct iov_iter *i, 1606 void *tpdata, bool *faulted) 1607 { 1608 struct trace_event_file *file; 1609 struct trace_entry *entry; 1610 struct trace_event_buffer event_buffer; 1611 size_t size = sizeof(*entry) + i->count; 1612 1613 file = (struct trace_event_file *)tpdata; 1614 1615 if (!file || 1616 !(file->flags & EVENT_FILE_FL_ENABLED) || 1617 trace_trigger_soft_disabled(file)) 1618 return; 1619 1620 /* Allocates and fills trace_entry, + 1 of this is data payload */ 1621 entry = trace_event_buffer_reserve(&event_buffer, file, size); 1622 1623 if (unlikely(!entry)) 1624 return; 1625 1626 if (unlikely(i->count != 0 && !copy_nofault(entry + 1, i->count, i))) 1627 goto discard; 1628 1629 if (!list_empty(&user->validators) && 1630 unlikely(user_event_validate(user, entry, size))) 1631 goto discard; 1632 1633 trace_event_buffer_commit(&event_buffer); 1634 1635 return; 1636 discard: 1637 *faulted = true; 1638 __trace_event_discard_commit(event_buffer.buffer, 1639 event_buffer.event); 1640 } 1641 1642 #ifdef CONFIG_PERF_EVENTS 1643 /* 1644 * Writes the user supplied payload out to perf ring buffer. 1645 */ 1646 static void user_event_perf(struct user_event *user, struct iov_iter *i, 1647 void *tpdata, bool *faulted) 1648 { 1649 struct hlist_head *perf_head; 1650 1651 perf_head = this_cpu_ptr(user->call.perf_events); 1652 1653 if (perf_head && !hlist_empty(perf_head)) { 1654 struct trace_entry *perf_entry; 1655 struct pt_regs *regs; 1656 size_t size = sizeof(*perf_entry) + i->count; 1657 int context; 1658 1659 perf_entry = perf_trace_buf_alloc(ALIGN(size, 8), 1660 ®s, &context); 1661 1662 if (unlikely(!perf_entry)) 1663 return; 1664 1665 perf_fetch_caller_regs(regs); 1666 1667 if (unlikely(i->count != 0 && !copy_nofault(perf_entry + 1, i->count, i))) 1668 goto discard; 1669 1670 if (!list_empty(&user->validators) && 1671 unlikely(user_event_validate(user, perf_entry, size))) 1672 goto discard; 1673 1674 perf_trace_buf_submit(perf_entry, size, context, 1675 user->call.event.type, 1, regs, 1676 perf_head, NULL); 1677 1678 return; 1679 discard: 1680 *faulted = true; 1681 perf_swevent_put_recursion_context(context); 1682 } 1683 } 1684 #endif 1685 1686 /* 1687 * Update the enabled bit among all user processes. 1688 */ 1689 static void update_enable_bit_for(struct user_event *user) 1690 { 1691 struct tracepoint *tp = &user->tracepoint; 1692 char status = 0; 1693 1694 if (static_key_enabled(&tp->key)) { 1695 struct tracepoint_func *probe_func_ptr; 1696 user_event_func_t probe_func; 1697 1698 rcu_read_lock_sched(); 1699 1700 probe_func_ptr = rcu_dereference_sched(tp->funcs); 1701 1702 if (probe_func_ptr) { 1703 do { 1704 probe_func = probe_func_ptr->func; 1705 1706 if (probe_func == user_event_ftrace) 1707 status |= EVENT_STATUS_FTRACE; 1708 #ifdef CONFIG_PERF_EVENTS 1709 else if (probe_func == user_event_perf) 1710 status |= EVENT_STATUS_PERF; 1711 #endif 1712 else 1713 status |= EVENT_STATUS_OTHER; 1714 } while ((++probe_func_ptr)->func); 1715 } 1716 1717 rcu_read_unlock_sched(); 1718 } 1719 1720 user->status = status; 1721 1722 user_event_enabler_update(user); 1723 } 1724 1725 /* 1726 * Register callback for our events from tracing sub-systems. 1727 */ 1728 static int user_event_reg(struct trace_event_call *call, 1729 enum trace_reg type, 1730 void *data) 1731 { 1732 struct user_event *user = (struct user_event *)call->data; 1733 int ret = 0; 1734 1735 if (!user) 1736 return -ENOENT; 1737 1738 switch (type) { 1739 case TRACE_REG_REGISTER: 1740 ret = tracepoint_probe_register(call->tp, 1741 call->class->probe, 1742 data); 1743 if (!ret) 1744 goto inc; 1745 break; 1746 1747 case TRACE_REG_UNREGISTER: 1748 tracepoint_probe_unregister(call->tp, 1749 call->class->probe, 1750 data); 1751 goto dec; 1752 1753 #ifdef CONFIG_PERF_EVENTS 1754 case TRACE_REG_PERF_REGISTER: 1755 ret = tracepoint_probe_register(call->tp, 1756 call->class->perf_probe, 1757 data); 1758 if (!ret) 1759 goto inc; 1760 break; 1761 1762 case TRACE_REG_PERF_UNREGISTER: 1763 tracepoint_probe_unregister(call->tp, 1764 call->class->perf_probe, 1765 data); 1766 goto dec; 1767 1768 case TRACE_REG_PERF_OPEN: 1769 case TRACE_REG_PERF_CLOSE: 1770 case TRACE_REG_PERF_ADD: 1771 case TRACE_REG_PERF_DEL: 1772 break; 1773 #endif 1774 } 1775 1776 return ret; 1777 inc: 1778 user_event_get(user); 1779 update_enable_bit_for(user); 1780 return 0; 1781 dec: 1782 update_enable_bit_for(user); 1783 user_event_put(user, true); 1784 return 0; 1785 } 1786 1787 static int user_event_create(const char *raw_command) 1788 { 1789 struct user_event_group *group; 1790 struct user_event *user; 1791 char *name; 1792 int ret; 1793 1794 if (!str_has_prefix(raw_command, USER_EVENTS_PREFIX)) 1795 return -ECANCELED; 1796 1797 raw_command += USER_EVENTS_PREFIX_LEN; 1798 raw_command = skip_spaces(raw_command); 1799 1800 name = kstrdup(raw_command, GFP_KERNEL_ACCOUNT); 1801 1802 if (!name) 1803 return -ENOMEM; 1804 1805 group = current_user_event_group(); 1806 1807 if (!group) { 1808 kfree(name); 1809 return -ENOENT; 1810 } 1811 1812 mutex_lock(&group->reg_mutex); 1813 1814 /* Dyn events persist, otherwise they would cleanup immediately */ 1815 ret = user_event_parse_cmd(group, name, &user, USER_EVENT_REG_PERSIST); 1816 1817 if (!ret) 1818 user_event_put(user, false); 1819 1820 mutex_unlock(&group->reg_mutex); 1821 1822 if (ret) 1823 kfree(name); 1824 1825 return ret; 1826 } 1827 1828 static int user_event_show(struct seq_file *m, struct dyn_event *ev) 1829 { 1830 struct user_event *user = container_of(ev, struct user_event, devent); 1831 struct ftrace_event_field *field; 1832 struct list_head *head; 1833 int depth = 0; 1834 1835 seq_printf(m, "%s%s", USER_EVENTS_PREFIX, EVENT_NAME(user)); 1836 1837 head = trace_get_fields(&user->call); 1838 1839 list_for_each_entry_reverse(field, head, link) { 1840 if (depth == 0) 1841 seq_puts(m, " "); 1842 else 1843 seq_puts(m, "; "); 1844 1845 seq_printf(m, "%s %s", field->type, field->name); 1846 1847 if (str_has_prefix(field->type, "struct ")) 1848 seq_printf(m, " %d", field->size); 1849 1850 depth++; 1851 } 1852 1853 seq_puts(m, "\n"); 1854 1855 return 0; 1856 } 1857 1858 static bool user_event_is_busy(struct dyn_event *ev) 1859 { 1860 struct user_event *user = container_of(ev, struct user_event, devent); 1861 1862 return !user_event_last_ref(user); 1863 } 1864 1865 static int user_event_free(struct dyn_event *ev) 1866 { 1867 struct user_event *user = container_of(ev, struct user_event, devent); 1868 1869 if (!user_event_last_ref(user)) 1870 return -EBUSY; 1871 1872 if (!user_event_capable(user->reg_flags)) 1873 return -EPERM; 1874 1875 return destroy_user_event(user); 1876 } 1877 1878 static bool user_field_match(struct ftrace_event_field *field, int argc, 1879 const char **argv, int *iout) 1880 { 1881 char *field_name = NULL, *dyn_field_name = NULL; 1882 bool colon = false, match = false; 1883 int dyn_len, len; 1884 1885 if (*iout >= argc) 1886 return false; 1887 1888 dyn_len = user_dyn_field_set_string(argc, argv, iout, dyn_field_name, 1889 0, &colon); 1890 1891 len = user_field_set_string(field, field_name, 0, colon); 1892 1893 if (dyn_len != len) 1894 return false; 1895 1896 dyn_field_name = kmalloc(dyn_len, GFP_KERNEL); 1897 field_name = kmalloc(len, GFP_KERNEL); 1898 1899 if (!dyn_field_name || !field_name) 1900 goto out; 1901 1902 user_dyn_field_set_string(argc, argv, iout, dyn_field_name, 1903 dyn_len, &colon); 1904 1905 user_field_set_string(field, field_name, len, colon); 1906 1907 match = strcmp(dyn_field_name, field_name) == 0; 1908 out: 1909 kfree(dyn_field_name); 1910 kfree(field_name); 1911 1912 return match; 1913 } 1914 1915 static bool user_fields_match(struct user_event *user, int argc, 1916 const char **argv) 1917 { 1918 struct ftrace_event_field *field; 1919 struct list_head *head = &user->fields; 1920 int i = 0; 1921 1922 if (argc == 0) 1923 return list_empty(head); 1924 1925 list_for_each_entry_reverse(field, head, link) { 1926 if (!user_field_match(field, argc, argv, &i)) 1927 return false; 1928 } 1929 1930 if (i != argc) 1931 return false; 1932 1933 return true; 1934 } 1935 1936 static bool user_event_match(const char *system, const char *event, 1937 int argc, const char **argv, struct dyn_event *ev) 1938 { 1939 struct user_event *user = container_of(ev, struct user_event, devent); 1940 bool match; 1941 1942 match = strcmp(EVENT_NAME(user), event) == 0; 1943 1944 if (match && system) { 1945 match = strcmp(system, user->group->system_name) == 0 || 1946 strcmp(system, user->group->system_multi_name) == 0; 1947 } 1948 1949 if (match) 1950 match = user_fields_match(user, argc, argv); 1951 1952 return match; 1953 } 1954 1955 static struct dyn_event_operations user_event_dops = { 1956 .create = user_event_create, 1957 .show = user_event_show, 1958 .is_busy = user_event_is_busy, 1959 .free = user_event_free, 1960 .match = user_event_match, 1961 }; 1962 1963 static int user_event_trace_register(struct user_event *user) 1964 { 1965 int ret; 1966 1967 ret = register_trace_event(&user->call.event); 1968 1969 if (!ret) 1970 return -ENODEV; 1971 1972 ret = user_event_set_call_visible(user, true); 1973 1974 if (ret) 1975 unregister_trace_event(&user->call.event); 1976 1977 return ret; 1978 } 1979 1980 static int user_event_set_tp_name(struct user_event *user) 1981 { 1982 lockdep_assert_held(&user->group->reg_mutex); 1983 1984 if (EVENT_MULTI_FORMAT(user->reg_flags)) { 1985 char *multi_name; 1986 1987 multi_name = kasprintf(GFP_KERNEL_ACCOUNT, "%s.%llx", 1988 user->reg_name, user->group->multi_id); 1989 1990 if (!multi_name) 1991 return -ENOMEM; 1992 1993 user->call.name = multi_name; 1994 user->tracepoint.name = multi_name; 1995 1996 /* Inc to ensure unique multi-event name next time */ 1997 user->group->multi_id++; 1998 } else { 1999 /* Non Multi-format uses register name */ 2000 user->call.name = user->reg_name; 2001 user->tracepoint.name = user->reg_name; 2002 } 2003 2004 return 0; 2005 } 2006 2007 /* 2008 * Counts how many ';' without a trailing space are in the args. 2009 */ 2010 static int count_semis_no_space(char *args) 2011 { 2012 int count = 0; 2013 2014 while ((args = strchr(args, ';'))) { 2015 args++; 2016 2017 if (!isspace(*args)) 2018 count++; 2019 } 2020 2021 return count; 2022 } 2023 2024 /* 2025 * Copies the arguments while ensuring all ';' have a trailing space. 2026 */ 2027 static char *insert_space_after_semis(char *args, int count) 2028 { 2029 char *fixed, *pos; 2030 int len; 2031 2032 len = strlen(args) + count; 2033 fixed = kmalloc(len + 1, GFP_KERNEL); 2034 2035 if (!fixed) 2036 return NULL; 2037 2038 pos = fixed; 2039 2040 /* Insert a space after ';' if there is no trailing space. */ 2041 while (*args) { 2042 *pos = *args++; 2043 2044 if (*pos++ == ';' && !isspace(*args)) 2045 *pos++ = ' '; 2046 } 2047 2048 *pos = '\0'; 2049 2050 return fixed; 2051 } 2052 2053 static char **user_event_argv_split(char *args, int *argc) 2054 { 2055 char **split; 2056 char *fixed; 2057 int count; 2058 2059 /* Count how many ';' without a trailing space */ 2060 count = count_semis_no_space(args); 2061 2062 /* No fixup is required */ 2063 if (!count) 2064 return argv_split(GFP_KERNEL, args, argc); 2065 2066 /* We must fixup 'field;field' to 'field; field' */ 2067 fixed = insert_space_after_semis(args, count); 2068 2069 if (!fixed) 2070 return NULL; 2071 2072 /* We do a normal split afterwards */ 2073 split = argv_split(GFP_KERNEL, fixed, argc); 2074 2075 /* We can free since argv_split makes a copy */ 2076 kfree(fixed); 2077 2078 return split; 2079 } 2080 2081 /* 2082 * Parses the event name, arguments and flags then registers if successful. 2083 * The name buffer lifetime is owned by this method for success cases only. 2084 * Upon success the returned user_event has its ref count increased by 1. 2085 */ 2086 static int user_event_parse(struct user_event_group *group, char *name, 2087 char *args, char *flags, 2088 struct user_event **newuser, int reg_flags) 2089 { 2090 struct user_event *user; 2091 char **argv = NULL; 2092 int argc = 0; 2093 int ret; 2094 u32 key; 2095 2096 /* Currently don't support any text based flags */ 2097 if (flags != NULL) 2098 return -EINVAL; 2099 2100 if (!user_event_capable(reg_flags)) 2101 return -EPERM; 2102 2103 if (args) { 2104 argv = user_event_argv_split(args, &argc); 2105 2106 if (!argv) 2107 return -ENOMEM; 2108 } 2109 2110 /* Prevent dyn_event from racing */ 2111 mutex_lock(&event_mutex); 2112 user = find_user_event(group, name, argc, (const char **)argv, 2113 reg_flags, &key); 2114 mutex_unlock(&event_mutex); 2115 2116 if (argv) 2117 argv_free(argv); 2118 2119 if (IS_ERR(user)) 2120 return PTR_ERR(user); 2121 2122 if (user) { 2123 *newuser = user; 2124 /* 2125 * Name is allocated by caller, free it since it already exists. 2126 * Caller only worries about failure cases for freeing. 2127 */ 2128 kfree(name); 2129 2130 return 0; 2131 } 2132 2133 user = kzalloc_obj(*user, GFP_KERNEL_ACCOUNT); 2134 2135 if (!user) 2136 return -ENOMEM; 2137 2138 INIT_LIST_HEAD(&user->class.fields); 2139 INIT_LIST_HEAD(&user->fields); 2140 INIT_LIST_HEAD(&user->validators); 2141 2142 user->group = group; 2143 user->reg_name = name; 2144 user->reg_flags = reg_flags; 2145 2146 ret = user_event_set_tp_name(user); 2147 2148 if (ret) 2149 goto put_user; 2150 2151 ret = user_event_parse_fields(user, args); 2152 2153 if (ret) 2154 goto put_user; 2155 2156 ret = user_event_create_print_fmt(user); 2157 2158 if (ret) 2159 goto put_user; 2160 2161 user->call.data = user; 2162 user->call.class = &user->class; 2163 user->call.flags = TRACE_EVENT_FL_TRACEPOINT; 2164 user->call.tp = &user->tracepoint; 2165 user->call.event.funcs = &user_event_funcs; 2166 2167 if (EVENT_MULTI_FORMAT(user->reg_flags)) 2168 user->class.system = group->system_multi_name; 2169 else 2170 user->class.system = group->system_name; 2171 2172 user->class.fields_array = user_event_fields_array; 2173 user->class.get_fields = user_event_get_fields; 2174 user->class.reg = user_event_reg; 2175 user->class.probe = user_event_ftrace; 2176 #ifdef CONFIG_PERF_EVENTS 2177 user->class.perf_probe = user_event_perf; 2178 #endif 2179 2180 mutex_lock(&event_mutex); 2181 2182 if (current_user_events >= max_user_events) { 2183 ret = -EMFILE; 2184 goto put_user_lock; 2185 } 2186 2187 ret = user_event_trace_register(user); 2188 2189 if (ret) 2190 goto put_user_lock; 2191 2192 if (user->reg_flags & USER_EVENT_REG_PERSIST) { 2193 /* Ensure we track self ref and caller ref (2) */ 2194 refcount_set(&user->refcnt, 2); 2195 } else { 2196 /* Ensure we track only caller ref (1) */ 2197 refcount_set(&user->refcnt, 1); 2198 } 2199 2200 dyn_event_init(&user->devent, &user_event_dops); 2201 dyn_event_add(&user->devent, &user->call); 2202 hash_add(group->register_table, &user->node, key); 2203 current_user_events++; 2204 2205 mutex_unlock(&event_mutex); 2206 2207 *newuser = user; 2208 return 0; 2209 put_user_lock: 2210 mutex_unlock(&event_mutex); 2211 put_user: 2212 user_event_destroy_fields(user); 2213 user_event_destroy_validators(user); 2214 kfree(user->call.print_fmt); 2215 2216 /* Caller frees reg_name on error, but not multi-name */ 2217 if (EVENT_NAME(user) != EVENT_TP_NAME(user)) 2218 kfree(EVENT_TP_NAME(user)); 2219 2220 kfree(user); 2221 return ret; 2222 } 2223 2224 /* 2225 * Deletes previously created events if they are no longer being used. 2226 */ 2227 static int delete_user_event(struct user_event_group *group, char *name) 2228 { 2229 struct user_event *user; 2230 struct hlist_node *tmp; 2231 u32 key = user_event_key(name); 2232 int ret = -ENOENT; 2233 2234 /* Attempt to delete all event(s) with the name passed in */ 2235 hash_for_each_possible_safe(group->register_table, user, tmp, node, key) { 2236 if (strcmp(EVENT_NAME(user), name)) 2237 continue; 2238 2239 if (!user_event_last_ref(user)) 2240 return -EBUSY; 2241 2242 if (!user_event_capable(user->reg_flags)) 2243 return -EPERM; 2244 2245 ret = destroy_user_event(user); 2246 2247 if (ret) 2248 goto out; 2249 } 2250 out: 2251 return ret; 2252 } 2253 2254 /* 2255 * Validates the user payload and writes via iterator. 2256 */ 2257 static ssize_t user_events_write_core(struct file *file, struct iov_iter *i) 2258 { 2259 struct user_event_file_info *info = file->private_data; 2260 struct user_event_refs *refs; 2261 struct user_event *user = NULL; 2262 struct tracepoint *tp; 2263 ssize_t ret = i->count; 2264 int idx; 2265 2266 if (unlikely(copy_from_iter(&idx, sizeof(idx), i) != sizeof(idx))) 2267 return -EFAULT; 2268 2269 if (idx < 0) 2270 return -EINVAL; 2271 2272 rcu_read_lock_sched(); 2273 2274 refs = rcu_dereference_sched(info->refs); 2275 2276 /* 2277 * The refs->events array is protected by RCU, and new items may be 2278 * added. But the user retrieved from indexing into the events array 2279 * shall be immutable while the file is opened. 2280 */ 2281 if (likely(refs && idx < refs->count)) 2282 user = refs->events[idx]; 2283 2284 rcu_read_unlock_sched(); 2285 2286 if (unlikely(user == NULL)) 2287 return -ENOENT; 2288 2289 if (unlikely(i->count < user->min_size)) 2290 return -EINVAL; 2291 2292 tp = &user->tracepoint; 2293 2294 /* 2295 * It's possible key.enabled disables after this check, however 2296 * we don't mind if a few events are included in this condition. 2297 */ 2298 if (likely(static_key_enabled(&tp->key))) { 2299 struct tracepoint_func *probe_func_ptr; 2300 user_event_func_t probe_func; 2301 struct iov_iter copy; 2302 void *tpdata; 2303 bool faulted; 2304 2305 if (unlikely(fault_in_iov_iter_readable(i, i->count))) 2306 return -EFAULT; 2307 2308 faulted = false; 2309 2310 rcu_read_lock_sched(); 2311 2312 probe_func_ptr = rcu_dereference_sched(tp->funcs); 2313 2314 if (probe_func_ptr) { 2315 do { 2316 copy = *i; 2317 probe_func = probe_func_ptr->func; 2318 tpdata = probe_func_ptr->data; 2319 probe_func(user, ©, tpdata, &faulted); 2320 } while ((++probe_func_ptr)->func); 2321 } 2322 2323 rcu_read_unlock_sched(); 2324 2325 if (unlikely(faulted)) 2326 return -EFAULT; 2327 } else 2328 return -EBADF; 2329 2330 return ret; 2331 } 2332 2333 static int user_events_open(struct inode *node, struct file *file) 2334 { 2335 struct user_event_group *group; 2336 struct user_event_file_info *info; 2337 2338 group = current_user_event_group(); 2339 2340 if (!group) 2341 return -ENOENT; 2342 2343 info = kzalloc_obj(*info, GFP_KERNEL_ACCOUNT); 2344 2345 if (!info) 2346 return -ENOMEM; 2347 2348 info->group = group; 2349 2350 file->private_data = info; 2351 2352 return 0; 2353 } 2354 2355 static ssize_t user_events_write(struct file *file, const char __user *ubuf, 2356 size_t count, loff_t *ppos) 2357 { 2358 struct iov_iter i; 2359 2360 if (unlikely(*ppos != 0)) 2361 return -EFAULT; 2362 2363 if (unlikely(import_ubuf(ITER_SOURCE, (char __user *)ubuf, count, &i))) 2364 return -EFAULT; 2365 2366 return user_events_write_core(file, &i); 2367 } 2368 2369 static ssize_t user_events_write_iter(struct kiocb *kp, struct iov_iter *i) 2370 { 2371 return user_events_write_core(kp->ki_filp, i); 2372 } 2373 2374 static int user_events_ref_add(struct user_event_file_info *info, 2375 struct user_event *user) 2376 { 2377 struct user_event_group *group = info->group; 2378 struct user_event_refs *refs, *new_refs; 2379 int i, size, count = 0; 2380 2381 refs = rcu_dereference_protected(info->refs, 2382 lockdep_is_held(&group->reg_mutex)); 2383 2384 if (refs) { 2385 count = refs->count; 2386 2387 for (i = 0; i < count; ++i) 2388 if (refs->events[i] == user) 2389 return i; 2390 } 2391 2392 size = struct_size(refs, events, count + 1); 2393 2394 new_refs = kzalloc(size, GFP_KERNEL_ACCOUNT); 2395 2396 if (!new_refs) 2397 return -ENOMEM; 2398 2399 new_refs->count = count + 1; 2400 2401 for (i = 0; i < count; ++i) 2402 new_refs->events[i] = refs->events[i]; 2403 2404 new_refs->events[i] = user_event_get(user); 2405 2406 rcu_assign_pointer(info->refs, new_refs); 2407 2408 if (refs) 2409 kfree_rcu(refs, rcu); 2410 2411 return i; 2412 } 2413 2414 static long user_reg_get(struct user_reg __user *ureg, struct user_reg *kreg) 2415 { 2416 u32 size; 2417 long ret; 2418 2419 ret = get_user(size, &ureg->size); 2420 2421 if (ret) 2422 return ret; 2423 2424 if (size > PAGE_SIZE) 2425 return -E2BIG; 2426 2427 if (size < offsetofend(struct user_reg, write_index)) 2428 return -EINVAL; 2429 2430 ret = copy_struct_from_user(kreg, sizeof(*kreg), ureg, size); 2431 2432 if (ret) 2433 return ret; 2434 2435 /* Ensure only valid flags */ 2436 if (kreg->flags & ~(USER_EVENT_REG_MAX-1)) 2437 return -EINVAL; 2438 2439 /* Ensure supported size */ 2440 switch (kreg->enable_size) { 2441 case 4: 2442 /* 32-bit */ 2443 break; 2444 #if BITS_PER_LONG >= 64 2445 case 8: 2446 /* 64-bit */ 2447 break; 2448 #endif 2449 default: 2450 return -EINVAL; 2451 } 2452 2453 /* Ensure natural alignment */ 2454 if (kreg->enable_addr % kreg->enable_size) 2455 return -EINVAL; 2456 2457 /* Ensure bit range for size */ 2458 if (kreg->enable_bit > (kreg->enable_size * BITS_PER_BYTE) - 1) 2459 return -EINVAL; 2460 2461 /* Ensure accessible */ 2462 if (!access_ok((const void __user *)(uintptr_t)kreg->enable_addr, 2463 kreg->enable_size)) 2464 return -EFAULT; 2465 2466 kreg->size = size; 2467 2468 return 0; 2469 } 2470 2471 /* 2472 * Registers a user_event on behalf of a user process. 2473 */ 2474 static long user_events_ioctl_reg(struct user_event_file_info *info, 2475 unsigned long uarg) 2476 { 2477 struct user_reg __user *ureg = (struct user_reg __user *)uarg; 2478 struct user_reg reg; 2479 struct user_event *user; 2480 struct user_event_enabler *enabler; 2481 char *name; 2482 long ret; 2483 int write_result; 2484 2485 ret = user_reg_get(ureg, ®); 2486 2487 if (ret) 2488 return ret; 2489 2490 /* 2491 * Prevent users from using the same address and bit multiple times 2492 * within the same mm address space. This can cause unexpected behavior 2493 * for user processes that is far easier to debug if this is explicitly 2494 * an error upon registering. 2495 */ 2496 if (current_user_event_enabler_exists((unsigned long)reg.enable_addr, 2497 reg.enable_bit)) 2498 return -EADDRINUSE; 2499 2500 name = strndup_user((const char __user *)(uintptr_t)reg.name_args, 2501 MAX_EVENT_DESC); 2502 2503 if (IS_ERR(name)) { 2504 ret = PTR_ERR(name); 2505 return ret; 2506 } 2507 2508 ret = user_event_parse_cmd(info->group, name, &user, reg.flags); 2509 2510 if (ret) { 2511 kfree(name); 2512 return ret; 2513 } 2514 2515 ret = user_events_ref_add(info, user); 2516 2517 /* No longer need parse ref, ref_add either worked or not */ 2518 user_event_put(user, false); 2519 2520 /* Positive number is index and valid */ 2521 if (ret < 0) 2522 return ret; 2523 2524 /* 2525 * user_events_ref_add succeeded: 2526 * At this point we have a user_event, it's lifetime is bound by the 2527 * reference count, not this file. If anything fails, the user_event 2528 * still has a reference until the file is released. During release 2529 * any remaining references (from user_events_ref_add) are decremented. 2530 * 2531 * Attempt to create an enabler, which too has a lifetime tied in the 2532 * same way for the event. Once the task that caused the enabler to be 2533 * created exits or issues exec() then the enablers it has created 2534 * will be destroyed and the ref to the event will be decremented. 2535 */ 2536 enabler = user_event_enabler_create(®, user, &write_result); 2537 2538 if (!enabler) 2539 return -ENOMEM; 2540 2541 /* Write failed/faulted, give error back to caller */ 2542 if (write_result) 2543 return write_result; 2544 2545 put_user((u32)ret, &ureg->write_index); 2546 2547 return 0; 2548 } 2549 2550 /* 2551 * Deletes a user_event on behalf of a user process. 2552 */ 2553 static long user_events_ioctl_del(struct user_event_file_info *info, 2554 unsigned long uarg) 2555 { 2556 void __user *ubuf = (void __user *)uarg; 2557 char *name; 2558 long ret; 2559 2560 name = strndup_user(ubuf, MAX_EVENT_DESC); 2561 2562 if (IS_ERR(name)) 2563 return PTR_ERR(name); 2564 2565 /* event_mutex prevents dyn_event from racing */ 2566 mutex_lock(&event_mutex); 2567 ret = delete_user_event(info->group, name); 2568 mutex_unlock(&event_mutex); 2569 2570 kfree(name); 2571 2572 return ret; 2573 } 2574 2575 static long user_unreg_get(struct user_unreg __user *ureg, 2576 struct user_unreg *kreg) 2577 { 2578 u32 size; 2579 long ret; 2580 2581 ret = get_user(size, &ureg->size); 2582 2583 if (ret) 2584 return ret; 2585 2586 if (size > PAGE_SIZE) 2587 return -E2BIG; 2588 2589 if (size < offsetofend(struct user_unreg, disable_addr)) 2590 return -EINVAL; 2591 2592 ret = copy_struct_from_user(kreg, sizeof(*kreg), ureg, size); 2593 2594 /* Ensure no reserved values, since we don't support any yet */ 2595 if (kreg->__reserved || kreg->__reserved2) 2596 return -EINVAL; 2597 2598 return ret; 2599 } 2600 2601 static int user_event_mm_clear_bit(struct user_event_mm *user_mm, 2602 unsigned long uaddr, unsigned char bit, 2603 unsigned long flags) 2604 { 2605 struct user_event_enabler enabler; 2606 int result; 2607 int attempt = 0; 2608 2609 memset(&enabler, 0, sizeof(enabler)); 2610 enabler.addr = uaddr; 2611 enabler.values = bit | flags; 2612 retry: 2613 /* Prevents state changes from racing with new enablers */ 2614 mutex_lock(&event_mutex); 2615 2616 /* Force the bit to be cleared, since no event is attached */ 2617 mmap_read_lock(user_mm->mm); 2618 result = user_event_enabler_write(user_mm, &enabler, false, &attempt); 2619 mmap_read_unlock(user_mm->mm); 2620 2621 mutex_unlock(&event_mutex); 2622 2623 if (result) { 2624 /* Attempt to fault-in and retry if it worked */ 2625 if (!user_event_mm_fault_in(user_mm, uaddr, attempt)) 2626 goto retry; 2627 } 2628 2629 return result; 2630 } 2631 2632 /* 2633 * Unregisters an enablement address/bit within a task/user mm. 2634 */ 2635 static long user_events_ioctl_unreg(unsigned long uarg) 2636 { 2637 struct user_unreg __user *ureg = (struct user_unreg __user *)uarg; 2638 struct user_event_mm *mm = current->user_event_mm; 2639 struct user_event_enabler *enabler, *next; 2640 struct user_unreg reg; 2641 unsigned long flags; 2642 long ret; 2643 2644 ret = user_unreg_get(ureg, ®); 2645 2646 if (ret) 2647 return ret; 2648 2649 if (!mm) 2650 return -ENOENT; 2651 2652 flags = 0; 2653 ret = -ENOENT; 2654 2655 /* 2656 * Flags freeing and faulting are used to indicate if the enabler is in 2657 * use at all. When faulting is set a page-fault is occurring asyncly. 2658 * During async fault if freeing is set, the enabler will be destroyed. 2659 * If no async fault is happening, we can destroy it now since we hold 2660 * the event_mutex during these checks. 2661 */ 2662 mutex_lock(&event_mutex); 2663 2664 list_for_each_entry_safe(enabler, next, &mm->enablers, mm_enablers_link) { 2665 if (enabler->addr == reg.disable_addr && 2666 ENABLE_BIT(enabler) == reg.disable_bit) { 2667 set_bit(ENABLE_VAL_FREEING_BIT, ENABLE_BITOPS(enabler)); 2668 2669 /* We must keep compat flags for the clear */ 2670 flags |= enabler->values & ENABLE_VAL_COMPAT_MASK; 2671 2672 if (!test_bit(ENABLE_VAL_FAULTING_BIT, ENABLE_BITOPS(enabler))) 2673 user_event_enabler_destroy(enabler); 2674 2675 /* Removed at least one */ 2676 ret = 0; 2677 } 2678 } 2679 2680 mutex_unlock(&event_mutex); 2681 2682 /* Ensure bit is now cleared for user, regardless of event status */ 2683 if (!ret) 2684 ret = user_event_mm_clear_bit(mm, reg.disable_addr, 2685 reg.disable_bit, flags); 2686 2687 return ret; 2688 } 2689 2690 /* 2691 * Handles the ioctl from user mode to register or alter operations. 2692 */ 2693 static long user_events_ioctl(struct file *file, unsigned int cmd, 2694 unsigned long uarg) 2695 { 2696 struct user_event_file_info *info = file->private_data; 2697 struct user_event_group *group = info->group; 2698 long ret = -ENOTTY; 2699 2700 switch (cmd) { 2701 case DIAG_IOCSREG: 2702 mutex_lock(&group->reg_mutex); 2703 ret = user_events_ioctl_reg(info, uarg); 2704 mutex_unlock(&group->reg_mutex); 2705 break; 2706 2707 case DIAG_IOCSDEL: 2708 mutex_lock(&group->reg_mutex); 2709 ret = user_events_ioctl_del(info, uarg); 2710 mutex_unlock(&group->reg_mutex); 2711 break; 2712 2713 case DIAG_IOCSUNREG: 2714 mutex_lock(&group->reg_mutex); 2715 ret = user_events_ioctl_unreg(uarg); 2716 mutex_unlock(&group->reg_mutex); 2717 break; 2718 } 2719 2720 return ret; 2721 } 2722 2723 /* 2724 * Handles the final close of the file from user mode. 2725 */ 2726 static int user_events_release(struct inode *node, struct file *file) 2727 { 2728 struct user_event_file_info *info = file->private_data; 2729 struct user_event_group *group; 2730 struct user_event_refs *refs; 2731 int i; 2732 2733 if (!info) 2734 return -EINVAL; 2735 2736 group = info->group; 2737 2738 /* 2739 * Ensure refs cannot change under any situation by taking the 2740 * register mutex during the final freeing of the references. 2741 */ 2742 mutex_lock(&group->reg_mutex); 2743 2744 refs = info->refs; 2745 2746 if (!refs) 2747 goto out; 2748 2749 /* 2750 * The lifetime of refs has reached an end, it's tied to this file. 2751 * The underlying user_events are ref counted, and cannot be freed. 2752 * After this decrement, the user_events may be freed elsewhere. 2753 */ 2754 for (i = 0; i < refs->count; ++i) 2755 user_event_put(refs->events[i], false); 2756 2757 out: 2758 file->private_data = NULL; 2759 2760 mutex_unlock(&group->reg_mutex); 2761 2762 kfree(refs); 2763 kfree(info); 2764 2765 return 0; 2766 } 2767 2768 static const struct file_operations user_data_fops = { 2769 .open = user_events_open, 2770 .write = user_events_write, 2771 .write_iter = user_events_write_iter, 2772 .unlocked_ioctl = user_events_ioctl, 2773 .release = user_events_release, 2774 }; 2775 2776 static void *user_seq_start(struct seq_file *m, loff_t *pos) 2777 { 2778 if (*pos) 2779 return NULL; 2780 2781 return (void *)1; 2782 } 2783 2784 static void *user_seq_next(struct seq_file *m, void *p, loff_t *pos) 2785 { 2786 ++*pos; 2787 return NULL; 2788 } 2789 2790 static void user_seq_stop(struct seq_file *m, void *p) 2791 { 2792 } 2793 2794 static int user_seq_show(struct seq_file *m, void *p) 2795 { 2796 struct user_event_group *group = m->private; 2797 struct user_event *user; 2798 char status; 2799 int i, active = 0, busy = 0; 2800 2801 if (!group) 2802 return -EINVAL; 2803 2804 mutex_lock(&group->reg_mutex); 2805 2806 hash_for_each(group->register_table, i, user, node) { 2807 status = user->status; 2808 2809 seq_printf(m, "%s", EVENT_TP_NAME(user)); 2810 2811 if (status != 0) { 2812 seq_puts(m, " # Used by"); 2813 if (status & EVENT_STATUS_FTRACE) 2814 seq_puts(m, " ftrace"); 2815 if (status & EVENT_STATUS_PERF) 2816 seq_puts(m, " perf"); 2817 if (status & EVENT_STATUS_OTHER) 2818 seq_puts(m, " other"); 2819 busy++; 2820 } 2821 2822 seq_puts(m, "\n"); 2823 active++; 2824 } 2825 2826 mutex_unlock(&group->reg_mutex); 2827 2828 seq_puts(m, "\n"); 2829 seq_printf(m, "Active: %d\n", active); 2830 seq_printf(m, "Busy: %d\n", busy); 2831 2832 return 0; 2833 } 2834 2835 static const struct seq_operations user_seq_ops = { 2836 .start = user_seq_start, 2837 .next = user_seq_next, 2838 .stop = user_seq_stop, 2839 .show = user_seq_show, 2840 }; 2841 2842 static int user_status_open(struct inode *node, struct file *file) 2843 { 2844 struct user_event_group *group; 2845 int ret; 2846 2847 group = current_user_event_group(); 2848 2849 if (!group) 2850 return -ENOENT; 2851 2852 ret = seq_open(file, &user_seq_ops); 2853 2854 if (!ret) { 2855 /* Chain group to seq_file */ 2856 struct seq_file *m = file->private_data; 2857 2858 m->private = group; 2859 } 2860 2861 return ret; 2862 } 2863 2864 static const struct file_operations user_status_fops = { 2865 .open = user_status_open, 2866 .read = seq_read, 2867 .llseek = seq_lseek, 2868 .release = seq_release, 2869 }; 2870 2871 /* 2872 * Creates a set of tracefs files to allow user mode interactions. 2873 */ 2874 static int create_user_tracefs(void) 2875 { 2876 struct dentry *edata, *emmap; 2877 2878 edata = tracefs_create_file("user_events_data", TRACE_MODE_WRITE, 2879 NULL, NULL, &user_data_fops); 2880 2881 if (!edata) { 2882 pr_warn("Could not create tracefs 'user_events_data' entry\n"); 2883 goto err; 2884 } 2885 2886 emmap = tracefs_create_file("user_events_status", TRACE_MODE_READ, 2887 NULL, NULL, &user_status_fops); 2888 2889 if (!emmap) { 2890 tracefs_remove(edata); 2891 pr_warn("Could not create tracefs 'user_events_mmap' entry\n"); 2892 goto err; 2893 } 2894 2895 return 0; 2896 err: 2897 return -ENODEV; 2898 } 2899 2900 static int set_max_user_events_sysctl(const struct ctl_table *table, int write, 2901 void *buffer, size_t *lenp, loff_t *ppos) 2902 { 2903 int ret; 2904 2905 mutex_lock(&event_mutex); 2906 2907 ret = proc_douintvec(table, write, buffer, lenp, ppos); 2908 2909 mutex_unlock(&event_mutex); 2910 2911 return ret; 2912 } 2913 2914 static const struct ctl_table user_event_sysctls[] = { 2915 { 2916 .procname = "user_events_max", 2917 .data = &max_user_events, 2918 .maxlen = sizeof(unsigned int), 2919 .mode = 0644, 2920 .proc_handler = set_max_user_events_sysctl, 2921 }, 2922 }; 2923 2924 static int __init trace_events_user_init(void) 2925 { 2926 int ret; 2927 2928 fault_cache = KMEM_CACHE(user_event_enabler_fault, 0); 2929 2930 if (!fault_cache) 2931 return -ENOMEM; 2932 2933 init_group = user_event_group_create(); 2934 2935 if (!init_group) { 2936 kmem_cache_destroy(fault_cache); 2937 return -ENOMEM; 2938 } 2939 2940 ret = create_user_tracefs(); 2941 2942 if (ret) { 2943 pr_warn("user_events could not register with tracefs\n"); 2944 user_event_group_destroy(init_group); 2945 kmem_cache_destroy(fault_cache); 2946 init_group = NULL; 2947 return ret; 2948 } 2949 2950 if (dyn_event_register(&user_event_dops)) 2951 pr_warn("user_events could not register with dyn_events\n"); 2952 2953 register_sysctl_init("kernel", user_event_sysctls); 2954 2955 return 0; 2956 } 2957 2958 fs_initcall(trace_events_user_init); 2959