Fix: reduce scope of kconsumer consumed_pos and produced_pos
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 2 Jun 2016 09:19:50 +0000 (05:19 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 2 Jun 2016 09:29:35 +0000 (05:29 -0400)
The consumed_pos and produced_pos accesses are protected by the
stream mutex, which is fine as-is. However, consumed_pos is
passed to consumer_get_consume_start_pos() and is flagged by
Coverity as a possible use of a "stale" consumed_pos.

From an analyzer's standpoint, this makes sense since
both lttng_kconsumer_get_produced_snapshot() and
lttng_kconsumer_get_consumed_snapshot() could leave their output
parameter uninitialized and return 0 since they both  assume that
ioctl() will set errno if ret != 0.

IOCTL(3P) specifies that errno is only set if ret < 0.

A bug in lttng-modules could cause ioctl() to return a positive
value, leaving the errno variable unset. In such a case,
both functions would return 0, leaving the positions uninitialized.

A follow-up fix enforces this assumption (ret never > 0) as part
of the kernctl API.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>

No differences found
This page took 0.026814 seconds and 4 git commands to generate.