Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1268702 > unrolled thread
| Started by | Wang Nan <wangnan0@huawei.com> |
|---|---|
| First post | 2015-11-13 10:10 +0100 |
| Last post | 2015-11-14 04:40 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH] perf probe: Clear probe_trace_event when add_probe_trace_event() fails Wang Nan <wangnan0@huawei.com> - 2015-11-13 10:10 +0100
RE: [PATCH] perf probe: Clear probe_trace_event when add_probe_trace_event() fails 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> - 2015-11-14 04:40 +0100
| From | Wang Nan <wangnan0@huawei.com> |
|---|---|
| Date | 2015-11-13 10:10 +0100 |
| Subject | [PATCH] perf probe: Clear probe_trace_event when add_probe_trace_event() fails |
| Message-ID | <quiwN-4sk-1@gated-at.bofh.it> |
When probe with glob, error in add_probe_trace_event() won't be passed
to debuginfo__find_trace_events() because it whould be modified by
probe_point_search_cb(). It causes segfault if perf failed to find
argument for one probing point matched by the glob. For example:
# ./perf probe -v -n 'SyS_dup? oldfd'
probe-definition(0): SyS_dup? oldfd
symbol:SyS_dup? file:(null) line:0 offset:0 return:0 lazy:(null)
parsing arg: oldfd into oldfd
1 arguments
Looking at the vmlinux_path (7 entries long)
Using /lib/modules/4.3.0-rc4+/build/vmlinux for symbols
Open Debuginfo file: /lib/modules/4.3.0-rc4+/build/vmlinux
Try to find probe point from debuginfo.
Matched function: SyS_dup3
found inline addr: 0xffffffff812095c0
Probe point found: SyS_dup3+0
Searching 'oldfd' variable in context.
Converting variable oldfd into trace event.
oldfd type is long int.
found inline addr: 0xffffffff812096d4
Probe point found: SyS_dup2+36
Searching 'oldfd' variable in context.
Failed to find 'oldfd' in this function.
Matched function: SyS_dup3
Probe point found: SyS_dup3+0
Searching 'oldfd' variable in context.
Converting variable oldfd into trace event.
oldfd type is long int.
Matched function: SyS_dup2
Probe point found: SyS_dup2+0
Searching 'oldfd' variable in context.
Converting variable oldfd into trace event.
oldfd type is long int.
Found 4 probe_trace_events.
Opening /sys/kernel/debug/tracing//kprobe_events write=1
Writing event: p:probe/SyS_dup3 _text+2135488 oldfd=%di:s64
Segmentation fault (core dumped)
This patch ensures add_probe_trace_event() not touch tf->ntevs and
tf->tevs if it returns failure.
Here is testing result:
# perf probe 'SyS_dup? oldfd'
Failed to find 'oldfd' in this function.
Added new events:
probe:SyS_dup3 (on SyS_dup? with oldfd)
probe:SyS_dup3_1 (on SyS_dup? with oldfd)
probe:SyS_dup2 (on SyS_dup? with oldfd)
You can now use it in all perf tools, such as:
perf record -e probe:SyS_dup2 -aR sleep 1
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
---
tools/perf/util/probe-finder.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 63993d7..05012bb 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -1183,7 +1183,7 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, struct probe_finder *pf)
container_of(pf, struct trace_event_finder, pf);
struct perf_probe_point *pp = &pf->pev->point;
struct probe_trace_event *tev;
- struct perf_probe_arg *args;
+ struct perf_probe_arg *args = NULL;
int ret, i;
/* Check number of tevs */
@@ -1198,19 +1198,23 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, struct probe_finder *pf)
ret = convert_to_trace_point(&pf->sp_die, tf->mod, pf->addr,
pp->retprobe, pp->function, &tev->point);
if (ret < 0)
- return ret;
+ goto end;
tev->point.realname = strdup(dwarf_diename(sc_die));
- if (!tev->point.realname)
- return -ENOMEM;
+ if (!tev->point.realname) {
+ ret = -ENOMEM;
+ goto end;
+ }
pr_debug("Probe point found: %s+%lu\n", tev->point.symbol,
tev->point.offset);
/* Expand special probe argument if exist */
args = zalloc(sizeof(struct perf_probe_arg) * MAX_PROBE_ARGS);
- if (args == NULL)
- return -ENOMEM;
+ if (args == NULL) {
+ ret = -ENOMEM;
+ goto end;
+ }
ret = expand_probe_args(sc_die, pf, args);
if (ret < 0)
@@ -1234,6 +1238,10 @@ static int add_probe_trace_event(Dwarf_Die *sc_die, struct probe_finder *pf)
}
end:
+ if (ret) {
+ clear_probe_trace_event(tev);
+ tf->ntevs--;
+ }
free(args);
return ret;
}
--
1.8.3.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> |
|---|---|
| Date | 2015-11-14 04:40 +0100 |
| Subject | RE: [PATCH] perf probe: Clear probe_trace_event when add_probe_trace_event() fails |
| Message-ID | <quzQZ-76M-5@gated-at.bofh.it> |
| In reply to | #1268702 |
PkZyb206IFdhbmcgTmFuIFttYWlsdG86d2FuZ25hbjBAaHVhd2VpLmNvbV0NCj4NCj5XaGVuIHBy b2JlIHdpdGggZ2xvYiwgZXJyb3IgaW4gYWRkX3Byb2JlX3RyYWNlX2V2ZW50KCkgd29uJ3QgYmUg cGFzc2VkDQo+dG8gZGVidWdpbmZvX19maW5kX3RyYWNlX2V2ZW50cygpIGJlY2F1c2UgaXQgd2hv dWxkIGJlIG1vZGlmaWVkIGJ5DQo+cHJvYmVfcG9pbnRfc2VhcmNoX2NiKCkuIEl0IGNhdXNlcyBz ZWdmYXVsdCBpZiBwZXJmIGZhaWxlZCB0byBmaW5kDQo+YXJndW1lbnQgZm9yIG9uZSBwcm9iaW5n IHBvaW50IG1hdGNoZWQgYnkgdGhlIGdsb2IuIEZvciBleGFtcGxlOg0KPg0KPiAjIC4vcGVyZiBw cm9iZSAtdiAtbiAnU3lTX2R1cD8gb2xkZmQnDQo+IHByb2JlLWRlZmluaXRpb24oMCk6IFN5U19k dXA/IG9sZGZkDQo+IHN5bWJvbDpTeVNfZHVwPyBmaWxlOihudWxsKSBsaW5lOjAgb2Zmc2V0OjAg cmV0dXJuOjAgbGF6eToobnVsbCkNCj4gcGFyc2luZyBhcmc6IG9sZGZkIGludG8gb2xkZmQNCj4g MSBhcmd1bWVudHMNCj4gTG9va2luZyBhdCB0aGUgdm1saW51eF9wYXRoICg3IGVudHJpZXMgbG9u ZykNCj4gVXNpbmcgL2xpYi9tb2R1bGVzLzQuMy4wLXJjNCsvYnVpbGQvdm1saW51eCBmb3Igc3lt Ym9scw0KPiBPcGVuIERlYnVnaW5mbyBmaWxlOiAvbGliL21vZHVsZXMvNC4zLjAtcmM0Ky9idWls ZC92bWxpbnV4DQo+IFRyeSB0byBmaW5kIHByb2JlIHBvaW50IGZyb20gZGVidWdpbmZvLg0KPiBN YXRjaGVkIGZ1bmN0aW9uOiBTeVNfZHVwMw0KPiBmb3VuZCBpbmxpbmUgYWRkcjogMHhmZmZmZmZm ZjgxMjA5NWMwDQo+IFByb2JlIHBvaW50IGZvdW5kOiBTeVNfZHVwMyswDQo+IFNlYXJjaGluZyAn b2xkZmQnIHZhcmlhYmxlIGluIGNvbnRleHQuDQo+IENvbnZlcnRpbmcgdmFyaWFibGUgb2xkZmQg aW50byB0cmFjZSBldmVudC4NCj4gb2xkZmQgdHlwZSBpcyBsb25nIGludC4NCj4gZm91bmQgaW5s aW5lIGFkZHI6IDB4ZmZmZmZmZmY4MTIwOTZkNA0KPiBQcm9iZSBwb2ludCBmb3VuZDogU3lTX2R1 cDIrMzYNCj4gU2VhcmNoaW5nICdvbGRmZCcgdmFyaWFibGUgaW4gY29udGV4dC4NCj4gRmFpbGVk IHRvIGZpbmQgJ29sZGZkJyBpbiB0aGlzIGZ1bmN0aW9uLg0KPiBNYXRjaGVkIGZ1bmN0aW9uOiBT eVNfZHVwMw0KPiBQcm9iZSBwb2ludCBmb3VuZDogU3lTX2R1cDMrMA0KPiBTZWFyY2hpbmcgJ29s ZGZkJyB2YXJpYWJsZSBpbiBjb250ZXh0Lg0KPiBDb252ZXJ0aW5nIHZhcmlhYmxlIG9sZGZkIGlu dG8gdHJhY2UgZXZlbnQuDQo+IG9sZGZkIHR5cGUgaXMgbG9uZyBpbnQuDQo+IE1hdGNoZWQgZnVu Y3Rpb246IFN5U19kdXAyDQo+IFByb2JlIHBvaW50IGZvdW5kOiBTeVNfZHVwMiswDQo+IFNlYXJj aGluZyAnb2xkZmQnIHZhcmlhYmxlIGluIGNvbnRleHQuDQo+IENvbnZlcnRpbmcgdmFyaWFibGUg b2xkZmQgaW50byB0cmFjZSBldmVudC4NCj4gb2xkZmQgdHlwZSBpcyBsb25nIGludC4NCj4gRm91 bmQgNCBwcm9iZV90cmFjZV9ldmVudHMuDQo+IE9wZW5pbmcgL3N5cy9rZXJuZWwvZGVidWcvdHJh Y2luZy8va3Byb2JlX2V2ZW50cyB3cml0ZT0xDQo+IFdyaXRpbmcgZXZlbnQ6IHA6cHJvYmUvU3lT X2R1cDMgX3RleHQrMjEzNTQ4OCBvbGRmZD0lZGk6czY0DQo+IFNlZ21lbnRhdGlvbiBmYXVsdCAo Y29yZSBkdW1wZWQpDQo+DQo+VGhpcyBwYXRjaCBlbnN1cmVzIGFkZF9wcm9iZV90cmFjZV9ldmVu dCgpIG5vdCB0b3VjaCB0Zi0+bnRldnMgYW5kDQo+dGYtPnRldnMgaWYgaXQgcmV0dXJucyBmYWls dXJlLg0KPg0KPkhlcmUgaXMgdGVzdGluZyByZXN1bHQ6DQo+DQo+ICMgcGVyZiBwcm9iZSAgJ1N5 U19kdXA/IG9sZGZkJw0KPiBGYWlsZWQgdG8gZmluZCAnb2xkZmQnIGluIHRoaXMgZnVuY3Rpb24u DQo+IEFkZGVkIG5ldyBldmVudHM6DQo+ICAgcHJvYmU6U3lTX2R1cDMgICAgICAgKG9uIFN5U19k dXA/IHdpdGggb2xkZmQpDQo+ICAgcHJvYmU6U3lTX2R1cDNfMSAgICAgKG9uIFN5U19kdXA/IHdp dGggb2xkZmQpDQo+ICAgcHJvYmU6U3lTX2R1cDIgICAgICAgKG9uIFN5U19kdXA/IHdpdGggb2xk ZmQpDQo+DQo+IFlvdSBjYW4gbm93IHVzZSBpdCBpbiBhbGwgcGVyZiB0b29scywgc3VjaCBhczoN Cj4NCj4JcGVyZiByZWNvcmQgLWUgcHJvYmU6U3lTX2R1cDIgLWFSIHNsZWVwIDENCg0KR29vZCBj YXRjaCENCg0KQWNrZWQtYnk6IE1hc2FtaSBIaXJhbWF0c3UgPG1hc2FtaS5oaXJhbWF0c3UucHRA aGl0YWNoaS5jb20+DQoNClRoYW5rcyENCg0KPg0KPlNpZ25lZC1vZmYtYnk6IFdhbmcgTmFuIDx3 YW5nbmFuMEBodWF3ZWkuY29tPg0KPkNjOiBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVA cmVkaGF0LmNvbT4NCj5DYzogTWFzYW1pIEhpcmFtYXRzdSA8bWFzYW1pLmhpcmFtYXRzdS5wdEBo aXRhY2hpLmNvbT4NCj5DYzogWmVmYW4gTGkgPGxpemVmYW5AaHVhd2VpLmNvbT4NCj5DYzogcGkz b3JhbWFAMTYzLmNvbQ0KPi0tLQ0KPiB0b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgfCAy MCArKysrKysrKysrKysrKy0tLS0tLQ0KPiAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygr KSwgNiBkZWxldGlvbnMoLSkNCj4NCj5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2Jl LWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jDQo+aW5kZXggNjM5OTNk Ny4uMDUwMTJiYiAxMDA2NDQNCj4tLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMN Cj4rKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMNCj5AQCAtMTE4Myw3ICsxMTgz LDcgQEAgc3RhdGljIGludCBhZGRfcHJvYmVfdHJhY2VfZXZlbnQoRHdhcmZfRGllICpzY19kaWUs IHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQ0KPiAJCQljb250YWluZXJfb2YocGYsIHN0cnVjdCB0 cmFjZV9ldmVudF9maW5kZXIsIHBmKTsNCj4gCXN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCA9 ICZwZi0+cGV2LT5wb2ludDsNCj4gCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2Ow0KPi0J c3RydWN0IHBlcmZfcHJvYmVfYXJnICphcmdzOw0KPisJc3RydWN0IHBlcmZfcHJvYmVfYXJnICph cmdzID0gTlVMTDsNCj4gCWludCByZXQsIGk7DQo+DQo+IAkvKiBDaGVjayBudW1iZXIgb2YgdGV2 cyAqLw0KPkBAIC0xMTk4LDE5ICsxMTk4LDIzIEBAIHN0YXRpYyBpbnQgYWRkX3Byb2JlX3RyYWNl X2V2ZW50KER3YXJmX0RpZSAqc2NfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikNCj4gCXJl dCA9IGNvbnZlcnRfdG9fdHJhY2VfcG9pbnQoJnBmLT5zcF9kaWUsIHRmLT5tb2QsIHBmLT5hZGRy LA0KPiAJCQkJICAgICBwcC0+cmV0cHJvYmUsIHBwLT5mdW5jdGlvbiwgJnRldi0+cG9pbnQpOw0K PiAJaWYgKHJldCA8IDApDQo+LQkJcmV0dXJuIHJldDsNCj4rCQlnb3RvIGVuZDsNCj4NCj4gCXRl di0+cG9pbnQucmVhbG5hbWUgPSBzdHJkdXAoZHdhcmZfZGllbmFtZShzY19kaWUpKTsNCj4tCWlm ICghdGV2LT5wb2ludC5yZWFsbmFtZSkNCj4tCQlyZXR1cm4gLUVOT01FTTsNCj4rCWlmICghdGV2 LT5wb2ludC5yZWFsbmFtZSkgew0KPisJCXJldCA9IC1FTk9NRU07DQo+KwkJZ290byBlbmQ7DQo+ Kwl9DQo+DQo+IAlwcl9kZWJ1ZygiUHJvYmUgcG9pbnQgZm91bmQ6ICVzKyVsdVxuIiwgdGV2LT5w b2ludC5zeW1ib2wsDQo+IAkJIHRldi0+cG9pbnQub2Zmc2V0KTsNCj4NCj4gCS8qIEV4cGFuZCBz cGVjaWFsIHByb2JlIGFyZ3VtZW50IGlmIGV4aXN0ICovDQo+IAlhcmdzID0gemFsbG9jKHNpemVv ZihzdHJ1Y3QgcGVyZl9wcm9iZV9hcmcpICogTUFYX1BST0JFX0FSR1MpOw0KPi0JaWYgKGFyZ3Mg PT0gTlVMTCkNCj4tCQlyZXR1cm4gLUVOT01FTTsNCj4rCWlmIChhcmdzID09IE5VTEwpIHsNCj4r CQlyZXQgPSAtRU5PTUVNOw0KPisJCWdvdG8gZW5kOw0KPisJfQ0KPg0KPiAJcmV0ID0gZXhwYW5k X3Byb2JlX2FyZ3Moc2NfZGllLCBwZiwgYXJncyk7DQo+IAlpZiAocmV0IDwgMCkNCj5AQCAtMTIz NCw2ICsxMjM4LDEwIEBAIHN0YXRpYyBpbnQgYWRkX3Byb2JlX3RyYWNlX2V2ZW50KER3YXJmX0Rp ZSAqc2NfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikNCj4gCX0NCj4NCj4gZW5kOg0KPisJ aWYgKHJldCkgew0KPisJCWNsZWFyX3Byb2JlX3RyYWNlX2V2ZW50KHRldik7DQo+KwkJdGYtPm50 ZXZzLS07DQo+Kwl9DQo+IAlmcmVlKGFyZ3MpOw0KPiAJcmV0dXJuIHJldDsNCj4gfQ0KPi0tDQo+ MS44LjMuNA0KDQo= -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web