mirror of
https://git.yoctoproject.org/poky
synced 2026-05-07 16:59:22 +00:00
lttng-tools: update to 2.10.7
Remove upstreamed patches. (From OE-Core rev: 4bd46974d5b80050a031688ecefa9e60df793163) Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
4a90501229
commit
ff31e2860a
-35
@@ -1,35 +0,0 @@
|
||||
From 7244eac44be929fabd6ed1333f96929ef8da564f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Tue, 19 Mar 2019 17:56:49 +0000
|
||||
Subject: [PATCH] fix: tests: link libpause_consumer on liblttng-ctl
|
||||
|
||||
This preload test library uses symbols from liblttng-ctl which are
|
||||
resolved when preloaded by GLIBC but not by MUSL.
|
||||
|
||||
Upstream-Status: Accepted [f667fbd7f8b9512f9943edb2597c226fcc424ee9]
|
||||
Backported to 2.11 and 2.10.
|
||||
|
||||
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
|
||||
---
|
||||
tests/regression/tools/notification/Makefile.am | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tests/regression/tools/notification/Makefile.am b/tests/regression/tools/notification/Makefile.am
|
||||
index 41adc69..a352bb8 100644
|
||||
--- a/tests/regression/tools/notification/Makefile.am
|
||||
+++ b/tests/regression/tools/notification/Makefile.am
|
||||
@@ -20,7 +20,10 @@ FORCE_SHARED_LIB_OPTIONS = -module -shared -avoid-version \
|
||||
-rpath $(abs_builddir)
|
||||
|
||||
libpause_consumer_la_SOURCES = consumer_testpoints.c
|
||||
-libpause_consumer_la_LIBADD = $(top_builddir)/src/common/libcommon.la $(DL_LIBS)
|
||||
+libpause_consumer_la_LIBADD = \
|
||||
+ $(top_builddir)/src/common/libcommon.la \
|
||||
+ $(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la \
|
||||
+ $(DL_LIBS)
|
||||
libpause_consumer_la_LDFLAGS = $(FORCE_SHARED_LIB_OPTIONS)
|
||||
noinst_LTLIBRARIES = libpause_consumer.la
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
From e7db27668a9d7fd279d45bc43f3a2d5847374e7b Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Tue, 12 Mar 2019 12:04:58 -0400
|
||||
Subject: [PATCH lttng-tools 1/2] Fix: test: skip test_getcpu_override on
|
||||
single thread system
|
||||
|
||||
There is no value in performing this test on single thread system
|
||||
since the only valid value for the cpu field is 0.
|
||||
|
||||
This test currently fails on single thread system (i.e yocto runquemu)
|
||||
on the test_getcpu_override_fail test case.
|
||||
|
||||
Upstream-Status: Accepted [f87d0ca370c17b597762f5ee218f0e821ed2452d]
|
||||
Backported to 2.11 and 2.10
|
||||
|
||||
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
---
|
||||
.../ust/getcpu-override/test_getcpu_override | 16 +++++++++++-----
|
||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tests/regression/ust/getcpu-override/test_getcpu_override b/tests/regression/ust/getcpu-override/test_getcpu_override
|
||||
index 4ca385aeb..ee3e31953 100755
|
||||
--- a/tests/regression/ust/getcpu-override/test_getcpu_override
|
||||
+++ b/tests/regression/ust/getcpu-override/test_getcpu_override
|
||||
@@ -157,13 +157,19 @@ plan_tests $NUM_TESTS
|
||||
|
||||
print_test_banner "$TEST_DESC"
|
||||
|
||||
-if [ -x "$CURDIR/.libs/lttng-ust-getcpu-override-test.so" ]; then
|
||||
- foundobj=1
|
||||
-else
|
||||
- foundobj=0
|
||||
+if [ ! -x "$CURDIR/.libs/lttng-ust-getcpu-override-test.so" ]; then
|
||||
+ skip 0 "No shared object generated. Skipping all tests." $NUM_TESTS && exit 0
|
||||
+fi
|
||||
+
|
||||
+if [ "$num_cpus" -eq "1" ]; then
|
||||
+ # Skip the test since we cannot perform it as designed since N mod 1
|
||||
+ # is always equals to zero. There is no point testing this on a system
|
||||
+ # with a single thread. LTTng-UST limits the get_cpu function to return
|
||||
+ # value inside the [0, NUM_CPU - 1] range for a valid event (present in
|
||||
+ # trace).
|
||||
+ skip 0 "Test system only have a single thread. Skipping all tests." $NUM_TESTS && exit 0
|
||||
fi
|
||||
|
||||
-skip $foundobj "No shared object generated. Skipping all tests." $NUM_TESTS && exit 0
|
||||
|
||||
TESTS=(
|
||||
test_getcpu_override_fail
|
||||
--
|
||||
2.17.1
|
||||
|
||||
-80
@@ -1,80 +0,0 @@
|
||||
From 83d165442d1c3658b6bafa28ddade8ffee7092ad Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Wed, 6 Mar 2019 16:46:49 -0500
|
||||
Subject: [PATCH lttng-tools 2/2] Fix: test: unit: the tree origin can be a
|
||||
symlink itself
|
||||
|
||||
Problem:
|
||||
|
||||
The base tree is defined as "/tmp/.....XXXXXX".
|
||||
On systems where "/tmp/" is itself a symlink utils_expand_path will
|
||||
expand the tree origin itself.
|
||||
|
||||
For example on a base core-image-minimal Yocto build /tmp is a symlink
|
||||
to "/var/tmp", which is a symlink to "/var/volatile".
|
||||
|
||||
utils_expand_path will return something like this for the symlink test:
|
||||
"/var/volative/.....XXXXXX/...." which is the valid result.
|
||||
|
||||
Solution:
|
||||
|
||||
Simply use realpath on the tree_origin and use this path to perform the
|
||||
test validation.
|
||||
|
||||
This work was performed in the effort to support yocto fully and be able
|
||||
to run the test suite to detect problem as early as possible.
|
||||
|
||||
|
||||
Upstream-Status: Accepted [f66e964a2e0c75f5e1a55fbcc963b1c5e2b4519d]
|
||||
Backported to 2.11 and 2.10
|
||||
|
||||
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
---
|
||||
tests/unit/test_utils_expand_path.c | 18 ++++++++++++++----
|
||||
1 file changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tests/unit/test_utils_expand_path.c b/tests/unit/test_utils_expand_path.c
|
||||
index d5cab002e..d047c207d 100644
|
||||
--- a/tests/unit/test_utils_expand_path.c
|
||||
+++ b/tests/unit/test_utils_expand_path.c
|
||||
@@ -281,8 +281,8 @@ error:
|
||||
static void test_utils_expand_path(void)
|
||||
{
|
||||
char *result;
|
||||
- char name[100], tmppath[PATH_MAX];
|
||||
- int i;
|
||||
+ char name[100], tmppath[PATH_MAX], real_tree_origin[PATH_MAX];
|
||||
+ int i, treelen;
|
||||
|
||||
/* Test valid cases */
|
||||
for (i = 0; i < num_valid_tests; i++) {
|
||||
@@ -295,14 +295,24 @@ static void test_utils_expand_path(void)
|
||||
free(result);
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * Get the realpath for the tree_origin since it can itself be a
|
||||
+ * symlink.
|
||||
+ */
|
||||
+ result = realpath(tree_origin, real_tree_origin);
|
||||
+ if (!result) {
|
||||
+ fail("realpath failed.");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* Test symlink tree cases */
|
||||
- int treelen = strlen(tree_origin) + 1;
|
||||
+ treelen = strlen(real_tree_origin) + 1;
|
||||
for (i = 0; i < num_symlink_tests; i++) {
|
||||
sprintf(name, "symlink tree test case: [tmppath/]%s",
|
||||
symlink_tests_inputs[i].input);
|
||||
|
||||
snprintf(tmppath, PATH_MAX, "%s/%s",
|
||||
- tree_origin, symlink_tests_inputs[i].input);
|
||||
+ real_tree_origin, symlink_tests_inputs[i].input);
|
||||
result = utils_expand_path(tmppath);
|
||||
ok(result != NULL && strcmp(result + treelen,
|
||||
symlink_tests_inputs[i].expected_result) == 0, name);
|
||||
--
|
||||
2.17.1
|
||||
|
||||
-176
@@ -1,176 +0,0 @@
|
||||
From 9bc81a446d0a3ea9a884739eee48d3f14db3283c Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Wed, 28 Mar 2018 15:21:26 -0400
|
||||
Subject: [PATCH lttng-tools] Tests: use modprobe to test for the presence of
|
||||
lttng-modules
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Upstream-Status: Backport [28702730192ae1ded06105c54c5dc]
|
||||
|
||||
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
|
||||
---
|
||||
tests/regression/tools/regen-metadata/test_kernel | 8 ++------
|
||||
tests/regression/tools/regen-statedump/test_kernel | 7 +------
|
||||
tests/regression/tools/snapshots/test_kernel | 9 +++------
|
||||
tests/regression/tools/snapshots/test_kernel_streaming | 8 ++------
|
||||
tests/regression/tools/streaming/test_kernel | 8 ++------
|
||||
tests/utils/utils.sh | 10 ++++++++++
|
||||
6 files changed, 20 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/tests/regression/tools/regen-metadata/test_kernel b/tests/regression/tools/regen-metadata/test_kernel
|
||||
index fd139aeef..1849b9cd0 100755
|
||||
--- a/tests/regression/tools/regen-metadata/test_kernel
|
||||
+++ b/tests/regression/tools/regen-metadata/test_kernel
|
||||
@@ -28,12 +28,6 @@ NUM_TESTS=18
|
||||
|
||||
source $TESTDIR/utils/utils.sh
|
||||
|
||||
-# LTTng kernel modules check
|
||||
-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
|
||||
-if [ -z "$out" ]; then
|
||||
- BAIL_OUT "LTTng modules not detected."
|
||||
-fi
|
||||
-
|
||||
function lttng_create_session_uri
|
||||
{
|
||||
# Create session with default path
|
||||
@@ -91,6 +85,8 @@ fi
|
||||
|
||||
skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
|
||||
{
|
||||
+ validate_lttng_modules_present
|
||||
+
|
||||
start_lttng_relayd "-o $TRACE_PATH"
|
||||
start_lttng_sessiond
|
||||
modprobe lttng-test
|
||||
diff --git a/tests/regression/tools/regen-statedump/test_kernel b/tests/regression/tools/regen-statedump/test_kernel
|
||||
index 85afe76a1..50054eb07 100755
|
||||
--- a/tests/regression/tools/regen-statedump/test_kernel
|
||||
+++ b/tests/regression/tools/regen-statedump/test_kernel
|
||||
@@ -29,12 +29,6 @@ NUM_TESTS=11
|
||||
|
||||
source $TESTDIR/utils/utils.sh
|
||||
|
||||
-# LTTng kernel modules check
|
||||
-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
|
||||
-if [ -z "$out" ]; then
|
||||
- BAIL_OUT "LTTng modules not detected."
|
||||
-fi
|
||||
-
|
||||
function test_kernel_local ()
|
||||
{
|
||||
diag "Test kernel local with statedump regeneration"
|
||||
@@ -64,6 +58,7 @@ fi
|
||||
|
||||
skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
|
||||
{
|
||||
+ validate_lttng_modules_present
|
||||
start_lttng_sessiond
|
||||
modprobe lttng-test
|
||||
|
||||
diff --git a/tests/regression/tools/snapshots/test_kernel b/tests/regression/tools/snapshots/test_kernel
|
||||
index 886c4557a..ff563100b 100755
|
||||
--- a/tests/regression/tools/snapshots/test_kernel
|
||||
+++ b/tests/regression/tools/snapshots/test_kernel
|
||||
@@ -29,12 +29,6 @@ NUM_TESTS=2060
|
||||
|
||||
source $TESTDIR/utils/utils.sh
|
||||
|
||||
-# LTTng kernel modules check
|
||||
-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
|
||||
-if [ -z "$out" ]; then
|
||||
- BAIL_OUT "LTTng modules not detected."
|
||||
-fi
|
||||
-
|
||||
function test_kernel_local_snapshot ()
|
||||
{
|
||||
diag "Test local kernel snapshots"
|
||||
@@ -241,6 +235,9 @@ fi
|
||||
|
||||
skip $isroot "Root access is needed. Skipping all kernel snapshot tests." $NUM_TESTS ||
|
||||
{
|
||||
+
|
||||
+ validate_lttng_modules_present
|
||||
+
|
||||
start_lttng_sessiond
|
||||
|
||||
#tests=( test_kernel_1000_local_snapshots )
|
||||
diff --git a/tests/regression/tools/snapshots/test_kernel_streaming b/tests/regression/tools/snapshots/test_kernel_streaming
|
||||
index 7b96ef270..1d97519aa 100755
|
||||
--- a/tests/regression/tools/snapshots/test_kernel_streaming
|
||||
+++ b/tests/regression/tools/snapshots/test_kernel_streaming
|
||||
@@ -29,12 +29,6 @@ NUM_TESTS=61
|
||||
|
||||
source $TESTDIR/utils/utils.sh
|
||||
|
||||
-# LTTng kernel modules check
|
||||
-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
|
||||
-if [ -z "$out" ]; then
|
||||
- BAIL_OUT "LTTng modules not detected."
|
||||
-fi
|
||||
-
|
||||
function snapshot_add_output ()
|
||||
{
|
||||
local sess_name=$1
|
||||
@@ -169,6 +163,8 @@ fi
|
||||
|
||||
skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
|
||||
{
|
||||
+ validate_lttng_modules_present
|
||||
+
|
||||
start_lttng_relayd "-o $TRACE_PATH"
|
||||
start_lttng_sessiond
|
||||
|
||||
diff --git a/tests/regression/tools/streaming/test_kernel b/tests/regression/tools/streaming/test_kernel
|
||||
index d54bcedf5..6bb23d9f5 100755
|
||||
--- a/tests/regression/tools/streaming/test_kernel
|
||||
+++ b/tests/regression/tools/streaming/test_kernel
|
||||
@@ -28,12 +28,6 @@ NUM_TESTS=10
|
||||
|
||||
source $TESTDIR/utils/utils.sh
|
||||
|
||||
-# LTTng kernel modules check
|
||||
-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
|
||||
-if [ -z "$out" ]; then
|
||||
- BAIL_OUT "LTTng modules not detected."
|
||||
-fi
|
||||
-
|
||||
function lttng_create_session_uri
|
||||
{
|
||||
# Create session with default path
|
||||
@@ -80,6 +74,8 @@ fi
|
||||
|
||||
skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS ||
|
||||
{
|
||||
+ validate_lttng_modules_present
|
||||
+
|
||||
start_lttng_relayd "-o $TRACE_PATH"
|
||||
start_lttng_sessiond
|
||||
|
||||
diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh
|
||||
index af63824ce..26e59e383 100644
|
||||
--- a/tests/utils/utils.sh
|
||||
+++ b/tests/utils/utils.sh
|
||||
@@ -125,6 +125,16 @@ function conf_proc_count()
|
||||
echo
|
||||
}
|
||||
|
||||
+# Check if base lttng-modules are present.
|
||||
+# Bail out on failure
|
||||
+function validate_lttng_modules_present ()
|
||||
+{
|
||||
+ modprobe -n lttng-tracer 2>/dev/null
|
||||
+ if [ $? -ne 0 ]; then
|
||||
+ BAIL_OUT "LTTng modules not detected."
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
function enable_kernel_lttng_event
|
||||
{
|
||||
local withtap="$1"
|
||||
--
|
||||
2.17.1
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
From 92f93238f1df005aadc98e105c0dd0e04a5955a7 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Mon, 25 Mar 2019 14:24:51 -0400
|
||||
Subject: [2/2] tests: check for lttng-modules presence
|
||||
|
||||
Upstream-Status: Accepted [5da3fc8579a9f93ea4767729a107784bf2d034ae]
|
||||
Backported to 2.11 and 2.10
|
||||
|
||||
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
---
|
||||
tests/regression/tools/notification/test_notification_kernel | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/tests/regression/tools/notification/test_notification_kernel b/tests/regression/tools/notification/test_notification_kernel
|
||||
index 6d7f256ae..e7368df26 100755
|
||||
--- a/tests/regression/tools/notification/test_notification_kernel
|
||||
+++ b/tests/regression/tools/notification/test_notification_kernel
|
||||
@@ -108,6 +108,7 @@ function kernel_test
|
||||
}
|
||||
|
||||
if [ "$(id -u)" == "0" ]; then
|
||||
+ validate_lttng_modules_present
|
||||
kernel_test
|
||||
else
|
||||
# Kernel tests are skipped.
|
||||
--
|
||||
2.17.1
|
||||
|
||||
-347
@@ -1,347 +0,0 @@
|
||||
From 10e8001ad876d8cb3b5a17c7492e713bbc047975 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
Date: Thu, 28 Mar 2019 18:31:29 -0400
|
||||
Subject: [PATCH] Fix: getgrnam is not MT-Safe, use getgrnam_r
|
||||
|
||||
Running the test suite under a Yocto musl build resulted in musl
|
||||
coredump due to double freeing.
|
||||
|
||||
We get the following backtraces:
|
||||
|
||||
0 a_crash () at ./arch/x86_64/atomic_arch.h:108
|
||||
1 unmap_chunk (self=<optimized out>) at src/malloc/malloc.c:515
|
||||
2 free (p=<optimized out>) at src/malloc/malloc.c:526
|
||||
3 0x00007f46d9dc3849 in __getgrent_a (f=f@entry=0x7f46d9d1f7e0, gr=gr@entry=0x7f46d9e24460 <gr>, line=line@entry=0x7f46d9e26058 <line>, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 <mem>, nmem=nmem@entry=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgrent_a.c:45
|
||||
4 0x00007f46d9dc2e6b in __getgr_a (name=0x487242 "tracing", gid=gid@entry=0, gr=gr@entry=0x7f46d9e24460 <gr>, buf=buf@entry=0x7f46d9e26058 <line>, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 <mem>, nmem=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgr_a.c:30
|
||||
5 0x00007f46d9dc3733 in getgrnam (name=<optimized out>) at src/passwd/getgrent.c:37
|
||||
6 0x0000000000460b29 in utils_get_group_id (name=<optimized out>) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241
|
||||
7 0x000000000044ee69 in thread_manage_health (data=<optimized out>) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/main.c:4115
|
||||
8 0x00007f46d9de1541 in start (p=<optimized out>) at src/thread/pthread_create.c:195
|
||||
9 0x00007f46d9dee661 in __clone () at src/thread/x86_64/clone.s:22
|
||||
|
||||
From another run:
|
||||
|
||||
0 a_crash () at ./arch/x86_64/atomic_arch.h:108
|
||||
1 unmap_chunk (self=<optimized out>) at src/malloc/malloc.c:515
|
||||
2 free (p=<optimized out>) at src/malloc/malloc.c:526
|
||||
3 0x00007f5abc210849 in __getgrent_a (f=f@entry=0x7f5abc2733e0, gr=gr@entry=0x7f5abc271460 <gr>, line=line@entry=0x7f5abc273058 <line>, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 <mem>, nmem=nmem@entry=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgrent_a.c:45
|
||||
4 0x00007f5abc20fe6b in __getgr_a (name=0x487242 "tracing", gid=gid@entry=0, gr=gr@entry=0x7f5abc271460 <gr>, buf=buf@entry=0x7f5abc273058 <line>, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 <mem>, nmem=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgr_a.c:30
|
||||
5 0x00007f5abc210733 in getgrnam (name=<optimized out>) at src/passwd/getgrent.c:37
|
||||
6 0x0000000000460b29 in utils_get_group_id (name=<optimized out>) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241
|
||||
7 0x000000000042dee4 in notification_channel_socket_create () at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:238
|
||||
8 init_thread_state (state=0x7f5abaef5560, handle=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:375
|
||||
9 thread_notification (data=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:495
|
||||
10 0x00007f5abc22e541 in start (p=<optimized out>) at src/thread/pthread_create.c:195
|
||||
11 0x00007f5abc23b661 in __clone () at src/thread/x86_64/clone.s:22
|
||||
|
||||
The problem was easily reproducible (~6 crash on ~300 runs). A prototype fix
|
||||
using mutex around the getgrnam yielded no crash in over 1000 runs. This
|
||||
patch yielded the same results as the prototype fix.
|
||||
|
||||
Unfortunately we cannot rely on a mutex in liblttng-ctl since we cannot
|
||||
enforce the locking for the application using the lib.
|
||||
|
||||
Use getgrnam_r instead.
|
||||
|
||||
The previous implementation of utils_get_group_id returned the gid of
|
||||
the root group (0) on error/not found. lttng_check_tracing_group needs
|
||||
to know if an error/not found occured, returning the root group is not
|
||||
enough. We now return the gid via the passed parameter. The caller is
|
||||
responsible for either defaulting to the root group or propagating the
|
||||
error.
|
||||
|
||||
We also do not want to warn when used in liblttng-ctl context. We might
|
||||
want to move the warning elsewhere in the future. For now, pass a bool
|
||||
if we need to warn or not.
|
||||
|
||||
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
|
||||
|
||||
Upstream-Status: Submitted [https://patchwork.lttng.org/patch/2314703]
|
||||
---
|
||||
src/bin/lttng-consumerd/health-consumerd.c | 10 ++-
|
||||
src/bin/lttng-relayd/health-relayd.c | 20 ++++--
|
||||
src/bin/lttng-sessiond/main.c | 24 +++++--
|
||||
src/bin/lttng-sessiond/notification-thread.c | 10 ++-
|
||||
src/common/utils.c | 75 +++++++++++++++++---
|
||||
src/common/utils.h | 4 +-
|
||||
src/lib/lttng-ctl/lttng-ctl.c | 8 +--
|
||||
7 files changed, 122 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/src/bin/lttng-consumerd/health-consumerd.c b/src/bin/lttng-consumerd/health-consumerd.c
|
||||
index 1e2f31e4..6045401a 100644
|
||||
--- a/src/bin/lttng-consumerd/health-consumerd.c
|
||||
+++ b/src/bin/lttng-consumerd/health-consumerd.c
|
||||
@@ -184,8 +184,14 @@ void *thread_manage_health(void *data)
|
||||
is_root = !getuid();
|
||||
if (is_root) {
|
||||
/* lttng health client socket path permissions */
|
||||
- ret = chown(health_unix_sock_path, 0,
|
||||
- utils_get_group_id(tracing_group_name));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group. */
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(health_unix_sock_path, 0, gid);
|
||||
if (ret < 0) {
|
||||
ERR("Unable to set group on %s", health_unix_sock_path);
|
||||
PERROR("chown");
|
||||
diff --git a/src/bin/lttng-relayd/health-relayd.c b/src/bin/lttng-relayd/health-relayd.c
|
||||
index ba996621..962e88c4 100644
|
||||
--- a/src/bin/lttng-relayd/health-relayd.c
|
||||
+++ b/src/bin/lttng-relayd/health-relayd.c
|
||||
@@ -105,8 +105,14 @@ static int create_lttng_rundir_with_perm(const char *rundir)
|
||||
int is_root = !getuid();
|
||||
|
||||
if (is_root) {
|
||||
- ret = chown(rundir, 0,
|
||||
- utils_get_group_id(tracing_group_name));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group.*/
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(rundir, 0, gid);
|
||||
if (ret < 0) {
|
||||
ERR("Unable to set group on %s", rundir);
|
||||
PERROR("chown");
|
||||
@@ -256,8 +262,14 @@ void *thread_manage_health(void *data)
|
||||
is_root = !getuid();
|
||||
if (is_root) {
|
||||
/* lttng health client socket path permissions */
|
||||
- ret = chown(health_unix_sock_path, 0,
|
||||
- utils_get_group_id(tracing_group_name));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group */
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(health_unix_sock_path, 0, gid);
|
||||
if (ret < 0) {
|
||||
ERR("Unable to set group on %s", health_unix_sock_path);
|
||||
PERROR("chown");
|
||||
diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
|
||||
index fa6fa483..49307064 100644
|
||||
--- a/src/bin/lttng-sessiond/main.c
|
||||
+++ b/src/bin/lttng-sessiond/main.c
|
||||
@@ -4112,8 +4112,14 @@ static void *thread_manage_health(void *data)
|
||||
|
||||
if (is_root) {
|
||||
/* lttng health client socket path permissions */
|
||||
- ret = chown(config.health_unix_sock_path.value, 0,
|
||||
- utils_get_group_id(config.tracing_group_name.value));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group */
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(config.health_unix_sock_path.value, 0, &gid);
|
||||
if (ret < 0) {
|
||||
ERR("Unable to set group on %s", config.health_unix_sock_path.value);
|
||||
PERROR("chown");
|
||||
@@ -5238,7 +5244,10 @@ static int set_permissions(char *rundir)
|
||||
int ret;
|
||||
gid_t gid;
|
||||
|
||||
- gid = utils_get_group_id(config.tracing_group_name.value);
|
||||
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group */
|
||||
+ }
|
||||
|
||||
/* Set lttng run dir */
|
||||
ret = chown(rundir, 0, gid);
|
||||
@@ -5349,7 +5358,14 @@ static int set_consumer_sockets(struct consumer_data *consumer_data)
|
||||
goto error;
|
||||
}
|
||||
if (is_root) {
|
||||
- ret = chown(path, 0, utils_get_group_id(config.tracing_group_name.value));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group */
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(path, 0, gid);
|
||||
if (ret < 0) {
|
||||
ERR("Unable to set group on %s", path);
|
||||
PERROR("chown");
|
||||
diff --git a/src/bin/lttng-sessiond/notification-thread.c b/src/bin/lttng-sessiond/notification-thread.c
|
||||
index 92ac597f..18a264d9 100644
|
||||
--- a/src/bin/lttng-sessiond/notification-thread.c
|
||||
+++ b/src/bin/lttng-sessiond/notification-thread.c
|
||||
@@ -235,8 +235,14 @@ int notification_channel_socket_create(void)
|
||||
}
|
||||
|
||||
if (getuid() == 0) {
|
||||
- ret = chown(sock_path, 0,
|
||||
- utils_get_group_id(config.tracing_group_name.value));
|
||||
+ gid_t gid;
|
||||
+
|
||||
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
|
||||
+ if (ret) {
|
||||
+ gid = 0; /* Default to root group. */
|
||||
+ }
|
||||
+
|
||||
+ ret = chown(sock_path, 0, gid);
|
||||
if (ret) {
|
||||
ERR("Failed to set the notification channel socket's group");
|
||||
ret = -1;
|
||||
diff --git a/src/common/utils.c b/src/common/utils.c
|
||||
index c0bb031e..778bc00f 100644
|
||||
--- a/src/common/utils.c
|
||||
+++ b/src/common/utils.c
|
||||
@@ -1231,24 +1231,77 @@ size_t utils_get_current_time_str(const char *format, char *dst, size_t len)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Return the group ID matching name, else 0 if it cannot be found.
|
||||
+ * Return 0 on success and set *gid to the group_ID matching the passed name.
|
||||
+ * Else -1 if it cannot be found or an error occurred.
|
||||
*/
|
||||
LTTNG_HIDDEN
|
||||
-gid_t utils_get_group_id(const char *name)
|
||||
+int utils_get_group_id(const char *name, bool warn, gid_t *gid)
|
||||
{
|
||||
- struct group *grp;
|
||||
+ static volatile int warn_once;
|
||||
|
||||
- grp = getgrnam(name);
|
||||
- if (!grp) {
|
||||
- static volatile int warn_once;
|
||||
+ int ret;
|
||||
+ long sys_len;
|
||||
+ size_t len;
|
||||
+ struct group grp;
|
||||
+ struct group *result;
|
||||
+ char *buffer = NULL;
|
||||
|
||||
- if (!warn_once) {
|
||||
- WARN("No tracing group detected");
|
||||
- warn_once = 1;
|
||||
+ /* Get the system limit if it exists */
|
||||
+ sys_len = sysconf(_SC_GETGR_R_SIZE_MAX);
|
||||
+ if (sys_len == -1) {
|
||||
+ len = 1024;
|
||||
+ } else {
|
||||
+ len = (size_t) sys_len;
|
||||
+ }
|
||||
+
|
||||
+ buffer = malloc(len);
|
||||
+ if (!buffer) {
|
||||
+ PERROR("getgrnam_r malloc");
|
||||
+ ret = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ while ((ret = getgrnam_r(name, &grp, buffer, len, &result)) == ERANGE)
|
||||
+ {
|
||||
+ /* Buffer is not big enough, increase its size. */
|
||||
+ size_t new_len = 2 * len;
|
||||
+ char *new_buffer = NULL;
|
||||
+ if (new_len < len) {
|
||||
+ ERR("getgrnam_r buffer size overflow");
|
||||
+ ret = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+ len = new_len;
|
||||
+ new_buffer = realloc(buffer, len);
|
||||
+ if (!new_buffer) {
|
||||
+ PERROR("getgrnam_r realloc");
|
||||
+ ret = -1;
|
||||
+ goto error;
|
||||
}
|
||||
- return 0;
|
||||
+ buffer = new_buffer;
|
||||
+ }
|
||||
+ if (ret != 0) {
|
||||
+ PERROR("getgrnam_r");
|
||||
+ ret = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ /* Group not found. */
|
||||
+ if (!result) {
|
||||
+ ret = -1;
|
||||
+ goto error;
|
||||
+ }
|
||||
+
|
||||
+ *gid = result->gr_gid;
|
||||
+ ret = 0;
|
||||
+
|
||||
+error:
|
||||
+ free(buffer);
|
||||
+ if (ret && warn && !warn_once) {
|
||||
+ WARN("No tracing group detected");
|
||||
+ warn_once = 1;
|
||||
}
|
||||
- return grp->gr_gid;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/src/common/utils.h b/src/common/utils.h
|
||||
index 18f19ef1..9c72431d 100644
|
||||
--- a/src/common/utils.h
|
||||
+++ b/src/common/utils.h
|
||||
@@ -22,6 +22,8 @@
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <getopt.h>
|
||||
+#include <stdbool.h>
|
||||
+#include <sys/types.h>
|
||||
|
||||
#define KIBI_LOG2 10
|
||||
#define MEBI_LOG2 20
|
||||
@@ -52,7 +54,7 @@ int utils_get_count_order_u64(uint64_t x);
|
||||
char *utils_get_home_dir(void);
|
||||
char *utils_get_user_home_dir(uid_t uid);
|
||||
size_t utils_get_current_time_str(const char *format, char *dst, size_t len);
|
||||
-gid_t utils_get_group_id(const char *name);
|
||||
+int utils_get_group_id(const char *name, bool warn, gid_t *gid);
|
||||
char *utils_generate_optstring(const struct option *long_options,
|
||||
size_t opt_count);
|
||||
int utils_create_lock_file(const char *filepath);
|
||||
diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
|
||||
index 2d84aad9..561b0bcf 100644
|
||||
--- a/src/lib/lttng-ctl/lttng-ctl.c
|
||||
+++ b/src/lib/lttng-ctl/lttng-ctl.c
|
||||
@@ -208,15 +208,13 @@ end:
|
||||
LTTNG_HIDDEN
|
||||
int lttng_check_tracing_group(void)
|
||||
{
|
||||
- struct group *grp_tracing; /* no free(). See getgrnam(3) */
|
||||
- gid_t *grp_list;
|
||||
+ gid_t *grp_list, tracing_gid;
|
||||
int grp_list_size, grp_id, i;
|
||||
int ret = -1;
|
||||
const char *grp_name = tracing_group;
|
||||
|
||||
/* Get GID of group 'tracing' */
|
||||
- grp_tracing = getgrnam(grp_name);
|
||||
- if (!grp_tracing) {
|
||||
+ if (utils_get_group_id(grp_name, false, &tracing_gid)) {
|
||||
/* If grp_tracing is NULL, the group does not exist. */
|
||||
goto end;
|
||||
}
|
||||
@@ -241,7 +239,7 @@ int lttng_check_tracing_group(void)
|
||||
}
|
||||
|
||||
for (i = 0; i < grp_list_size; i++) {
|
||||
- if (grp_list[i] == grp_tracing->gr_gid) {
|
||||
+ if (grp_list[i] == tracing_gid) {
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
||||
+4
-10
@@ -32,18 +32,12 @@ SRC_URI = "https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \
|
||||
file://x32.patch \
|
||||
file://run-ptest \
|
||||
file://lttng-sessiond.service \
|
||||
file://0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch \
|
||||
file://0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch \
|
||||
file://0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch \
|
||||
file://0004-Skip-when-testapp-is-not-present.patch\
|
||||
file://0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch \
|
||||
file://0006-Tests-check-for-lttng-modules-presence.patch \
|
||||
file://0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch \
|
||||
file://0008-Fix-check-for-lttng-modules-presence-before-testing.patch \
|
||||
file://0001-Skip-when-testapp-is-not-present.patch \
|
||||
file://0002-Fix-check-for-lttng-modules-presence-before-testing.patch \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "e88c521b5da6bb48a8187af633336ecc"
|
||||
SRC_URI[sha256sum] = "f05df52bbebf8ce88d1b29e9e98cfc957d2ed738a345118018237ebdb581537c"
|
||||
SRC_URI[md5sum] = "e7804d10e4cade381e241601f6047373"
|
||||
SRC_URI[sha256sum] = "ed71ebe00c5d985c74f30e97b614e909573cbd9276c85e05d9557a0b817a1312"
|
||||
|
||||
inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
|
||||
|
||||
Reference in New Issue
Block a user