[lttng-dev] [PATCH lttng-tools] Fix: Dereference after NULL check in consumer

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Tue May 17 15:46:10 UTC 2016


Dereference after NULL check in consumer discarded events/lost packets
commands.

Found by Coverity:

CID 1040158 (#1 of 2): Dereference after null check (FORWARD_NULL)24.
var_deref_op: Dereferencing null pointer channel.

CID 1040158 (#2 of 2): Dereference after null check (FORWARD_NULL)24.
var_deref_op: Dereferencing null pointer channel.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
---
 src/common/kernel-consumer/kernel-consumer.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
index 9e35404..3216903 100644
--- a/src/common/kernel-consumer/kernel-consumer.c
+++ b/src/common/kernel-consumer/kernel-consumer.c
@@ -969,18 +969,18 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 		uint64_t id = msg.u.discarded_events.session_id;
 		uint64_t key = msg.u.discarded_events.channel_key;
 
+		DBG("Kernel consumer discarded events command for session id %"
+				PRIu64 ", channel key %" PRIu64, id, key);
+
 		channel = consumer_find_channel(key);
 		if (!channel) {
 			ERR("Kernel consumer discarded events channel %"
 					PRIu64 " not found", key);
-			ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
+			ret = 0;
+		} else {
+			ret = channel->discarded_events;
 		}
 
-		DBG("Kernel consumer discarded events command for session id %"
-				PRIu64 ", channel key %" PRIu64, id, key);
-
-		ret = channel->discarded_events;
-
 		health_code_update();
 
 		/* Send back returned value to session daemon */
@@ -999,18 +999,18 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
 		uint64_t id = msg.u.lost_packets.session_id;
 		uint64_t key = msg.u.lost_packets.channel_key;
 
+		DBG("Kernel consumer lost packets command for session id %"
+				PRIu64 ", channel key %" PRIu64, id, key);
+
 		channel = consumer_find_channel(key);
 		if (!channel) {
 			ERR("Kernel consumer lost packets channel %"
 					PRIu64 " not found", key);
-			ret_code = LTTCOMM_CONSUMERD_CHAN_NOT_FOUND;
+			ret = 0;
+		} else {
+			ret = channel->lost_packets;
 		}
 
-		DBG("Kernel consumer lost packets command for session id %"
-				PRIu64 ", channel key %" PRIu64, id, key);
-
-		ret = channel->lost_packets;
-
 		health_code_update();
 
 		/* Send back returned value to session daemon */
-- 
2.1.4



More information about the lttng-dev mailing list