From: Jérémie Galarneau Date: Wed, 23 Feb 2022 22:40:06 +0000 (-0500) Subject: Fix: lttng: truncated addresses and offsets on 32-bit builds X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=44e63aa7f02feb05cfedceed8d30ac96ffabfbb4;p=deliverable%2Flttng-tools.git Fix: lttng: truncated addresses and offsets on 32-bit builds The lttng client parses hexadecimal addresses using, at some point, strtoul(). Using this function effectively caps addresses and offsets to MAX_UINT32 resulting in failures to enable kprobes against a 64-bit kernel using a 32-bit client. Signed-off-by: Jérémie Galarneau Change-Id: If619e9e84413de5cd32d8c06f363152caaf5ac46 --- diff --git a/src/bin/lttng/commands/add_trigger.cpp b/src/bin/lttng/commands/add_trigger.cpp index b09a1bf82..85a752564 100644 --- a/src/bin/lttng/commands/add_trigger.cpp +++ b/src/bin/lttng/commands/add_trigger.cpp @@ -355,7 +355,7 @@ static int parse_kernel_probe_opts(const char *source, PERROR("Failed to copy kernel probe location symbol name."); goto error; } - offset = strtoul(s_hex, NULL, 0); + offset = strtoull(s_hex, NULL, 0); *location = lttng_kernel_probe_location_symbol_create( symbol_name, offset); @@ -401,7 +401,7 @@ static int parse_kernel_probe_opts(const char *source, goto error; } - address = strtoul(s_hex, NULL, 0); + address = strtoull(s_hex, NULL, 0); *location = lttng_kernel_probe_location_address_create(address); if (!*location) { ERR("Failed to create symbol kernel probe location."); diff --git a/src/bin/lttng/commands/enable_events.cpp b/src/bin/lttng/commands/enable_events.cpp index 451a1eade..a2db2cbc2 100644 --- a/src/bin/lttng/commands/enable_events.cpp +++ b/src/bin/lttng/commands/enable_events.cpp @@ -129,7 +129,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt) ret = CMD_ERROR; goto end; } - ev->attr.probe.offset = strtoul(s_hex, NULL, 0); + ev->attr.probe.offset = strtoull(s_hex, NULL, 0); DBG("probe offset %" PRIu64, ev->attr.probe.offset); ev->attr.probe.addr = 0; goto end; @@ -163,7 +163,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt) ret = CMD_ERROR; goto end; } - ev->attr.probe.addr = strtoul(s_hex, NULL, 0); + ev->attr.probe.addr = strtoull(s_hex, NULL, 0); DBG("probe addr %" PRIu64, ev->attr.probe.addr); ev->attr.probe.offset = 0; memset(ev->attr.probe.symbol_name, 0, LTTNG_SYMBOL_NAME_LEN);