Fix: uninitialized variable in lib_ring_buffer_reserve_committed
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 22 Oct 2019 19:29:48 +0000 (15:29 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 22 Oct 2019 19:29:48 +0000 (15:29 -0400)
This internal function implemented in libringbuffer is not used within
lttng-ust actually, but uses an uninitialized variable:

As reported by clang:

        ./frontend_internal.h:263:75: warning: variable 'idx' is uninitialized when used here [-Wuninitialized]
                struct commit_counters_hot *cc_hot = shmp_index(handle, buf->commit_hot, idx);
                                                                                         ^~~
        ./shm.h:74:86: note: expanded from macro 'shmp_index'
                        ____ptr_ret = (__typeof__(____ptr_ret)) _shmp_offset((handle)->table, &(ref)._ref, index, sizeof(*____ptr_ret));        \
                                                                                                           ^~~~~
        ./frontend_internal.h:262:27: note: initialize the variable 'idx' to silence this warning
                unsigned long offset, idx, commit_count;
                                         ^
                                          = 0
        In file included from ring_buffer_backend.c:29:
        In file included from ./backend.h:33:
        ./frontend_internal.h:263:75: warning: variable 'idx' is uninitialized when used here [-Wuninitialized]
                struct commit_counters_hot *cc_hot = shmp_index(handle, buf->commit_hot, idx);
                                                                                         ^~~
        ./shm.h:74:86: note: expanded from macro 'shmp_index'
                        ____ptr_ret = (__typeof__(____ptr_ret)) _shmp_offset((handle)->table, &(ref)._ref, index, sizeof(*____ptr_ret));        \
                                                                                                           ^~~~~
        ./frontend_internal.h:262:27: note: initialize the variable 'idx' to silence this warning
                unsigned long offset, idx, commit_count;
                                         ^
                                          = 0

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
libringbuffer/frontend_internal.h

index 4ad921ec0ec8263086cddbf1c11044110dc672f6..1a9c2d4b78e82e7645e1267430b41e6f0c3218c2 100644 (file)
@@ -260,14 +260,11 @@ int lib_ring_buffer_reserve_committed(const struct lttng_ust_lib_ring_buffer_con
                                      struct lttng_ust_shm_handle *handle)
 {
        unsigned long offset, idx, commit_count;
-       struct commit_counters_hot *cc_hot = shmp_index(handle, buf->commit_hot, idx);
+       struct commit_counters_hot *cc_hot;
 
        CHAN_WARN_ON(chan, config->alloc != RING_BUFFER_ALLOC_PER_CPU);
        CHAN_WARN_ON(chan, config->sync != RING_BUFFER_SYNC_PER_CPU);
 
-       if (caa_unlikely(!cc_hot))
-               return 0;
-
        /*
         * Read offset and commit count in a loop so they are both read
         * atomically wrt interrupts. By deal with interrupt concurrency by
@@ -279,6 +276,9 @@ int lib_ring_buffer_reserve_committed(const struct lttng_ust_lib_ring_buffer_con
        do {
                offset = v_read(config, &buf->offset);
                idx = subbuf_index(offset, chan);
+               cc_hot = shmp_index(handle, buf->commit_hot, idx);
+               if (caa_unlikely(!cc_hot))
+                       return 0;
                commit_count = v_read(config, &cc_hot->cc);
        } while (offset != v_read(config, &buf->offset));
 
This page took 0.026018 seconds and 4 git commands to generate.