trace_kprobe.c 42 KB

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