Fix: consumer snapshot: handle unsigned long overflow
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 19 Feb 2019 22:47:49 +0000 (17:47 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 28 Mar 2019 19:52:47 +0000 (15:52 -0400)
Comparing the consumed iterator and the produced position without
using a difference generates an empty snapshot when the iterator is
before unsigned long overflow and the produced position is after
unsigned long overflow.

This applies to both UST and kernel consumers.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/kernel-consumer/kernel-consumer.c
src/common/ust-consumer/ust-consumer.c

index 4e93bee915463bccba902d646f72f2fdd1f20f87..627cd2a8b5d7aad61ffc1d97794a0c2bbf756267 100644 (file)
@@ -237,7 +237,7 @@ static int lttng_kconsumer_snapshot_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;
 
index 46f330052aa8c04fdd440b6f4dd30485634678c5..94b761cb8fc19fa532b4a485c178b4ac93aaee54 100644 (file)
@@ -1168,7 +1168,7 @@ static int 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.029087 seconds and 5 git commands to generate.