Fix: relayd: assertion fails on creation of session by peer < 2.11
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 2 Apr 2020 19:47:30 +0000 (15:47 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 3 Apr 2020 19:41:19 +0000 (15:41 -0400)
commit9642d9bf3d80d6a45ecdd107ff12c676b5ef0870
tree979fab950b27ea251c55cb4fdda8d237861ea701
parentd7a20fcf33143103aa58cf1b48f4507af2d09e70
Fix: relayd: assertion fails on creation of session by peer < 2.11

Observed issue
==============

An assertion that a chunk has no active directory handle fails when
creating an anonymous chunk. More specifically, this occurs when
associating an fd tracker to the newly created anonymous trace chunk.

This occurs when a session is created by a peer that is older than
2.11.

Cause
=====

Trace chunks that should monitor their file descriptors with a file
descriptor tracker must be associated with the tracker before any
other operation occurs on the chunk. This is to ensure that "raw" file
descriptors are not created when they were meant to be tracked.

Here, the credentials and session output directory are set before the
file descriptor tracker was provided to the anonymous chunk which is a
breach of the API contract (enforced by the assert()).

Solution
========

Associate the fd tracker immediately to the anonymous chunk before
providing it with a reference to the file descriptor
tracker. Moreover, a leak of the output_directory is prevented by not
setting it to NULL. The trace chunk will acquire a reference to the
trace chunk; it is not transferred to the trace chunk.

Note
====

The problem was introduced during the 2.12 release cycle (clear
feature); this doesn't need to be backported.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I92ca2f156f500dfe02e09f8b4783447e46710246
src/bin/lttng-relayd/session.c
This page took 0.025839 seconds and 5 git commands to generate.