Fix: consumer snapshot: handle unsigned long overflow
[lttng-tools.git] / src / common / kernel-consumer / kernel-consumer.c
index 9bed7b55b8114357382f983ecd4ff2ebb63aaa31..627cd2a8b5d7aad61ffc1d97794a0c2bbf756267 100644 (file)
@@ -129,8 +129,10 @@ int lttng_kconsumer_get_consumed_snapshot(struct lttng_consumer_stream *stream,
  *
  * Returns 0 on success, < 0 on error
  */
-int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
-               uint64_t key, char *path, uint64_t relayd_id, uint64_t nb_packets_per_stream,
+static int lttng_kconsumer_snapshot_channel(
+               struct lttng_consumer_channel *channel,
+               uint64_t key, char *path, uint64_t relayd_id,
+               uint64_t nb_packets_per_stream,
                struct lttng_consumer_local_data *ctx)
 {
        int ret;
@@ -142,7 +144,8 @@ int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
 
        /* Splice is not supported yet for channel snapshot. */
        if (channel->output != CONSUMER_CHANNEL_MMAP) {
-               ERR("Unsupported output %d", channel->output);
+               ERR("Unsupported output type for channel \"%s\": mmap output is required to record a snapshot",
+                               channel->name);
                ret = -1;
                goto end;
        }
@@ -234,7 +237,7 @@ int lttng_kconsumer_snapshot_channel(struct lttng_consumer_channel *channel,
                                produced_pos, nb_packets_per_stream,
                                stream->max_sb_size);
 
-               while (consumed_pos < produced_pos) {
+               while ((long) (consumed_pos - produced_pos) < 0) {
                        ssize_t read_len;
                        unsigned long len, padded_len;
 
This page took 0.024245 seconds and 4 git commands to generate.