gcc 10.2 reports a large number of string truncation warning in
liblttng-ctl. Replace the uses of lttng_ctl_copy_string() util by
lttng_strncpy() (handling the null source case when applicable) and
report the truncations when they occur.
Example gcc warning:
lttng-ctl.c:86:3: warning: ‘strncpy’ output may be truncated copying 254 bytes from a string of length 254 [-Wstringop-truncation]
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Icca5f4c2490c6796b451999d7694db8597bae719
}
if (is_root || is_in_tracing_group) {
}
if (is_root || is_in_tracing_group) {
- lttng_ctl_copy_string(sock_path,
+ ret = lttng_strncpy(sock_path,
DEFAULT_GLOBAL_NOTIFICATION_CHANNEL_UNIX_SOCK,
LTTNG_PATH_MAX);
DEFAULT_GLOBAL_NOTIFICATION_CHANNEL_UNIX_SOCK,
LTTNG_PATH_MAX);
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
+
ret = lttcomm_connect_unix_sock(sock_path);
if (ret >= 0) {
fd = ret;
ret = lttcomm_connect_unix_sock(sock_path);
if (ret >= 0) {
fd = ret;
}
/* Copy string plus the NULL terminated byte. */
}
/* Copy string plus the NULL terminated byte. */
- lttng_ctl_copy_string(attr->input_url, uris[0].dst.path,
+ ret = lttng_strncpy(attr->input_url, uris[0].dst.path,
sizeof(attr->input_url));
sizeof(attr->input_url));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
/*
* Set health socket path.
*
/*
* Set health socket path.
*
- * Returns 0 on success or -ENOMEM.
+ * Returns 0 on success or a negative errno.
*/
static
int set_health_socket_path(struct lttng_health *lh,
*/
static
int set_health_socket_path(struct lttng_health *lh,
uid = getuid();
if (uid == 0 || tracing_group) {
uid = getuid();
if (uid == 0 || tracing_group) {
- lttng_ctl_copy_string(lh->health_sock_path,
+ ret = lttng_strncpy(lh->health_sock_path,
global_str,
sizeof(lh->health_sock_path));
global_str,
sizeof(lh->health_sock_path));
+ return ret == 0 ? 0 : -EINVAL;
struct lttng_health *lttng_health_create_relayd(const char *path)
{
struct lttng_health *lttng_health_create_relayd(const char *path)
{
- struct lttng_health *lh;
+ int ret;
+ struct lttng_health *lh = NULL;
}
lh = lttng_health_create(HEALTH_COMPONENT_RELAYD,
NR_HEALTH_RELAYD_TYPES);
if (!lh) {
}
lh = lttng_health_create(HEALTH_COMPONENT_RELAYD,
NR_HEALTH_RELAYD_TYPES);
if (!lh) {
- lttng_ctl_copy_string(lh->health_sock_path, path,
- sizeof(lh->health_sock_path));
+
+ ret = lttng_strncpy(lh->health_sock_path, path ?: "",
+ sizeof(lh->health_sock_path));
+ if (ret) {
+ goto error;
+ }
+
+
+error:
+ free(lh);
+ return NULL;
}
void lttng_health_destroy(struct lttng_health *lh)
}
void lttng_health_destroy(struct lttng_health *lh)
*/
/* Copy helper functions. */
*/
/* Copy helper functions. */
-void lttng_ctl_copy_string(char *dst, const char *src, size_t len);
void lttng_ctl_copy_lttng_domain(struct lttng_domain *dst,
struct lttng_domain *src);
void lttng_ctl_copy_lttng_domain(struct lttng_domain *dst,
struct lttng_domain *src);
int lttng_opt_verbose;
int lttng_opt_mi;
int lttng_opt_verbose;
int lttng_opt_mi;
-/*
- * Copy string from src to dst and enforce null terminated byte.
- */
-LTTNG_HIDDEN
-void lttng_ctl_copy_string(char *dst, const char *src, size_t len)
-{
- if (src && dst) {
- strncpy(dst, src, len);
- /* Enforce the NULL terminated byte */
- dst[len - 1] = '\0';
- } else if (dst) {
- dst[0] = '\0';
- }
-}
-
/*
* Copy domain to lttcomm_session_msg domain.
*
/*
* Copy domain to lttcomm_session_msg domain.
*
}
if ((uid == 0) || in_tgroup) {
}
if ((uid == 0) || in_tgroup) {
- lttng_ctl_copy_string(sessiond_sock_path,
- DEFAULT_GLOBAL_CLIENT_UNIX_SOCK, sizeof(sessiond_sock_path));
+ const int ret = lttng_strncpy(sessiond_sock_path,
+ DEFAULT_GLOBAL_CLIENT_UNIX_SOCK,
+ sizeof(sessiond_sock_path));
+
+ if (ret) {
+ goto error;
+ }
struct lttng_handle *lttng_create_handle(const char *session_name,
struct lttng_domain *domain)
{
struct lttng_handle *lttng_create_handle(const char *session_name,
struct lttng_domain *domain)
{
struct lttng_handle *handle = NULL;
handle = zmalloc(sizeof(struct lttng_handle));
struct lttng_handle *handle = NULL;
handle = zmalloc(sizeof(struct lttng_handle));
}
/* Copy session name */
}
/* Copy session name */
- lttng_ctl_copy_string(handle->session_name, session_name,
- sizeof(handle->session_name));
+ ret = lttng_strncpy(handle->session_name, session_name ? : "",
+ sizeof(handle->session_name));
+ if (ret) {
+ goto error;
+ }
/* Copy lttng domain or leave initialized to 0. */
if (domain) {
/* Copy lttng domain or leave initialized to 0. */
if (domain) {
+error:
+ free(handle);
+ return NULL;
int lttng_register_consumer(struct lttng_handle *handle,
const char *socket_path)
{
int lttng_register_consumer(struct lttng_handle *handle,
const char *socket_path)
{
struct lttcomm_session_msg lsm;
if (handle == NULL || socket_path == NULL) {
struct lttcomm_session_msg lsm;
if (handle == NULL || socket_path == NULL) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGISTER_CONSUMER;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGISTER_CONSUMER;
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
- lttng_ctl_copy_string(lsm.u.reg.path, socket_path,
- sizeof(lsm.u.reg.path));
+ ret = lttng_strncpy(lsm.u.reg.path, socket_path,
+ sizeof(lsm.u.reg.path));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
*/
int lttng_start_tracing(const char *session_name)
{
*/
int lttng_start_tracing(const char *session_name)
{
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_START_TRACE;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_START_TRACE;
- lttng_ctl_copy_string(lsm.session.name, session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_STOP_TRACE;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_STOP_TRACE;
- lttng_ctl_copy_string(lsm.session.name, session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0 && ret != -LTTNG_ERR_TRACE_ALREADY_STOPPED) {
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0 && ret != -LTTNG_ERR_TRACE_ALREADY_STOPPED) {
lsm.cmd_type = LTTNG_ADD_CONTEXT;
/* If no channel name, send empty string. */
lsm.cmd_type = LTTNG_ADD_CONTEXT;
/* If no channel name, send empty string. */
- if (channel_name == NULL) {
- lttng_ctl_copy_string(lsm.u.context.channel_name, "",
- sizeof(lsm.u.context.channel_name));
- } else {
- lttng_ctl_copy_string(lsm.u.context.channel_name, channel_name,
- sizeof(lsm.u.context.channel_name));
+ ret = lttng_strncpy(lsm.u.context.channel_name, channel_name ?: "",
+ sizeof(lsm.u.context.channel_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
}
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
if (ctx->ctx == LTTNG_EVENT_CONTEXT_APP_CONTEXT) {
size_t provider_len, ctx_len;
if (ctx->ctx == LTTNG_EVENT_CONTEXT_APP_CONTEXT) {
size_t provider_len, ctx_len;
memset(&lsm, 0, sizeof(lsm));
/* If no channel name, send empty string. */
memset(&lsm, 0, sizeof(lsm));
/* If no channel name, send empty string. */
- if (channel_name == NULL) {
- lttng_ctl_copy_string(lsm.u.enable.channel_name, "",
- sizeof(lsm.u.enable.channel_name));
- } else {
- lttng_ctl_copy_string(lsm.u.enable.channel_name, channel_name,
- sizeof(lsm.u.enable.channel_name));
+ ret = lttng_strncpy(lsm.u.enable.channel_name, channel_name ?: "",
+ sizeof(lsm.u.enable.channel_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
lsm.cmd_type = LTTNG_ENABLE_EVENT;
if (ev->name[0] == '\0') {
}
lsm.cmd_type = LTTNG_ENABLE_EVENT;
if (ev->name[0] == '\0') {
- /* Enable all events */
- lttng_ctl_copy_string(ev->name, "*", sizeof(ev->name));
+ /* Enable all events. */
+ ret = lttng_strncpy(ev->name, "*", sizeof(ev->name));
+ assert(ret == 0);
}
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
}
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
+
lsm.u.enable.exclusion_count = exclusion_count;
lsm.u.enable.bytecode_len = 0;
lsm.u.enable.exclusion_count = exclusion_count;
lsm.u.enable.bytecode_len = 0;
memset(&lsm, 0, sizeof(lsm));
/* If no channel name, send empty string. */
memset(&lsm, 0, sizeof(lsm));
/* If no channel name, send empty string. */
- if (channel_name == NULL) {
- lttng_ctl_copy_string(lsm.u.disable.channel_name, "",
- sizeof(lsm.u.disable.channel_name));
- } else {
- lttng_ctl_copy_string(lsm.u.disable.channel_name, channel_name,
- sizeof(lsm.u.disable.channel_name));
+ ret = lttng_strncpy(lsm.u.disable.channel_name, channel_name ?: "",
+ sizeof(lsm.u.disable.channel_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
lsm.cmd_type = LTTNG_DISABLE_EVENT;
}
lsm.cmd_type = LTTNG_DISABLE_EVENT;
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
memcpy(&lsm.u.disable.event, ev, sizeof(lsm.u.disable.event));
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
memcpy(&lsm.u.disable.event, ev, sizeof(lsm.u.disable.event));
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
+
lsm.u.disable.bytecode_len = 0;
/*
lsm.u.disable.bytecode_len = 0;
/*
int lttng_disable_event(struct lttng_handle *handle, const char *name,
const char *channel_name)
{
int lttng_disable_event(struct lttng_handle *handle, const char *name,
const char *channel_name)
{
struct lttng_event ev;
memset(&ev, 0, sizeof(ev));
ev.loglevel = -1;
ev.type = LTTNG_EVENT_ALL;
struct lttng_event ev;
memset(&ev, 0, sizeof(ev));
ev.loglevel = -1;
ev.type = LTTNG_EVENT_ALL;
- lttng_ctl_copy_string(ev.name, name, sizeof(ev.name));
- return lttng_disable_event_ext(handle, &ev, channel_name, NULL);
+ ret = lttng_strncpy(ev.name, name ?: "", sizeof(ev.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ ret = lttng_disable_event_ext(handle, &ev, channel_name, NULL);
+end:
+ return ret;
}
struct lttng_channel *lttng_channel_create(struct lttng_domain *domain)
}
struct lttng_channel *lttng_channel_create(struct lttng_domain *domain)
int lttng_enable_channel(struct lttng_handle *handle,
struct lttng_channel *in_chan)
{
int lttng_enable_channel(struct lttng_handle *handle,
struct lttng_channel *in_chan)
{
struct lttcomm_session_msg lsm;
size_t total_buffer_size_needed_per_cpu = 0;
struct lttcomm_session_msg lsm;
size_t total_buffer_size_needed_per_cpu = 0;
lsm.cmd_type = LTTNG_ENABLE_CHANNEL;
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
lsm.cmd_type = LTTNG_ENABLE_CHANNEL;
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
*/
int lttng_disable_channel(struct lttng_handle *handle, const char *name)
{
*/
int lttng_disable_channel(struct lttng_handle *handle, const char *name)
{
struct lttcomm_session_msg lsm;
/* Safety check. Both are mandatory. */
struct lttcomm_session_msg lsm;
/* Safety check. Both are mandatory. */
lsm.cmd_type = LTTNG_DISABLE_CHANNEL;
lsm.cmd_type = LTTNG_DISABLE_CHANNEL;
- lttng_ctl_copy_string(lsm.u.disable.channel_name, name,
+ ret = lttng_strncpy(lsm.u.disable.channel_name, name,
sizeof(lsm.u.disable.channel_name));
sizeof(lsm.u.disable.channel_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
int lttng_set_session_shm_path(const char *session_name,
const char *shm_path)
{
int lttng_set_session_shm_path(const char *session_name,
const char *shm_path)
{
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SET_SESSION_SHM_PATH;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SET_SESSION_SHM_PATH;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
- lttng_ctl_copy_string(lsm.u.set_shm_path.shm_path, shm_path,
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ ret = lttng_strncpy(lsm.u.set_shm_path.shm_path, shm_path ?: "",
sizeof(lsm.u.set_shm_path.shm_path));
sizeof(lsm.u.set_shm_path.shm_path));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
struct lttcomm_session_msg lsm;
if (session_name == NULL) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_DOMAINS;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_DOMAINS;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, (void**) domains);
if (ret < 0) {
ret = lttng_ctl_ask_sessiond(&lsm, (void**) domains);
if (ret < 0) {
}
return ret / sizeof(struct lttng_domain);
}
return ret / sizeof(struct lttng_domain);
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_CHANNELS;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_CHANNELS;
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_EVENTS;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_EVENTS;
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
- lttng_ctl_copy_string(lsm.u.list.channel_name, channel_name,
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ ret = lttng_strncpy(lsm.u.list.channel_name, channel_name,
sizeof(lsm.u.list.channel_name));
sizeof(lsm.u.list.channel_name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
ret = lttng_ctl_ask_sessiond_fds_varlen(&lsm, NULL, 0, NULL, 0,
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
ret = lttng_ctl_ask_sessiond_fds_varlen(&lsm, NULL, 0, NULL, 0,
struct lttng_uri *uris = NULL;
if (handle == NULL || (control_url == NULL && data_url == NULL)) {
struct lttng_uri *uris = NULL;
if (handle == NULL || (control_url == NULL && data_url == NULL)) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SET_CONSUMER_URI;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SET_CONSUMER_URI;
- lttng_ctl_copy_string(lsm.session.name, handle->session_name,
+ ret = lttng_strncpy(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
+
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
size = uri_parse_str_urls(control_url, data_url, &uris);
if (size < 0) {
COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
size = uri_parse_str_urls(control_url, data_url, &uris);
if (size < 0) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
sizeof(struct lttng_uri) * size, NULL);
free(uris);
sizeof(struct lttng_uri) * size, NULL);
free(uris);
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_DATA_PENDING;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_DATA_PENDING;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &pending);
if (ret < 0) {
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &pending);
if (ret < 0) {
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGENERATE_METADATA;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGENERATE_METADATA;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0) {
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0) {
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGENERATE_STATEDUMP;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_REGENERATE_STATEDUMP;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0) {
ret = lttng_ctl_ask_sessiond(&lsm, NULL);
if (ret < 0) {
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_ROTATE_SESSION;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_ROTATE_SESSION;
- lttng_ctl_copy_string(lsm.session.name, session_name,
- sizeof(lsm.session.name));
+
+ ret = lttng_strncpy(lsm.session.name, session_name,
+ sizeof(lsm.session.name));
+ /* Source length already validated. */
+ assert(ret == 0);
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &rotate_return);
if (ret <= 0) {
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &rotate_return);
if (ret <= 0) {
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_ROTATION_SET_SCHEDULE;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_ROTATION_SET_SCHEDULE;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ /* Source length already validated. */
+ assert(ret == 0);
lsm.u.rotation_set_schedule.type = (uint32_t) schedule->type;
switch (schedule->type) {
lsm.u.rotation_set_schedule.type = (uint32_t) schedule->type;
switch (schedule->type) {
struct lttng_rotation_schedules *schedules = NULL;
struct lttng_rotation_schedule *periodic = NULL, *size = NULL;
struct lttng_rotation_schedules *schedules = NULL;
struct lttng_rotation_schedule *periodic = NULL, *size = NULL;
+ if (!session_name) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SESSION_LIST_ROTATION_SCHEDULES;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SESSION_LIST_ROTATION_SCHEDULES;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &schedules_comm);
if (ret < 0) {
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &schedules_comm);
if (ret < 0) {
}
/* Copy string plus the NULL terminated byte. */
}
/* Copy string plus the NULL terminated byte. */
- lttng_ctl_copy_string(attr->configuration_url, uris[0].dst.path,
- sizeof(attr->configuration_url));
+ ret = lttng_strncpy(attr->configuration_url, uris[0].dst.path,
+ sizeof(attr->configuration_url));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
struct lttcomm_lttng_output_id *reply;
if (!session_name || !output) {
struct lttcomm_lttng_output_id *reply;
if (!session_name || !output) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_ADD_OUTPUT;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_ADD_OUTPUT;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
memcpy(&lsm.u.snapshot_output.output, output,
sizeof(lsm.u.snapshot_output.output));
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &reply);
if (ret < 0) {
memcpy(&lsm.u.snapshot_output.output, output,
sizeof(lsm.u.snapshot_output.output));
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &reply);
if (ret < 0) {
}
output->id = reply->id;
free(reply);
}
output->id = reply->id;
free(reply);
+ ret = 0;
+end:
+ return ret;
int lttng_snapshot_del_output(const char *session_name,
struct lttng_snapshot_output *output)
{
int lttng_snapshot_del_output(const char *session_name,
struct lttng_snapshot_output *output)
{
struct lttcomm_session_msg lsm;
if (!session_name || !output) {
struct lttcomm_session_msg lsm;
if (!session_name || !output) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_DEL_OUTPUT;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_DEL_OUTPUT;
- lttng_ctl_copy_string(lsm.session.name, session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
memcpy(&lsm.u.snapshot_output.output, output,
sizeof(lsm.u.snapshot_output.output));
memcpy(&lsm.u.snapshot_output.output, output,
sizeof(lsm.u.snapshot_output.output));
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_LIST_OUTPUT;
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_LIST_OUTPUT;
- lttng_ctl_copy_string(lsm.session.name, session_name,
- sizeof(lsm.session.name));
+ ret = lttng_strncpy(lsm.session.name, session_name,
+ sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
+ }
new_list = zmalloc(sizeof(*new_list));
if (!new_list) {
new_list = zmalloc(sizeof(*new_list));
if (!new_list) {
int lttng_snapshot_record(const char *session_name,
struct lttng_snapshot_output *output, int wait)
{
int lttng_snapshot_record(const char *session_name,
struct lttng_snapshot_output *output, int wait)
{
struct lttcomm_session_msg lsm;
if (!session_name) {
struct lttcomm_session_msg lsm;
if (!session_name) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_RECORD;
}
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_SNAPSHOT_RECORD;
- lttng_ctl_copy_string(lsm.session.name, session_name,
+ ret = lttng_strncpy(lsm.session.name, session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
/*
* Not having an output object will use the default one of the session that
/*
* Not having an output object will use the default one of the session that
}
/* The wait param is ignored. */
}
/* The wait param is ignored. */
-
- return lttng_ctl_ask_sessiond(&lsm, NULL);
+ ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+end:
+ return ret;
int lttng_snapshot_output_set_name(const char *name,
struct lttng_snapshot_output *output)
{
int lttng_snapshot_output_set_name(const char *name,
struct lttng_snapshot_output *output)
{
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
- lttng_ctl_copy_string(output->name, name, sizeof(output->name));
- return 0;
+ ret = lttng_strncpy(output->name, name, sizeof(output->name));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+end:
+ return ret;
}
int lttng_snapshot_output_set_ctrl_url(const char *url,
struct lttng_snapshot_output *output)
{
}
int lttng_snapshot_output_set_ctrl_url(const char *url,
struct lttng_snapshot_output *output)
{
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
- lttng_ctl_copy_string(output->ctrl_url, url, sizeof(output->ctrl_url));
- return 0;
+ ret = lttng_strncpy(output->ctrl_url, url, sizeof(output->ctrl_url));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+end:
+ return ret;
}
int lttng_snapshot_output_set_data_url(const char *url,
struct lttng_snapshot_output *output)
{
}
int lttng_snapshot_output_set_data_url(const char *url,
struct lttng_snapshot_output *output)
{
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
- lttng_ctl_copy_string(output->data_url, url, sizeof(output->data_url));
- return 0;
+ ret = lttng_strncpy(output->data_url, url, sizeof(output->data_url));
+ if (ret) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+end:
+ return ret;
enum lttng_tracking_policy *policy)
{
void *reply = NULL;
enum lttng_tracking_policy *policy)
{
void *reply = NULL;
+ int reply_ret, copy_ret;
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
- lttng_ctl_copy_string(lsm.session.name, tracker->session_name,
+ copy_ret = lttng_strncpy(lsm.session.name, tracker->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (copy_ret) {
+ status = LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_INVALID;
+ goto end;
+ }
+
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_get_tracking_policy.process_attr =
(int32_t) tracker->process_attr;
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_get_tracking_policy.process_attr =
(int32_t) tracker->process_attr;
const struct lttng_process_attr_tracker_handle *tracker,
enum lttng_tracking_policy policy)
{
const struct lttng_process_attr_tracker_handle *tracker,
enum lttng_tracking_policy policy)
{
+ int reply_ret, copy_ret;
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
- lttng_ctl_copy_string(lsm.session.name, tracker->session_name,
- sizeof(lsm.session.name));
+ copy_ret = lttng_strncpy(lsm.session.name, tracker->session_name,
+ sizeof(lsm.session.name));
+ if (copy_ret) {
+ status = LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_INVALID;
+ goto end;
+ }
+
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_set_tracking_policy.process_attr =
(int32_t) tracker->process_attr;
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_set_tracking_policy.process_attr =
(int32_t) tracker->process_attr;
- lttng_ctl_copy_string(lsm.session.name, tracker->session_name, \
+ ret = lttng_strncpy(lsm.session.name, tracker->session_name, \
sizeof(lsm.session.name)); \
sizeof(lsm.session.name)); \
+ if (ret) { \
+ status = LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_INVALID; \
+ goto end; \
+ } \
+ \
lsm.domain.type = tracker->domain; \
lsm.u.process_attr_tracker_add_remove_include_value \
.process_attr = \
lsm.domain.type = tracker->domain; \
lsm.u.process_attr_tracker_add_remove_include_value \
.process_attr = \
- lttng_ctl_copy_string(lsm.session.name, tracker->session_name, \
+ ret = lttng_strncpy(lsm.session.name, tracker->session_name, \
sizeof(lsm.session.name)); \
sizeof(lsm.session.name)); \
+ if (ret) { \
+ status = LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_INVALID; \
+ goto end; \
+ } \
+ \
lsm.domain.type = tracker->domain; \
lsm.u.process_attr_tracker_add_remove_include_value \
.process_attr = \
lsm.domain.type = tracker->domain; \
lsm.u.process_attr_tracker_add_remove_include_value \
.process_attr = \
const struct lttng_process_attr_values **values)
{
void *reply = NULL;
const struct lttng_process_attr_values **values)
{
void *reply = NULL;
+ int reply_ret, copy_ret;
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
enum lttng_process_attr_tracker_handle_status status =
LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_OK;
struct lttcomm_session_msg lsm = {
lttng_process_attr_values_destroy(tracker->inclusion_set);
tracker->inclusion_set = NULL;
lttng_process_attr_values_destroy(tracker->inclusion_set);
tracker->inclusion_set = NULL;
- lttng_ctl_copy_string(lsm.session.name, tracker->session_name,
+ copy_ret = lttng_strncpy(lsm.session.name, tracker->session_name,
sizeof(lsm.session.name));
sizeof(lsm.session.name));
+ if (copy_ret) {
+ status = LTTNG_PROCESS_ATTR_TRACKER_HANDLE_STATUS_INVALID;
+ goto end;
+ }
+
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_get_tracking_policy.process_attr =
(int32_t) tracker->process_attr;
lsm.domain.type = tracker->domain;
lsm.u.process_attr_tracker_get_tracking_policy.process_attr =
(int32_t) tracker->process_attr;