A string copy, performed using `lttng_strncpy` is performed at the end
of trace_kernel_init_event_notifier_from_event_rule() and its return
value is stored in the function's `ret` variable, which is of type `enum
lttng_error_code`.
Since LTTNG_OK is not == 0, the return value is interpreted as an error,
which causes the registration of kernel-domain on-event-hit triggers
to fail.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia0bf6eb3d2a4fca8f9089ecd4fef7a311354560c
const struct lttng_event_rule *rule,
struct lttng_kernel_event_notifier *kernel_event_notifier)
{
const struct lttng_event_rule *rule,
struct lttng_kernel_event_notifier *kernel_event_notifier)
{
- enum lttng_error_code ret;
+ enum lttng_error_code ret_code;
switch (lttng_event_rule_get_type(rule)) {
case LTTNG_EVENT_RULE_TYPE_KPROBE:
switch (lttng_event_rule_get_type(rule)) {
case LTTNG_EVENT_RULE_TYPE_KPROBE:
status = lttng_event_rule_kprobe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
status = lttng_event_rule_kprobe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
kernel_event_notifier->event.u.kprobe.addr = address;
kernel_event_notifier->event.u.kprobe.offset = offset;
if (symbol_name) {
kernel_event_notifier->event.u.kprobe.addr = address;
kernel_event_notifier->event.u.kprobe.offset = offset;
if (symbol_name) {
- const int copy_ret = lttng_strncpy(
+ strncpy_ret = lttng_strncpy(
kernel_event_notifier->event.u.kprobe.symbol_name,
symbol_name, LTTNG_KERNEL_SYM_NAME_LEN);
kernel_event_notifier->event.u.kprobe.symbol_name,
symbol_name, LTTNG_KERNEL_SYM_NAME_LEN);
- if (copy_ret) {
- ret = LTTNG_ERR_INVALID;
+ if (strncpy_ret) {
+ ret_code = LTTNG_ERR_INVALID;
kernel_event_notifier->event.u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
status = lttng_event_rule_kprobe_get_name(rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
kernel_event_notifier->event.u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
status = lttng_event_rule_kprobe_get_name(rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
break;
}
case LTTNG_EVENT_RULE_TYPE_UPROBE:
break;
}
case LTTNG_EVENT_RULE_TYPE_UPROBE:
status = lttng_event_rule_uprobe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
status = lttng_event_rule_uprobe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
lookup = lttng_userspace_probe_location_get_lookup_method(
location);
if (!lookup) {
lookup = lttng_userspace_probe_location_get_lookup_method(
location);
if (!lookup) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
status = lttng_event_rule_uprobe_get_name(rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
status = lttng_event_rule_uprobe_get_name(rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
break;
}
case LTTNG_EVENT_RULE_TYPE_TRACEPOINT:
break;
}
case LTTNG_EVENT_RULE_TYPE_TRACEPOINT:
kernel_event_notifier->event.instrumentation =
LTTNG_KERNEL_TRACEPOINT;
kernel_event_notifier->event.instrumentation =
LTTNG_KERNEL_TRACEPOINT;
break;
}
case LTTNG_EVENT_RULE_TYPE_SYSCALL:
break;
}
case LTTNG_EVENT_RULE_TYPE_SYSCALL:
LTTNG_KERNEL_SYSCALL_ENTRY;
kernel_event_notifier->event.u.syscall.match =
LTTNG_KERNEL_SYSCALL_MATCH_NAME;
LTTNG_KERNEL_SYSCALL_ENTRY;
kernel_event_notifier->event.u.syscall.match =
LTTNG_KERNEL_SYSCALL_MATCH_NAME;
break;
}
case LTTNG_EVENT_RULE_TYPE_KRETPROBE:
break;
}
case LTTNG_EVENT_RULE_TYPE_KRETPROBE:
- ret = lttng_strncpy(kernel_event_notifier->event.name, name,
+ strncpy_ret = lttng_strncpy(kernel_event_notifier->event.name, name,
LTTNG_KERNEL_SYM_NAME_LEN);
LTTNG_KERNEL_SYM_NAME_LEN);
- if (ret) {
- ret = LTTNG_ERR_INVALID;
+ if (strncpy_ret) {
+ ret_code = LTTNG_ERR_INVALID;
}
/*
* Allocate and initialize a kernel metadata.
}
/*
* Allocate and initialize a kernel metadata.