Fix: Dereference after NULL check in consumer
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 17 May 2016 15:46:10 +0000 (11:46 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 18 May 2016 18:42:28 +0000 (14:42 -0400)
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@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/kernel-consumer/kernel-consumer.c

index 9e3540426620f64f89cf69c8bbefa3cbe08f8962..32169034095be1b9fe8889e3c9aee0906dc1e58f 100644 (file)
@@ -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 */
This page took 0.034839 seconds and 4 git commands to generate.