trace_kprobe.c 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Kprobes-based tracing events
  4. *
  5. * Created by Masami Hiramatsu <mhiramat@redhat.com>
  6. *
  7. */
  8. #define pr_fmt(fmt) "trace_kprobe: " fmt
  9. #include <linux/module.h>
  10. #include <linux/uaccess.h>
  11. #include <linux/rculist.h>
  12. #include <linux/error-injection.h>
  13. #include "trace_kprobe_selftest.h"
  14. #include "trace_probe.h"
  15. #define KPROBE_EVENT_SYSTEM "kprobes"
  16. #define KRETPROBE_MAXACTIVE_MAX 4096
  17. /**
  18. * Kprobe event core functions
  19. */
  20. struct trace_kprobe {
  21. struct list_head list;
  22. struct kretprobe rp; /* Use rp.kp for kprobe use */
  23. unsigned long __percpu *nhit;
  24. const char *symbol; /* symbol name */
  25. struct trace_probe tp;
  26. };
  27. #define SIZEOF_TRACE_KPROBE(n) \
  28. (offsetof(struct trace_kprobe, tp.args) + \
  29. (sizeof(struct probe_arg) * (n)))
  30. static nokprobe_inline bool trace_kprobe_is_return(struct trace_kprobe *tk)
  31. {
  32. return tk->rp.handler != NULL;
  33. }
  34. static nokprobe_inline const char *trace_kprobe_symbol(struct trace_kprobe *tk)
  35. {
  36. return tk->symbol ? tk->symbol : "unknown";
  37. }
  38. static nokprobe_inline unsigned long trace_kprobe_offset(struct trace_kprobe *tk)
  39. {
  40. return tk->rp.kp.offset;
  41. }
  42. static nokprobe_inline bool trace_kprobe_has_gone(struct trace_kprobe *tk)
  43. {
  44. return !!(kprobe_gone(&tk->rp.kp));
  45. }
  46. static nokprobe_inline bool trace_kprobe_within_module(struct trace_kprobe *tk,
  47. struct module *mod)
  48. {
  49. int len = strlen(mod->name);
  50. const char *name = trace_kprobe_symbol(tk);
  51. return strncmp(mod->name, name, len) == 0 && name[len] == ':';
  52. }
  53. static nokprobe_inline bool trace_kprobe_is_on_module(struct trace_kprobe *tk)
  54. {
  55. return !!strchr(trace_kprobe_symbol(tk), ':');
  56. }
  57. static nokprobe_inline unsigned long trace_kprobe_nhit(struct trace_kprobe *tk)
  58. {
  59. unsigned long nhit = 0;
  60. int cpu;
  61. for_each_possible_cpu(cpu)
  62. nhit += *per_cpu_ptr(tk->nhit, cpu);
  63. return nhit;
  64. }
  65. /* Return 0 if it fails to find the symbol address */
  66. static nokprobe_inline
  67. unsigned long trace_kprobe_address(struct trace_kprobe *tk)
  68. {
  69. unsigned long addr;
  70. if (tk->symbol) {
  71. addr = (unsigned long)
  72. kallsyms_lookup_name(trace_kprobe_symbol(tk));
  73. if (addr)
  74. addr += tk->rp.kp.offset;
  75. } else {
  76. addr = (unsigned long)tk->rp.kp.addr;
  77. }
  78. return addr;
  79. }
  80. bool trace_kprobe_on_func_entry(struct trace_event_call *call)
  81. {
  82. struct trace_kprobe *tk = (struct trace_kprobe *)call->data;
  83. return kprobe_on_func_entry(tk->rp.kp.addr,
  84. tk->rp.kp.addr ? NULL : tk->rp.kp.symbol_name,
  85. tk->rp.kp.addr ? 0 : tk->rp.kp.offset);
  86. }
  87. bool trace_kprobe_error_injectable(struct trace_event_call *call)
  88. {
  89. struct trace_kprobe *tk = (struct trace_kprobe *)call->data;
  90. return within_error_injection_list(trace_kprobe_address(tk));
  91. }
  92. static int register_kprobe_event(struct trace_kprobe *tk);
  93. static int unregister_kprobe_event(struct trace_kprobe *tk);
  94. static DEFINE_MUTEX(probe_lock);
  95. static LIST_HEAD(probe_list);
  96. static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs);
  97. static int kretprobe_dispatcher(struct kretprobe_instance *ri,
  98. struct pt_regs *regs);
  99. /* Memory fetching by symbol */
  100. struct symbol_cache {
  101. char *symbol;
  102. long offset;
  103. unsigned long addr;
  104. };
  105. unsigned long update_symbol_cache(struct symbol_cache *sc)
  106. {
  107. sc->addr = (unsigned long)kallsyms_lookup_name(sc->symbol);
  108. if (sc->addr)
  109. sc->addr += sc->offset;
  110. return sc->addr;
  111. }
  112. void free_symbol_cache(struct symbol_cache *sc)
  113. {
  114. kfree(sc->symbol);
  115. kfree(sc);
  116. }
  117. struct symbol_cache *alloc_symbol_cache(const char *sym, long offset)
  118. {
  119. struct symbol_cache *sc;
  120. if (!sym || strlen(sym) == 0)
  121. return NULL;
  122. sc = kzalloc(sizeof(struct symbol_cache), GFP_KERNEL);
  123. if (!sc)
  124. return NULL;
  125. sc->symbol = kstrdup(sym, GFP_KERNEL);
  126. if (!sc->symbol) {
  127. kfree(sc);
  128. return NULL;
  129. }
  130. sc->offset = offset;
  131. update_symbol_cache(sc);
  132. return sc;
  133. }
  134. /*
  135. * Kprobes-specific fetch functions
  136. */
  137. #define DEFINE_FETCH_stack(type) \
  138. static void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs, \
  139. void *offset, void *dest) \
  140. { \
  141. *(type *)dest = (type)regs_get_kernel_stack_nth(regs, \
  142. (unsigned int)((unsigned long)offset)); \
  143. } \
  144. NOKPROBE_SYMBOL(FETCH_FUNC_NAME(stack, type));
  145. DEFINE_BASIC_FETCH_FUNCS(stack)
  146. /* No string on the stack entry */
  147. #define fetch_stack_string NULL
  148. #define fetch_stack_string_size NULL
  149. #define DEFINE_FETCH_memory(type) \
  150. static void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs, \
  151. void *addr, void *dest) \
  152. { \
  153. type retval; \
  154. if (probe_kernel_address(addr, retval)) \
  155. *(type *)dest = 0; \
  156. else \
  157. *(type *)dest = retval; \
  158. } \
  159. NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, type));
  160. DEFINE_BASIC_FETCH_FUNCS(memory)
  161. /*
  162. * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max
  163. * length and relative data location.
  164. */
  165. static void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
  166. void *addr, void *dest)
  167. {
  168. int maxlen = get_rloc_len(*(u32 *)dest);
  169. u8 *dst = get_rloc_data(dest);
  170. long ret;
  171. if (!maxlen)
  172. return;
  173. /*
  174. * Try to get string again, since the string can be changed while
  175. * probing.
  176. */
  177. ret = strncpy_from_unsafe(dst, addr, maxlen);
  178. if (ret < 0) { /* Failed to fetch string */
  179. dst[0] = '\0';
  180. *(u32 *)dest = make_data_rloc(0, get_rloc_offs(*(u32 *)dest));
  181. } else {
  182. *(u32 *)dest = make_data_rloc(ret, get_rloc_offs(*(u32 *)dest));
  183. }
  184. }
  185. NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string));
  186. /* Return the length of string -- including null terminal byte */
  187. static void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
  188. void *addr, void *dest)
  189. {
  190. mm_segment_t old_fs;
  191. int ret, len = 0;
  192. u8 c;
  193. old_fs = get_fs();
  194. set_fs(KERNEL_DS);
  195. pagefault_disable();
  196. do {
  197. ret = __copy_from_user_inatomic(&c, (u8 *)addr + len, 1);
  198. len++;
  199. } while (c && ret == 0 && len < MAX_STRING_SIZE);
  200. pagefault_enable();
  201. set_fs(old_fs);
  202. if (ret < 0) /* Failed to check the length */
  203. *(u32 *)dest = 0;
  204. else
  205. *(u32 *)dest = len;
  206. }
  207. NOKPROBE_SYMBOL(FETCH_FUNC_NAME(memory, string_size));
  208. #define DEFINE_FETCH_symbol(type) \
  209. void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs, void *data, void *dest)\
  210. { \
  211. struct symbol_cache *sc = data; \
  212. if (sc->addr) \
  213. fetch_memory_##type(regs, (void *)sc->addr, dest); \
  214. else \
  215. *(type *)dest = 0; \
  216. } \
  217. NOKPROBE_SYMBOL(FETCH_FUNC_NAME(symbol, type));
  218. DEFINE_BASIC_FETCH_FUNCS(symbol)
  219. DEFINE_FETCH_symbol(string)
  220. DEFINE_FETCH_symbol(string_size)
  221. /* kprobes don't support file_offset fetch methods */
  222. #define fetch_file_offset_u8 NULL
  223. #define fetch_file_offset_u16 NULL
  224. #define fetch_file_offset_u32 NULL
  225. #define fetch_file_offset_u64 NULL
  226. #define fetch_file_offset_string NULL
  227. #define fetch_file_offset_string_size NULL
  228. /* Fetch type information table */
  229. static const struct fetch_type kprobes_fetch_type_table[] = {
  230. /* Special types */
  231. [FETCH_TYPE_STRING] = __ASSIGN_FETCH_TYPE("string", string, string,
  232. sizeof(u32), 1, "__data_loc char[]"),
  233. [FETCH_TYPE_STRSIZE] = __ASSIGN_FETCH_TYPE("string_size", u32,
  234. string_size, sizeof(u32), 0, "u32"),
  235. /* Basic types */
  236. ASSIGN_FETCH_TYPE(u8, u8, 0),
  237. ASSIGN_FETCH_TYPE(u16, u16, 0),
  238. ASSIGN_FETCH_TYPE(u32, u32, 0),
  239. ASSIGN_FETCH_TYPE(u64, u64, 0),
  240. ASSIGN_FETCH_TYPE(s8, u8, 1),
  241. ASSIGN_FETCH_TYPE(s16, u16, 1),
  242. ASSIGN_FETCH_TYPE(s32, u32, 1),
  243. ASSIGN_FETCH_TYPE(s64, u64, 1),
  244. ASSIGN_FETCH_TYPE_ALIAS(x8, u8, u8, 0),
  245. ASSIGN_FETCH_TYPE_ALIAS(x16, u16, u16, 0),
  246. ASSIGN_FETCH_TYPE_ALIAS(x32, u32, u32, 0),
  247. ASSIGN_FETCH_TYPE_ALIAS(x64, u64, u64, 0),
  248. ASSIGN_FETCH_TYPE_END
  249. };
  250. /*
  251. * Allocate new trace_probe and initialize it (including kprobes).
  252. */
  253. static struct trace_kprobe *alloc_trace_kprobe(const char *group,
  254. const char *event,
  255. void *addr,
  256. const char *symbol,
  257. unsigned long offs,
  258. int maxactive,
  259. int nargs, bool is_return)
  260. {
  261. struct trace_kprobe *tk;
  262. int ret = -ENOMEM;
  263. tk = kzalloc(SIZEOF_TRACE_KPROBE(nargs), GFP_KERNEL);
  264. if (!tk)
  265. return ERR_PTR(ret);
  266. tk->nhit = alloc_percpu(unsigned long);
  267. if (!tk->nhit)
  268. goto error;
  269. if (symbol) {
  270. tk->symbol = kstrdup(symbol, GFP_KERNEL);
  271. if (!tk->symbol)
  272. goto error;
  273. tk->rp.kp.symbol_name = tk->symbol;
  274. tk->rp.kp.offset = offs;
  275. } else
  276. tk->rp.kp.addr = addr;
  277. if (is_return)
  278. tk->rp.handler = kretprobe_dispatcher;
  279. else
  280. tk->rp.kp.pre_handler = kprobe_dispatcher;
  281. tk->rp.maxactive = maxactive;
  282. if (!event || !is_good_name(event)) {
  283. ret = -EINVAL;
  284. goto error;
  285. }
  286. tk->tp.call.class = &tk->tp.class;
  287. tk->tp.call.name = kstrdup(event, GFP_KERNEL);
  288. if (!tk->tp.call.name)
  289. goto error;
  290. if (!group || !is_good_name(group)) {
  291. ret = -EINVAL;
  292. goto error;
  293. }
  294. tk->tp.class.system = kstrdup(group, GFP_KERNEL);
  295. if (!tk->tp.class.system)
  296. goto error;
  297. INIT_LIST_HEAD(&tk->list);
  298. INIT_LIST_HEAD(&tk->tp.files);
  299. return tk;
  300. error:
  301. kfree(tk->tp.call.name);
  302. kfree(tk->symbol);
  303. free_percpu(tk->nhit);
  304. kfree(tk);
  305. return ERR_PTR(ret);
  306. }
  307. static void free_trace_kprobe(struct trace_kprobe *tk)
  308. {
  309. int i;
  310. for (i = 0; i < tk->tp.nr_args; i++)
  311. traceprobe_free_probe_arg(&tk->tp.args[i]);
  312. kfree(tk->tp.call.class->system);
  313. kfree(tk->tp.call.name);
  314. kfree(tk->symbol);
  315. free_percpu(tk->nhit);
  316. kfree(tk);
  317. }
  318. static struct trace_kprobe *find_trace_kprobe(const char *event,
  319. const char *group)
  320. {
  321. struct trace_kprobe *tk;
  322. list_for_each_entry(tk, &probe_list, list)
  323. if (strcmp(trace_event_name(&tk->tp.call), event) == 0 &&
  324. strcmp(tk->tp.call.class->system, group) == 0)
  325. return tk;
  326. return NULL;
  327. }
  328. static inline int __enable_trace_kprobe(struct trace_kprobe *tk)
  329. {
  330. int ret = 0;
  331. if (trace_probe_is_registered(&tk->tp) && !trace_kprobe_has_gone(tk)) {
  332. if (trace_kprobe_is_return(tk))
  333. ret = enable_kretprobe(&tk->rp);
  334. else
  335. ret = enable_kprobe(&tk->rp.kp);
  336. }
  337. return ret;
  338. }
  339. /*
  340. * Enable trace_probe
  341. * if the file is NULL, enable "perf" handler, or enable "trace" handler.
  342. */
  343. static int
  344. enable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
  345. {
  346. struct event_file_link *link;
  347. int ret = 0;
  348. if (file) {
  349. link = kmalloc(sizeof(*link), GFP_KERNEL);
  350. if (!link) {
  351. ret = -ENOMEM;
  352. goto out;
  353. }
  354. link->file = file;
  355. list_add_tail_rcu(&link->list, &tk->tp.files);
  356. tk->tp.flags |= TP_FLAG_TRACE;
  357. ret = __enable_trace_kprobe(tk);
  358. if (ret) {
  359. list_del_rcu(&link->list);
  360. kfree(link);
  361. tk->tp.flags &= ~TP_FLAG_TRACE;
  362. }
  363. } else {
  364. tk->tp.flags |= TP_FLAG_PROFILE;
  365. ret = __enable_trace_kprobe(tk);
  366. if (ret)
  367. tk->tp.flags &= ~TP_FLAG_PROFILE;
  368. }
  369. out:
  370. return ret;
  371. }
  372. /*
  373. * Disable trace_probe
  374. * if the file is NULL, disable "perf" handler, or disable "trace" handler.
  375. */
  376. static int
  377. disable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file)
  378. {
  379. struct event_file_link *link = NULL;
  380. int wait = 0;
  381. int ret = 0;
  382. if (file) {
  383. link = find_event_file_link(&tk->tp, file);
  384. if (!link) {
  385. ret = -EINVAL;
  386. goto out;
  387. }
  388. list_del_rcu(&link->list);
  389. wait = 1;
  390. if (!list_empty(&tk->tp.files))
  391. goto out;
  392. tk->tp.flags &= ~TP_FLAG_TRACE;
  393. } else
  394. tk->tp.flags &= ~TP_FLAG_PROFILE;
  395. if (!trace_probe_is_enabled(&tk->tp) && trace_probe_is_registered(&tk->tp)) {
  396. if (trace_kprobe_is_return(tk))
  397. disable_kretprobe(&tk->rp);
  398. else
  399. disable_kprobe(&tk->rp.kp);
  400. wait = 1;
  401. }
  402. /*
  403. * if tk is not added to any list, it must be a local trace_kprobe
  404. * created with perf_event_open. We don't need to wait for these
  405. * trace_kprobes
  406. */
  407. if (list_empty(&tk->list))
  408. wait = 0;
  409. out:
  410. if (wait) {
  411. /*
  412. * Synchronize with kprobe_trace_func/kretprobe_trace_func
  413. * to ensure disabled (all running handlers are finished).
  414. * This is not only for kfree(), but also the caller,
  415. * trace_remove_event_call() supposes it for releasing
  416. * event_call related objects, which will be accessed in
  417. * the kprobe_trace_func/kretprobe_trace_func.
  418. */
  419. synchronize_sched();
  420. kfree(link); /* Ignored if link == NULL */
  421. }
  422. return ret;
  423. }
  424. #if defined(CONFIG_KPROBES_ON_FTRACE) && \
  425. !defined(CONFIG_KPROBE_EVENTS_ON_NOTRACE)
  426. static bool within_notrace_func(struct trace_kprobe *tk)
  427. {
  428. unsigned long offset, size, addr;
  429. addr = trace_kprobe_address(tk);
  430. if (!addr || !kallsyms_lookup_size_offset(addr, &size, &offset))
  431. return false;
  432. /* Get the entry address of the target function */
  433. addr -= offset;
  434. /*
  435. * Since ftrace_location_range() does inclusive range check, we need
  436. * to subtract 1 byte from the end address.
  437. */
  438. return !ftrace_location_range(addr, addr + size - 1);
  439. }
  440. #else
  441. #define within_notrace_func(tk) (false)
  442. #endif
  443. /* Internal register function - just handle k*probes and flags */
  444. static int __register_trace_kprobe(struct trace_kprobe *tk)
  445. {
  446. int i, ret;
  447. if (trace_probe_is_registered(&tk->tp))
  448. return -EINVAL;
  449. if (within_notrace_func(tk)) {
  450. pr_warn("Could not probe notrace function %s\n",
  451. trace_kprobe_symbol(tk));
  452. return -EINVAL;
  453. }
  454. for (i = 0; i < tk->tp.nr_args; i++)
  455. traceprobe_update_arg(&tk->tp.args[i]);
  456. /* Set/clear disabled flag according to tp->flag */
  457. if (trace_probe_is_enabled(&tk->tp))
  458. tk->rp.kp.flags &= ~KPROBE_FLAG_DISABLED;
  459. else
  460. tk->rp.kp.flags |= KPROBE_FLAG_DISABLED;
  461. if (trace_kprobe_is_return(tk))
  462. ret = register_kretprobe(&tk->rp);
  463. else
  464. ret = register_kprobe(&tk->rp.kp);
  465. if (ret == 0)
  466. tk->tp.flags |= TP_FLAG_REGISTERED;
  467. else {
  468. if (ret == -ENOENT && trace_kprobe_is_on_module(tk)) {
  469. pr_warn("This probe might be able to register after target module is loaded. Continue.\n");
  470. ret = 0;
  471. } else if (ret == -EILSEQ) {
  472. pr_warn("Probing address(0x%p) is not an instruction boundary.\n",
  473. tk->rp.kp.addr);
  474. ret = -EINVAL;
  475. }
  476. }
  477. return ret;
  478. }
  479. /* Internal unregister function - just handle k*probes and flags */
  480. static void __unregister_trace_kprobe(struct trace_kprobe *tk)
  481. {
  482. if (trace_probe_is_registered(&tk->tp)) {
  483. if (trace_kprobe_is_return(tk))
  484. unregister_kretprobe(&tk->rp);
  485. else
  486. unregister_kprobe(&tk->rp.kp);
  487. tk->tp.flags &= ~TP_FLAG_REGISTERED;
  488. /* Cleanup kprobe for reuse */
  489. if (tk->rp.kp.symbol_name)
  490. tk->rp.kp.addr = NULL;
  491. }
  492. }
  493. /* Unregister a trace_probe and probe_event: call with locking probe_lock */
  494. static int unregister_trace_kprobe(struct trace_kprobe *tk)
  495. {
  496. /* Enabled event can not be unregistered */
  497. if (trace_probe_is_enabled(&tk->tp))
  498. return -EBUSY;
  499. /* Will fail if probe is being used by ftrace or perf */
  500. if (unregister_kprobe_event(tk))
  501. return -EBUSY;
  502. __unregister_trace_kprobe(tk);
  503. list_del(&tk->list);
  504. return 0;
  505. }
  506. /* Register a trace_probe and probe_event */
  507. static int register_trace_kprobe(struct trace_kprobe *tk)
  508. {
  509. struct trace_kprobe *old_tk;
  510. int ret;
  511. mutex_lock(&probe_lock);
  512. /* Delete old (same name) event if exist */
  513. old_tk = find_trace_kprobe(trace_event_name(&tk->tp.call),
  514. tk->tp.call.class->system);
  515. if (old_tk) {
  516. ret = unregister_trace_kprobe(old_tk);
  517. if (ret < 0)
  518. goto end;
  519. free_trace_kprobe(old_tk);
  520. }
  521. /* Register new event */
  522. ret = register_kprobe_event(tk);
  523. if (ret) {
  524. pr_warn("Failed to register probe event(%d)\n", ret);
  525. goto end;
  526. }
  527. /* Register k*probe */
  528. ret = __register_trace_kprobe(tk);
  529. if (ret < 0)
  530. unregister_kprobe_event(tk);
  531. else
  532. list_add_tail(&tk->list, &probe_list);
  533. end:
  534. mutex_unlock(&probe_lock);
  535. return ret;
  536. }
  537. /* Module notifier call back, checking event on the module */
  538. static int trace_kprobe_module_callback(struct notifier_block *nb,
  539. unsigned long val, void *data)
  540. {
  541. struct module *mod = data;
  542. struct trace_kprobe *tk;
  543. int ret;
  544. if (val != MODULE_STATE_COMING)
  545. return NOTIFY_DONE;
  546. /* Update probes on coming module */
  547. mutex_lock(&probe_lock);
  548. list_for_each_entry(tk, &probe_list, list) {
  549. if (trace_kprobe_within_module(tk, mod)) {
  550. /* Don't need to check busy - this should have gone. */
  551. __unregister_trace_kprobe(tk);
  552. ret = __register_trace_kprobe(tk);
  553. if (ret)
  554. pr_warn("Failed to re-register probe %s on %s: %d\n",
  555. trace_event_name(&tk->tp.call),
  556. mod->name, ret);
  557. }
  558. }
  559. mutex_unlock(&probe_lock);
  560. return NOTIFY_DONE;
  561. }
  562. static struct notifier_block trace_kprobe_module_nb = {
  563. .notifier_call = trace_kprobe_module_callback,
  564. .priority = 1 /* Invoked after kprobe module callback */
  565. };
  566. /* Convert certain expected symbols into '_' when generating event names */
  567. static inline void sanitize_event_name(char *name)
  568. {
  569. while (*name++ != '\0')
  570. if (*name == ':' || *name == '.')
  571. *name = '_';
  572. }
  573. static int create_trace_kprobe(int argc, char **argv)
  574. {
  575. /*
  576. * Argument syntax:
  577. * - Add kprobe:
  578. * p[:[GRP/]EVENT] [MOD:]KSYM[+OFFS]|KADDR [FETCHARGS]
  579. * - Add kretprobe:
  580. * r[MAXACTIVE][:[GRP/]EVENT] [MOD:]KSYM[+0] [FETCHARGS]
  581. * Fetch args:
  582. * $retval : fetch return value
  583. * $stack : fetch stack address
  584. * $stackN : fetch Nth of stack (N:0-)
  585. * $comm : fetch current task comm
  586. * @ADDR : fetch memory at ADDR (ADDR should be in kernel)
  587. * @SYM[+|-offs] : fetch memory at SYM +|- offs (SYM is a data symbol)
  588. * %REG : fetch register REG
  589. * Dereferencing memory fetch:
  590. * +|-offs(ARG) : fetch memory at ARG +|- offs address.
  591. * Alias name of args:
  592. * NAME=FETCHARG : set NAME as alias of FETCHARG.
  593. * Type of args:
  594. * FETCHARG:TYPE : use TYPE instead of unsigned long.
  595. */
  596. struct trace_kprobe *tk;
  597. int i, ret = 0;
  598. bool is_return = false, is_delete = false;
  599. char *symbol = NULL, *event = NULL, *group = NULL;
  600. int maxactive = 0;
  601. char *arg;
  602. long offset = 0;
  603. void *addr = NULL;
  604. char buf[MAX_EVENT_NAME_LEN];
  605. /* argc must be >= 1 */
  606. if (argv[0][0] == 'p')
  607. is_return = false;
  608. else if (argv[0][0] == 'r')
  609. is_return = true;
  610. else if (argv[0][0] == '-')
  611. is_delete = true;
  612. else {
  613. pr_info("Probe definition must be started with 'p', 'r' or"
  614. " '-'.\n");
  615. return -EINVAL;
  616. }
  617. event = strchr(&argv[0][1], ':');
  618. if (event) {
  619. event[0] = '\0';
  620. event++;
  621. }
  622. if (is_return && isdigit(argv[0][1])) {
  623. ret = kstrtouint(&argv[0][1], 0, &maxactive);
  624. if (ret) {
  625. pr_info("Failed to parse maxactive.\n");
  626. return ret;
  627. }
  628. /* kretprobes instances are iterated over via a list. The
  629. * maximum should stay reasonable.
  630. */
  631. if (maxactive > KRETPROBE_MAXACTIVE_MAX) {
  632. pr_info("Maxactive is too big (%d > %d).\n",
  633. maxactive, KRETPROBE_MAXACTIVE_MAX);
  634. return -E2BIG;
  635. }
  636. }
  637. if (event) {
  638. if (strchr(event, '/')) {
  639. group = event;
  640. event = strchr(group, '/') + 1;
  641. event[-1] = '\0';
  642. if (strlen(group) == 0) {
  643. pr_info("Group name is not specified\n");
  644. return -EINVAL;
  645. }
  646. }
  647. if (strlen(event) == 0) {
  648. pr_info("Event name is not specified\n");
  649. return -EINVAL;
  650. }
  651. }
  652. if (!group)
  653. group = KPROBE_EVENT_SYSTEM;
  654. if (is_delete) {
  655. if (!event) {
  656. pr_info("Delete command needs an event name.\n");
  657. return -EINVAL;
  658. }
  659. mutex_lock(&probe_lock);
  660. tk = find_trace_kprobe(event, group);
  661. if (!tk) {
  662. mutex_unlock(&probe_lock);
  663. pr_info("Event %s/%s doesn't exist.\n", group, event);
  664. return -ENOENT;
  665. }
  666. /* delete an event */
  667. ret = unregister_trace_kprobe(tk);
  668. if (ret == 0)
  669. free_trace_kprobe(tk);
  670. mutex_unlock(&probe_lock);
  671. return ret;
  672. }
  673. if (argc < 2) {
  674. pr_info("Probe point is not specified.\n");
  675. return -EINVAL;
  676. }
  677. /* try to parse an address. if that fails, try to read the
  678. * input as a symbol. */
  679. if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) {
  680. /* a symbol specified */
  681. symbol = argv[1];
  682. /* TODO: support .init module functions */
  683. ret = traceprobe_split_symbol_offset(symbol, &offset);
  684. if (ret || offset < 0 || offset > UINT_MAX) {
  685. pr_info("Failed to parse either an address or a symbol.\n");
  686. return ret;
  687. }
  688. if (offset && is_return &&
  689. !kprobe_on_func_entry(NULL, symbol, offset)) {
  690. pr_info("Given offset is not valid for return probe.\n");
  691. return -EINVAL;
  692. }
  693. }
  694. argc -= 2; argv += 2;
  695. /* setup a probe */
  696. if (!event) {
  697. /* Make a new event name */
  698. if (symbol)
  699. snprintf(buf, MAX_EVENT_NAME_LEN, "%c_%s_%ld",
  700. is_return ? 'r' : 'p', symbol, offset);
  701. else
  702. snprintf(buf, MAX_EVENT_NAME_LEN, "%c_0x%p",
  703. is_return ? 'r' : 'p', addr);
  704. sanitize_event_name(buf);
  705. event = buf;
  706. }
  707. tk = alloc_trace_kprobe(group, event, addr, symbol, offset, maxactive,
  708. argc, is_return);
  709. if (IS_ERR(tk)) {
  710. pr_info("Failed to allocate trace_probe.(%d)\n",
  711. (int)PTR_ERR(tk));
  712. return PTR_ERR(tk);
  713. }
  714. /* parse arguments */
  715. ret = 0;
  716. for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
  717. struct probe_arg *parg = &tk->tp.args[i];
  718. /* Increment count for freeing args in error case */
  719. tk->tp.nr_args++;
  720. /* Parse argument name */
  721. arg = strchr(argv[i], '=');
  722. if (arg) {
  723. *arg++ = '\0';
  724. parg->name = kstrdup(argv[i], GFP_KERNEL);
  725. } else {
  726. arg = argv[i];
  727. /* If argument name is omitted, set "argN" */
  728. snprintf(buf, MAX_EVENT_NAME_LEN, "arg%d", i + 1);
  729. parg->name = kstrdup(buf, GFP_KERNEL);
  730. }
  731. if (!parg->name) {
  732. pr_info("Failed to allocate argument[%d] name.\n", i);
  733. ret = -ENOMEM;
  734. goto error;
  735. }
  736. if (!is_good_name(parg->name)) {
  737. pr_info("Invalid argument[%d] name: %s\n",
  738. i, parg->name);
  739. ret = -EINVAL;
  740. goto error;
  741. }
  742. if (traceprobe_conflict_field_name(parg->name,
  743. tk->tp.args, i)) {
  744. pr_info("Argument[%d] name '%s' conflicts with "
  745. "another field.\n", i, argv[i]);
  746. ret = -EINVAL;
  747. goto error;
  748. }
  749. /* Parse fetch argument */
  750. ret = traceprobe_parse_probe_arg(arg, &tk->tp.size, parg,
  751. is_return, true,
  752. kprobes_fetch_type_table);
  753. if (ret) {
  754. pr_info("Parse error at argument[%d]. (%d)\n", i, ret);
  755. goto error;
  756. }
  757. }
  758. ret = register_trace_kprobe(tk);
  759. if (ret)
  760. goto error;
  761. return 0;
  762. error:
  763. free_trace_kprobe(tk);
  764. return ret;
  765. }
  766. static int release_all_trace_kprobes(void)
  767. {
  768. struct trace_kprobe *tk;
  769. int ret = 0;
  770. mutex_lock(&probe_lock);
  771. /* Ensure no probe is in use. */
  772. list_for_each_entry(tk, &probe_list, list)
  773. if (trace_probe_is_enabled(&tk->tp)) {
  774. ret = -EBUSY;
  775. goto end;
  776. }
  777. /* TODO: Use batch unregistration */
  778. while (!list_empty(&probe_list)) {
  779. tk = list_entry(probe_list.next, struct trace_kprobe, list);
  780. ret = unregister_trace_kprobe(tk);
  781. if (ret)
  782. goto end;
  783. free_trace_kprobe(tk);
  784. }
  785. end:
  786. mutex_unlock(&probe_lock);
  787. return ret;
  788. }
  789. /* Probes listing interfaces */
  790. static void *probes_seq_start(struct seq_file *m, loff_t *pos)
  791. {
  792. mutex_lock(&probe_lock);
  793. return seq_list_start(&probe_list, *pos);
  794. }
  795. static void *probes_seq_next(struct seq_file *m, void *v, loff_t *pos)
  796. {
  797. return seq_list_next(v, &probe_list, pos);
  798. }
  799. static void probes_seq_stop(struct seq_file *m, void *v)
  800. {
  801. mutex_unlock(&probe_lock);
  802. }
  803. static int probes_seq_show(struct seq_file *m, void *v)
  804. {
  805. struct trace_kprobe *tk = v;
  806. int i;
  807. seq_putc(m, trace_kprobe_is_return(tk) ? 'r' : 'p');
  808. seq_printf(m, ":%s/%s", tk->tp.call.class->system,
  809. trace_event_name(&tk->tp.call));
  810. if (!tk->symbol)
  811. seq_printf(m, " 0x%p", tk->rp.kp.addr);
  812. else if (tk->rp.kp.offset)
  813. seq_printf(m, " %s+%u", trace_kprobe_symbol(tk),
  814. tk->rp.kp.offset);
  815. else
  816. seq_printf(m, " %s", trace_kprobe_symbol(tk));
  817. for (i = 0; i < tk->tp.nr_args; i++)
  818. seq_printf(m, " %s=%s", tk->tp.args[i].name, tk->tp.args[i].comm);
  819. seq_putc(m, '\n');
  820. return 0;
  821. }
  822. static const struct seq_operations probes_seq_op = {
  823. .start = probes_seq_start,
  824. .next = probes_seq_next,
  825. .stop = probes_seq_stop,
  826. .show = probes_seq_show
  827. };
  828. static int probes_open(struct inode *inode, struct file *file)
  829. {
  830. int ret;
  831. if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_TRUNC)) {
  832. ret = release_all_trace_kprobes();
  833. if (ret < 0)
  834. return ret;
  835. }
  836. return seq_open(file, &probes_seq_op);
  837. }
  838. static ssize_t probes_write(struct file *file, const char __user *buffer,
  839. size_t count, loff_t *ppos)
  840. {
  841. return trace_parse_run_command(file, buffer, count, ppos,
  842. create_trace_kprobe);
  843. }
  844. static const struct file_operations kprobe_events_ops = {
  845. .owner = THIS_MODULE,
  846. .open = probes_open,
  847. .read = seq_read,
  848. .llseek = seq_lseek,
  849. .release = seq_release,
  850. .write = probes_write,
  851. };
  852. /* Probes profiling interfaces */
  853. static int probes_profile_seq_show(struct seq_file *m, void *v)
  854. {
  855. struct trace_kprobe *tk = v;
  856. seq_printf(m, " %-44s %15lu %15lu\n",
  857. trace_event_name(&tk->tp.call),
  858. trace_kprobe_nhit(tk),
  859. tk->rp.kp.nmissed);
  860. return 0;
  861. }
  862. static const struct seq_operations profile_seq_op = {
  863. .start = probes_seq_start,
  864. .next = probes_seq_next,
  865. .stop = probes_seq_stop,
  866. .show = probes_profile_seq_show
  867. };
  868. static int profile_open(struct inode *inode, struct file *file)
  869. {
  870. return seq_open(file, &profile_seq_op);
  871. }
  872. static const struct file_operations kprobe_profile_ops = {
  873. .owner = THIS_MODULE,
  874. .open = profile_open,
  875. .read = seq_read,
  876. .llseek = seq_lseek,
  877. .release = seq_release,
  878. };
  879. /* Kprobe handler */
  880. static nokprobe_inline void
  881. __kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs,
  882. struct trace_event_file *trace_file)
  883. {
  884. struct kprobe_trace_entry_head *entry;
  885. struct ring_buffer_event *event;
  886. struct ring_buffer *buffer;
  887. int size, dsize, pc;
  888. unsigned long irq_flags;
  889. struct trace_event_call *call = &tk->tp.call;
  890. WARN_ON(call != trace_file->event_call);
  891. if (trace_trigger_soft_disabled(trace_file))
  892. return;
  893. local_save_flags(irq_flags);
  894. pc = preempt_count();
  895. dsize = __get_data_size(&tk->tp, regs);
  896. size = sizeof(*entry) + tk->tp.size + dsize;
  897. event = trace_event_buffer_lock_reserve(&buffer, trace_file,
  898. call->event.type,
  899. size, irq_flags, pc);
  900. if (!event)
  901. return;
  902. entry = ring_buffer_event_data(event);
  903. entry->ip = (unsigned long)tk->rp.kp.addr;
  904. store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
  905. event_trigger_unlock_commit_regs(trace_file, buffer, event,
  906. entry, irq_flags, pc, regs);
  907. }
  908. static void
  909. kprobe_trace_func(struct trace_kprobe *tk, struct pt_regs *regs)
  910. {
  911. struct event_file_link *link;
  912. list_for_each_entry_rcu(link, &tk->tp.files, list)
  913. __kprobe_trace_func(tk, regs, link->file);
  914. }
  915. NOKPROBE_SYMBOL(kprobe_trace_func);
  916. /* Kretprobe handler */
  917. static nokprobe_inline void
  918. __kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
  919. struct pt_regs *regs,
  920. struct trace_event_file *trace_file)
  921. {
  922. struct kretprobe_trace_entry_head *entry;
  923. struct ring_buffer_event *event;
  924. struct ring_buffer *buffer;
  925. int size, pc, dsize;
  926. unsigned long irq_flags;
  927. struct trace_event_call *call = &tk->tp.call;
  928. WARN_ON(call != trace_file->event_call);
  929. if (trace_trigger_soft_disabled(trace_file))
  930. return;
  931. local_save_flags(irq_flags);
  932. pc = preempt_count();
  933. dsize = __get_data_size(&tk->tp, regs);
  934. size = sizeof(*entry) + tk->tp.size + dsize;
  935. event = trace_event_buffer_lock_reserve(&buffer, trace_file,
  936. call->event.type,
  937. size, irq_flags, pc);
  938. if (!event)
  939. return;
  940. entry = ring_buffer_event_data(event);
  941. entry->func = (unsigned long)tk->rp.kp.addr;
  942. entry->ret_ip = (unsigned long)ri->ret_addr;
  943. store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
  944. event_trigger_unlock_commit_regs(trace_file, buffer, event,
  945. entry, irq_flags, pc, regs);
  946. }
  947. static void
  948. kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
  949. struct pt_regs *regs)
  950. {
  951. struct event_file_link *link;
  952. list_for_each_entry_rcu(link, &tk->tp.files, list)
  953. __kretprobe_trace_func(tk, ri, regs, link->file);
  954. }
  955. NOKPROBE_SYMBOL(kretprobe_trace_func);
  956. /* Event entry printers */
  957. static enum print_line_t
  958. print_kprobe_event(struct trace_iterator *iter, int flags,
  959. struct trace_event *event)
  960. {
  961. struct kprobe_trace_entry_head *field;
  962. struct trace_seq *s = &iter->seq;
  963. struct trace_probe *tp;
  964. u8 *data;
  965. int i;
  966. field = (struct kprobe_trace_entry_head *)iter->ent;
  967. tp = container_of(event, struct trace_probe, call.event);
  968. trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
  969. if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET))
  970. goto out;
  971. trace_seq_putc(s, ')');
  972. data = (u8 *)&field[1];
  973. for (i = 0; i < tp->nr_args; i++)
  974. if (!tp->args[i].type->print(s, tp->args[i].name,
  975. data + tp->args[i].offset, field))
  976. goto out;
  977. trace_seq_putc(s, '\n');
  978. out:
  979. return trace_handle_return(s);
  980. }
  981. static enum print_line_t
  982. print_kretprobe_event(struct trace_iterator *iter, int flags,
  983. struct trace_event *event)
  984. {
  985. struct kretprobe_trace_entry_head *field;
  986. struct trace_seq *s = &iter->seq;
  987. struct trace_probe *tp;
  988. u8 *data;
  989. int i;
  990. field = (struct kretprobe_trace_entry_head *)iter->ent;
  991. tp = container_of(event, struct trace_probe, call.event);
  992. trace_seq_printf(s, "%s: (", trace_event_name(&tp->call));
  993. if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET))
  994. goto out;
  995. trace_seq_puts(s, " <- ");
  996. if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET))
  997. goto out;
  998. trace_seq_putc(s, ')');
  999. data = (u8 *)&field[1];
  1000. for (i = 0; i < tp->nr_args; i++)
  1001. if (!tp->args[i].type->print(s, tp->args[i].name,
  1002. data + tp->args[i].offset, field))
  1003. goto out;
  1004. trace_seq_putc(s, '\n');
  1005. out:
  1006. return trace_handle_return(s);
  1007. }
  1008. static int kprobe_event_define_fields(struct trace_event_call *event_call)
  1009. {
  1010. int ret, i;
  1011. struct kprobe_trace_entry_head field;
  1012. struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
  1013. DEFINE_FIELD(unsigned long, ip, FIELD_STRING_IP, 0);
  1014. /* Set argument names as fields */
  1015. for (i = 0; i < tk->tp.nr_args; i++) {
  1016. struct probe_arg *parg = &tk->tp.args[i];
  1017. ret = trace_define_field(event_call, parg->type->fmttype,
  1018. parg->name,
  1019. sizeof(field) + parg->offset,
  1020. parg->type->size,
  1021. parg->type->is_signed,
  1022. FILTER_OTHER);
  1023. if (ret)
  1024. return ret;
  1025. }
  1026. return 0;
  1027. }
  1028. static int kretprobe_event_define_fields(struct trace_event_call *event_call)
  1029. {
  1030. int ret, i;
  1031. struct kretprobe_trace_entry_head field;
  1032. struct trace_kprobe *tk = (struct trace_kprobe *)event_call->data;
  1033. DEFINE_FIELD(unsigned long, func, FIELD_STRING_FUNC, 0);
  1034. DEFINE_FIELD(unsigned long, ret_ip, FIELD_STRING_RETIP, 0);
  1035. /* Set argument names as fields */
  1036. for (i = 0; i < tk->tp.nr_args; i++) {
  1037. struct probe_arg *parg = &tk->tp.args[i];
  1038. ret = trace_define_field(event_call, parg->type->fmttype,
  1039. parg->name,
  1040. sizeof(field) + parg->offset,
  1041. parg->type->size,
  1042. parg->type->is_signed,
  1043. FILTER_OTHER);
  1044. if (ret)
  1045. return ret;
  1046. }
  1047. return 0;
  1048. }
  1049. #ifdef CONFIG_PERF_EVENTS
  1050. /* Kprobe profile handler */
  1051. static int
  1052. kprobe_perf_func(struct trace_kprobe *tk, struct pt_regs *regs)
  1053. {
  1054. struct trace_event_call *call = &tk->tp.call;
  1055. struct kprobe_trace_entry_head *entry;
  1056. struct hlist_head *head;
  1057. int size, __size, dsize;
  1058. int rctx;
  1059. if (bpf_prog_array_valid(call)) {
  1060. unsigned long orig_ip = instruction_pointer(regs);
  1061. int ret;
  1062. ret = trace_call_bpf(call, regs);
  1063. /*
  1064. * We need to check and see if we modified the pc of the
  1065. * pt_regs, and if so return 1 so that we don't do the
  1066. * single stepping.
  1067. */
  1068. if (orig_ip != instruction_pointer(regs))
  1069. return 1;
  1070. if (!ret)
  1071. return 0;
  1072. }
  1073. head = this_cpu_ptr(call->perf_events);
  1074. if (hlist_empty(head))
  1075. return 0;
  1076. dsize = __get_data_size(&tk->tp, regs);
  1077. __size = sizeof(*entry) + tk->tp.size + dsize;
  1078. size = ALIGN(__size + sizeof(u32), sizeof(u64));
  1079. size -= sizeof(u32);
  1080. entry = perf_trace_buf_alloc(size, NULL, &rctx);
  1081. if (!entry)
  1082. return 0;
  1083. entry->ip = (unsigned long)tk->rp.kp.addr;
  1084. memset(&entry[1], 0, dsize);
  1085. store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
  1086. perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
  1087. head, NULL);
  1088. return 0;
  1089. }
  1090. NOKPROBE_SYMBOL(kprobe_perf_func);
  1091. /* Kretprobe profile handler */
  1092. static void
  1093. kretprobe_perf_func(struct trace_kprobe *tk, struct kretprobe_instance *ri,
  1094. struct pt_regs *regs)
  1095. {
  1096. struct trace_event_call *call = &tk->tp.call;
  1097. struct kretprobe_trace_entry_head *entry;
  1098. struct hlist_head *head;
  1099. int size, __size, dsize;
  1100. int rctx;
  1101. if (bpf_prog_array_valid(call) && !trace_call_bpf(call, regs))
  1102. return;
  1103. head = this_cpu_ptr(call->perf_events);
  1104. if (hlist_empty(head))
  1105. return;
  1106. dsize = __get_data_size(&tk->tp, regs);
  1107. __size = sizeof(*entry) + tk->tp.size + dsize;
  1108. size = ALIGN(__size + sizeof(u32), sizeof(u64));
  1109. size -= sizeof(u32);
  1110. entry = perf_trace_buf_alloc(size, NULL, &rctx);
  1111. if (!entry)
  1112. return;
  1113. entry->func = (unsigned long)tk->rp.kp.addr;
  1114. entry->ret_ip = (unsigned long)ri->ret_addr;
  1115. store_trace_args(sizeof(*entry), &tk->tp, regs, (u8 *)&entry[1], dsize);
  1116. perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs,
  1117. head, NULL);
  1118. }
  1119. NOKPROBE_SYMBOL(kretprobe_perf_func);
  1120. int bpf_get_kprobe_info(const struct perf_event *event, u32 *fd_type,
  1121. const char **symbol, u64 *probe_offset,
  1122. u64 *probe_addr, bool perf_type_tracepoint)
  1123. {
  1124. const char *pevent = trace_event_name(event->tp_event);
  1125. const char *group = event->tp_event->class->system;
  1126. struct trace_kprobe *tk;
  1127. if (perf_type_tracepoint)
  1128. tk = find_trace_kprobe(pevent, group);
  1129. else
  1130. tk = event->tp_event->data;
  1131. if (!tk)
  1132. return -EINVAL;
  1133. *fd_type = trace_kprobe_is_return(tk) ? BPF_FD_TYPE_KRETPROBE
  1134. : BPF_FD_TYPE_KPROBE;
  1135. if (tk->symbol) {
  1136. *symbol = tk->symbol;
  1137. *probe_offset = tk->rp.kp.offset;
  1138. *probe_addr = 0;
  1139. } else {
  1140. *symbol = NULL;
  1141. *probe_offset = 0;
  1142. *probe_addr = (unsigned long)tk->rp.kp.addr;
  1143. }
  1144. return 0;
  1145. }
  1146. #endif /* CONFIG_PERF_EVENTS */
  1147. /*
  1148. * called by perf_trace_init() or __ftrace_set_clr_event() under event_mutex.
  1149. *
  1150. * kprobe_trace_self_tests_init() does enable_trace_probe/disable_trace_probe
  1151. * lockless, but we can't race with this __init function.
  1152. */
  1153. static int kprobe_register(struct trace_event_call *event,
  1154. enum trace_reg type, void *data)
  1155. {
  1156. struct trace_kprobe *tk = (struct trace_kprobe *)event->data;
  1157. struct trace_event_file *file = data;
  1158. switch (type) {
  1159. case TRACE_REG_REGISTER:
  1160. return enable_trace_kprobe(tk, file);
  1161. case TRACE_REG_UNREGISTER:
  1162. return disable_trace_kprobe(tk, file);
  1163. #ifdef CONFIG_PERF_EVENTS
  1164. case TRACE_REG_PERF_REGISTER:
  1165. return enable_trace_kprobe(tk, NULL);
  1166. case TRACE_REG_PERF_UNREGISTER:
  1167. return disable_trace_kprobe(tk, NULL);
  1168. case TRACE_REG_PERF_OPEN:
  1169. case TRACE_REG_PERF_CLOSE:
  1170. case TRACE_REG_PERF_ADD:
  1171. case TRACE_REG_PERF_DEL:
  1172. return 0;
  1173. #endif
  1174. }
  1175. return 0;
  1176. }
  1177. static int kprobe_dispatcher(struct kprobe *kp, struct pt_regs *regs)
  1178. {
  1179. struct trace_kprobe *tk = container_of(kp, struct trace_kprobe, rp.kp);
  1180. int ret = 0;
  1181. raw_cpu_inc(*tk->nhit);
  1182. if (tk->tp.flags & TP_FLAG_TRACE)
  1183. kprobe_trace_func(tk, regs);
  1184. #ifdef CONFIG_PERF_EVENTS
  1185. if (tk->tp.flags & TP_FLAG_PROFILE)
  1186. ret = kprobe_perf_func(tk, regs);
  1187. #endif
  1188. return ret;
  1189. }
  1190. NOKPROBE_SYMBOL(kprobe_dispatcher);
  1191. static int
  1192. kretprobe_dispatcher(struct kretprobe_instance *ri, struct pt_regs *regs)
  1193. {
  1194. struct trace_kprobe *tk = container_of(ri->rp, struct trace_kprobe, rp);
  1195. raw_cpu_inc(*tk->nhit);
  1196. if (tk->tp.flags & TP_FLAG_TRACE)
  1197. kretprobe_trace_func(tk, ri, regs);
  1198. #ifdef CONFIG_PERF_EVENTS
  1199. if (tk->tp.flags & TP_FLAG_PROFILE)
  1200. kretprobe_perf_func(tk, ri, regs);
  1201. #endif
  1202. return 0; /* We don't tweek kernel, so just return 0 */
  1203. }
  1204. NOKPROBE_SYMBOL(kretprobe_dispatcher);
  1205. static struct trace_event_functions kretprobe_funcs = {
  1206. .trace = print_kretprobe_event
  1207. };
  1208. static struct trace_event_functions kprobe_funcs = {
  1209. .trace = print_kprobe_event
  1210. };
  1211. static inline void init_trace_event_call(struct trace_kprobe *tk,
  1212. struct trace_event_call *call)
  1213. {
  1214. INIT_LIST_HEAD(&call->class->fields);
  1215. if (trace_kprobe_is_return(tk)) {
  1216. call->event.funcs = &kretprobe_funcs;
  1217. call->class->define_fields = kretprobe_event_define_fields;
  1218. } else {
  1219. call->event.funcs = &kprobe_funcs;
  1220. call->class->define_fields = kprobe_event_define_fields;
  1221. }
  1222. call->flags = TRACE_EVENT_FL_KPROBE;
  1223. call->class->reg = kprobe_register;
  1224. call->data = tk;
  1225. }
  1226. static int register_kprobe_event(struct trace_kprobe *tk)
  1227. {
  1228. struct trace_event_call *call = &tk->tp.call;
  1229. int ret = 0;
  1230. init_trace_event_call(tk, call);
  1231. if (set_print_fmt(&tk->tp, trace_kprobe_is_return(tk)) < 0)
  1232. return -ENOMEM;
  1233. ret = register_trace_event(&call->event);
  1234. if (!ret) {
  1235. kfree(call->print_fmt);
  1236. return -ENODEV;
  1237. }
  1238. ret = trace_add_event_call(call);
  1239. if (ret) {
  1240. pr_info("Failed to register kprobe event: %s\n",
  1241. trace_event_name(call));
  1242. kfree(call->print_fmt);
  1243. unregister_trace_event(&call->event);
  1244. }
  1245. return ret;
  1246. }
  1247. static int unregister_kprobe_event(struct trace_kprobe *tk)
  1248. {
  1249. int ret;
  1250. /* tp->event is unregistered in trace_remove_event_call() */
  1251. ret = trace_remove_event_call(&tk->tp.call);
  1252. if (!ret)
  1253. kfree(tk->tp.call.print_fmt);
  1254. return ret;
  1255. }
  1256. #ifdef CONFIG_PERF_EVENTS
  1257. /* create a trace_kprobe, but don't add it to global lists */
  1258. struct trace_event_call *
  1259. create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
  1260. bool is_return)
  1261. {
  1262. struct trace_kprobe *tk;
  1263. int ret;
  1264. char *event;
  1265. /*
  1266. * local trace_kprobes are not added to probe_list, so they are never
  1267. * searched in find_trace_kprobe(). Therefore, there is no concern of
  1268. * duplicated name here.
  1269. */
  1270. event = func ? func : "DUMMY_EVENT";
  1271. tk = alloc_trace_kprobe(KPROBE_EVENT_SYSTEM, event, (void *)addr, func,
  1272. offs, 0 /* maxactive */, 0 /* nargs */,
  1273. is_return);
  1274. if (IS_ERR(tk)) {
  1275. pr_info("Failed to allocate trace_probe.(%d)\n",
  1276. (int)PTR_ERR(tk));
  1277. return ERR_CAST(tk);
  1278. }
  1279. init_trace_event_call(tk, &tk->tp.call);
  1280. if (set_print_fmt(&tk->tp, trace_kprobe_is_return(tk)) < 0) {
  1281. ret = -ENOMEM;
  1282. goto error;
  1283. }
  1284. ret = __register_trace_kprobe(tk);
  1285. if (ret < 0) {
  1286. kfree(tk->tp.call.print_fmt);
  1287. goto error;
  1288. }
  1289. return &tk->tp.call;
  1290. error:
  1291. free_trace_kprobe(tk);
  1292. return ERR_PTR(ret);
  1293. }
  1294. void destroy_local_trace_kprobe(struct trace_event_call *event_call)
  1295. {
  1296. struct trace_kprobe *tk;
  1297. tk = container_of(event_call, struct trace_kprobe, tp.call);
  1298. if (trace_probe_is_enabled(&tk->tp)) {
  1299. WARN_ON(1);
  1300. return;
  1301. }
  1302. __unregister_trace_kprobe(tk);
  1303. kfree(tk->tp.call.print_fmt);
  1304. free_trace_kprobe(tk);
  1305. }
  1306. #endif /* CONFIG_PERF_EVENTS */
  1307. /* Make a tracefs interface for controlling probe points */
  1308. static __init int init_kprobe_trace(void)
  1309. {
  1310. struct dentry *d_tracer;
  1311. struct dentry *entry;
  1312. if (register_module_notifier(&trace_kprobe_module_nb))
  1313. return -EINVAL;
  1314. d_tracer = tracing_init_dentry();
  1315. if (IS_ERR(d_tracer))
  1316. return 0;
  1317. entry = tracefs_create_file("kprobe_events", 0644, d_tracer,
  1318. NULL, &kprobe_events_ops);
  1319. /* Event list interface */
  1320. if (!entry)
  1321. pr_warn("Could not create tracefs 'kprobe_events' entry\n");
  1322. /* Profile interface */
  1323. entry = tracefs_create_file("kprobe_profile", 0444, d_tracer,
  1324. NULL, &kprobe_profile_ops);
  1325. if (!entry)
  1326. pr_warn("Could not create tracefs 'kprobe_profile' entry\n");
  1327. return 0;
  1328. }
  1329. fs_initcall(init_kprobe_trace);
  1330. #ifdef CONFIG_FTRACE_STARTUP_TEST
  1331. static __init struct trace_event_file *
  1332. find_trace_probe_file(struct trace_kprobe *tk, struct trace_array *tr)
  1333. {
  1334. struct trace_event_file *file;
  1335. list_for_each_entry(file, &tr->events, list)
  1336. if (file->event_call == &tk->tp.call)
  1337. return file;
  1338. return NULL;
  1339. }
  1340. /*
  1341. * Nobody but us can call enable_trace_kprobe/disable_trace_kprobe at this
  1342. * stage, we can do this lockless.
  1343. */
  1344. static __init int kprobe_trace_self_tests_init(void)
  1345. {
  1346. int ret, warn = 0;
  1347. int (*target)(int, int, int, int, int, int);
  1348. struct trace_kprobe *tk;
  1349. struct trace_event_file *file;
  1350. if (tracing_is_disabled())
  1351. return -ENODEV;
  1352. target = kprobe_trace_selftest_target;
  1353. pr_info("Testing kprobe tracing: ");
  1354. ret = trace_run_command("p:testprobe kprobe_trace_selftest_target "
  1355. "$stack $stack0 +0($stack)",
  1356. create_trace_kprobe);
  1357. if (WARN_ON_ONCE(ret)) {
  1358. pr_warn("error on probing function entry.\n");
  1359. warn++;
  1360. } else {
  1361. /* Enable trace point */
  1362. tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
  1363. if (WARN_ON_ONCE(tk == NULL)) {
  1364. pr_warn("error on getting new probe.\n");
  1365. warn++;
  1366. } else {
  1367. file = find_trace_probe_file(tk, top_trace_array());
  1368. if (WARN_ON_ONCE(file == NULL)) {
  1369. pr_warn("error on getting probe file.\n");
  1370. warn++;
  1371. } else
  1372. enable_trace_kprobe(tk, file);
  1373. }
  1374. }
  1375. ret = trace_run_command("r:testprobe2 kprobe_trace_selftest_target "
  1376. "$retval", create_trace_kprobe);
  1377. if (WARN_ON_ONCE(ret)) {
  1378. pr_warn("error on probing function return.\n");
  1379. warn++;
  1380. } else {
  1381. /* Enable trace point */
  1382. tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
  1383. if (WARN_ON_ONCE(tk == NULL)) {
  1384. pr_warn("error on getting 2nd new probe.\n");
  1385. warn++;
  1386. } else {
  1387. file = find_trace_probe_file(tk, top_trace_array());
  1388. if (WARN_ON_ONCE(file == NULL)) {
  1389. pr_warn("error on getting probe file.\n");
  1390. warn++;
  1391. } else
  1392. enable_trace_kprobe(tk, file);
  1393. }
  1394. }
  1395. if (warn)
  1396. goto end;
  1397. ret = target(1, 2, 3, 4, 5, 6);
  1398. /*
  1399. * Not expecting an error here, the check is only to prevent the
  1400. * optimizer from removing the call to target() as otherwise there
  1401. * are no side-effects and the call is never performed.
  1402. */
  1403. if (ret != 21)
  1404. warn++;
  1405. /* Disable trace points before removing it */
  1406. tk = find_trace_kprobe("testprobe", KPROBE_EVENT_SYSTEM);
  1407. if (WARN_ON_ONCE(tk == NULL)) {
  1408. pr_warn("error on getting test probe.\n");
  1409. warn++;
  1410. } else {
  1411. if (trace_kprobe_nhit(tk) != 1) {
  1412. pr_warn("incorrect number of testprobe hits\n");
  1413. warn++;
  1414. }
  1415. file = find_trace_probe_file(tk, top_trace_array());
  1416. if (WARN_ON_ONCE(file == NULL)) {
  1417. pr_warn("error on getting probe file.\n");
  1418. warn++;
  1419. } else
  1420. disable_trace_kprobe(tk, file);
  1421. }
  1422. tk = find_trace_kprobe("testprobe2", KPROBE_EVENT_SYSTEM);
  1423. if (WARN_ON_ONCE(tk == NULL)) {
  1424. pr_warn("error on getting 2nd test probe.\n");
  1425. warn++;
  1426. } else {
  1427. if (trace_kprobe_nhit(tk) != 1) {
  1428. pr_warn("incorrect number of testprobe2 hits\n");
  1429. warn++;
  1430. }
  1431. file = find_trace_probe_file(tk, top_trace_array());
  1432. if (WARN_ON_ONCE(file == NULL)) {
  1433. pr_warn("error on getting probe file.\n");
  1434. warn++;
  1435. } else
  1436. disable_trace_kprobe(tk, file);
  1437. }
  1438. ret = trace_run_command("-:testprobe", create_trace_kprobe);
  1439. if (WARN_ON_ONCE(ret)) {
  1440. pr_warn("error on deleting a probe.\n");
  1441. warn++;
  1442. }
  1443. ret = trace_run_command("-:testprobe2", create_trace_kprobe);
  1444. if (WARN_ON_ONCE(ret)) {
  1445. pr_warn("error on deleting a probe.\n");
  1446. warn++;
  1447. }
  1448. end:
  1449. release_all_trace_kprobes();
  1450. /*
  1451. * Wait for the optimizer work to finish. Otherwise it might fiddle
  1452. * with probes in already freed __init text.
  1453. */
  1454. wait_for_kprobe_optimizer();
  1455. if (warn)
  1456. pr_cont("NG: Some tests are failed. Please check them.\n");
  1457. else
  1458. pr_cont("OK\n");
  1459. return 0;
  1460. }
  1461. late_initcall(kprobe_trace_self_tests_init);
  1462. #endif