DEFAULT_UST_PID_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice,
DEFAULT_KERNEL_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice,
DEFAULT_METADATA_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice);
- fprintf(ofp, " --buffers-uid Use per UID buffer (-u/-j only)\n");
- fprintf(ofp, " --buffers-pid Use per PID buffer (-u/-j only)\n");
+ fprintf(ofp, " --buffers-uid Use per UID buffer (-u only)\n");
+ fprintf(ofp, " --buffers-pid Use per PID buffer (-u only)\n");
fprintf(ofp, " --buffers-global Use shared buffer for the whole system (-k only)\n");
fprintf(ofp, " -C, --tracefile-size SIZE\n");
fprintf(ofp, " Maximum size of each tracefile within a stream (in bytes). 0 means unlimited.\n");
fprintf(ofp, " (default: %u)\n", DEFAULT_CHANNEL_TRACEFILE_SIZE);
+ fprintf(ofp, " Note: traces generated with this option may inaccurately report\n");
+ fprintf(ofp, " discarded events as per CTF 1.8.\n");
fprintf(ofp, " -W, --tracefile-count COUNT\n");
fprintf(ofp, " Used in conjunction with -C option, this will limit the number\n");
fprintf(ofp, " of files created to the specified count. 0 means unlimited.\n");
/* Strip channel list (format: chan1,chan2,...) */
channel_name = strtok(opt_channels, ",");
while (channel_name != NULL) {
- /* Copy channel name and normalize it */
- strncpy(chan.name, channel_name, NAME_MAX);
- chan.name[NAME_MAX - 1] = '\0';
+ /* Validate channel name's length */
+ if (strlen(channel_name) >= NAME_MAX) {
+ ERR("Channel name is too long (max. %zu characters)",
+ sizeof(chan.name) - 1);
+ ret = LTTNG_ERR_INVALID_CHANNEL_NAME;
+ goto error;
+ }
+
+ /* Copy channel name */
+ strcpy(chan.name, channel_name);
DBG("Enabling channel %s", channel_name);
WARN("Channel %s: %s (session %s)", channel_name,
lttng_strerror(ret), session_name);
goto error;
+ case LTTNG_ERR_INVALID_CHANNEL_NAME:
+ ERR("Invalid channel name: \"%s\". "
+ "Channel names may not start with '.', and "
+ "may not contain '/'.", channel_name);
+ goto error;
default:
ERR("Channel %s: %s (session %s)", channel_name,
lttng_strerror(ret), session_name);
get_domain_str(dom.type), channel_name, session_name);
}
- /* Next event */
channel_name = strtok(NULL, ",");
}