diff mbox series

[lttng-tools,1/1] Fix: consumer snapshot: handleunsigned long overflow

Message ID 20190219224749.8979-1-mathieu.desnoyers@efficios.com
State Accepted, archived
Delegated to: Jérémie Galarneau
Headers show
Series [lttng-tools,1/1] Fix: consumer snapshot: handleunsigned long overflow | expand

Commit Message

Mathieu Desnoyers Feb. 19, 2019, 10:47 p.m. UTC
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 at efficios.com>
---
 src/common/kernel-consumer/kernel-consumer.c | 2 +-
 src/common/ust-consumer/ust-consumer.c       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Jérémie Galarneau March 29, 2019, 6:37 p.m. UTC | #1
Merged in master, stable-2.11, stable-2.10, and stable-2.9.

Thanks!
J?r?mie

On Tue, Feb 19, 2019 at 05:47:49PM -0500, Mathieu Desnoyers wrote:
> 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 at efficios.com>
> ---
>  src/common/kernel-consumer/kernel-consumer.c | 2 +-
>  src/common/ust-consumer/ust-consumer.c       | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
> index 9bed7b55..1533e9ef 100644
> --- a/src/common/kernel-consumer/kernel-consumer.c
> +++ b/src/common/kernel-consumer/kernel-consumer.c
> @@ -234,7 +234,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;
>  
> diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c
> index 46f33005..94b761cb 100644
> --- a/src/common/ust-consumer/ust-consumer.c
> +++ b/src/common/ust-consumer/ust-consumer.c
> @@ -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;
>  
> -- 
> 2.11.0
>
diff mbox series

Patch

diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
index 9bed7b55..1533e9ef 100644
--- a/src/common/kernel-consumer/kernel-consumer.c
+++ b/src/common/kernel-consumer/kernel-consumer.c
@@ -234,7 +234,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;
 
diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c
index 46f33005..94b761cb 100644
--- a/src/common/ust-consumer/ust-consumer.c
+++ b/src/common/ust-consumer/ust-consumer.c
@@ -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;