On Apr 23, 2019 5:25 AM, "Burton, Ross" wrote: > 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > Fixes a race found while testing OE built with musl. This is a legit > bug. The fixes or a variant should be accepted soon. This was missing the Upstream-Status tag. Is there an upstream bug or similar we can point at in an Upstream-Status for tracking? Sorry for that. There is no "bug" but you can follow the status here [1]. [1]https://patchwork.lttng.org/patch/2314703 The status should be: Submitted. Cheers On Apr 23, 2019 5:25 AM, "Burton, Ross" wrote: > 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > Fixes a race found while testing OE built with musl. This is a legit > bug. The fixes or a variant should be accepted soon. This was missing the Upstream-Status tag. Is there an upstream bug or similar we can point at in an Upstream-Status for tracking? Ross On Thu, 4 Apr 2019 at 22:48, Jonathan Rajotte wrote: > > Multiple patches are to be applied to improve the current ptest suite. > > 0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch > 0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch > 0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch > 0006-Tests-check-for-lttng-modules-presence.patch > > All deal with problem in the test suite. Most of these are already > accepted upstream and will be removed on the next recipe update. > > 0004-Skip-when-testapp-is-not-present.patch > > Is a OE specific fix that make sure that we skip the test if > the test util application (event generator) is not present. We are > still unsure on how (upstream) we are going to solve this problem. We > already have this problem if a user build lttng without lttng-ust > (--without-lttng-ust). We will most probably end up splitting each test > into kernel and userspace tests and adjust the makefile accordingly. > Another option is to probe lttng for enabled function at runtime. > > 0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch > > Is a requirement for 0006 that should be accepted upstream shorlty. > > 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > > Fixes a race found while testing OE built with musl. This is a legit > bug. The fixes or a variant should be accepted soon. > > Signed-off-by: Jonathan Rajotte > --- > ...nk-libpause_consumer-on-liblttng-ctl.patch | 35 + > ...st_getcpu_override-on-single-thread-.patch | 52 ++ > ...e-tree-origin-can-be-a-symlink-itsel.patch | 80 +++ > ...004-Skip-when-testapp-is-not-present.patch | 610 ++++++++++++++++++ > ...be-to-test-for-the-presence-of-lttng.patch | 176 +++++ > ...sts-check-for-lttng-modules-presence.patch | 28 + > ...tgrnam-is-not-MT-Safe-use-getgrnam_r.patch | 345 ++++++++++ > .../lttng/lttng-tools_2.10.6.bb | 9 +- > 8 files changed, 1334 insertions(+), 1 deletion(-) > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch > create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch b/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch > new file mode 100644 > index 0000000000..df18dc842b > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch > @@ -0,0 +1,35 @@ > +From 7244eac44be929fabd6ed1333f96929ef8da564f Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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 > +--- > + 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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch b/meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch > new file mode 100644 > index 0000000000..5bb88d21e5 > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch > @@ -0,0 +1,52 @@ > +From e7db27668a9d7fd279d45bc43f3a2d5847374e7b Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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 > +--- > + .../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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch b/meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch > new file mode 100644 > index 0000000000..822b26a367 > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch > @@ -0,0 +1,80 @@ > +From 83d165442d1c3658b6bafa28ddade8ffee7092ad Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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 > +--- > + 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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch b/meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch > new file mode 100644 > index 0000000000..6c9f7e462c > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch > @@ -0,0 +1,610 @@ > +From 95c27e6acceaeda55c729b9e92e594322adef13f Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +Date: Wed, 3 Apr 2019 16:31:18 -0400 > +Subject: [PATCH lttng-tools] Skip when testapp is not present > + > +We expect lttng-ust do be present, this is a wrong assumptions. > + > +This is a quick fix. The real fix is to either detect at runtime > +lttng-ust support or at build time (HAVE_LIBLTTNG_UST_CTL). > + > +This prevent hang for make check done on a build configured with > +--without-lttng-ust. > + > +Upstream-Status: Inappropriate [other] > +Reason: This patch is inappropriate for upstream for 2.10 stable release > +since we do not backport "superficial" fix to the test suite. We do > +backport when a test is broken. The fact that on --without-lttng-ust > +hang is not a "broken" test per-see. Still, a variation of this fix will > +be upstreamed in our master branch and possibly 2.11. The upstreamed > +version will split the test in kernel/ust test and skip them at the > +build system level. This patch is more succinct. > + > +Signed-off-by: Jonathan Rajotte > +--- > + tests/regression/tools/crash/test_crash | 4 ++ > + .../regression/tools/exclusion/test_exclusion | 4 ++ > + .../tools/filtering/test_valid_filter | 21 ++++-- > + tests/regression/tools/health/test_thread_ok | 29 +++++--- > + tests/regression/tools/live/Makefile.am | 2 - > + tests/regression/tools/live/test_lttng_ust | 4 ++ > + tests/regression/tools/live/test_ust | 4 ++ > + .../tools/live/test_ust_tracefile_count | 4 ++ > + tests/regression/tools/mi/test_mi | 4 ++ > + .../notification/test_notification_multi_app | 18 +++-- > + .../tools/notification/test_notification_ust | 4 ++ > + .../regression/tools/regen-metadata/test_ust | 2 +- > + .../regression/tools/regen-statedump/test_ust | 2 +- > + .../regression/tools/save-load/test_autoload | 7 ++ > + tests/regression/tools/save-load/test_load | 8 +++ > + tests/regression/tools/save-load/test_save | 7 ++ > + .../regression/tools/snapshots/test_ust_fast | 2 +- > + .../regression/tools/snapshots/test_ust_long | 2 +- > + .../tools/snapshots/test_ust_streaming | 2 +- > + tests/regression/tools/snapshots/ust_test | 2 +- > + .../streaming/test_high_throughput_limits | 2 +- > + tests/regression/tools/streaming/test_ust | 2 +- > + .../tracefile-limits/test_tracefile_count | 2 +- > + .../tracefile-limits/test_tracefile_size | 2 +- > + .../tools/wildcard/test_event_wildcard | 67 ++++++++++--------- > + 25 files changed, 147 insertions(+), 60 deletions(-) > + > +diff --git a/tests/regression/tools/crash/test_crash b/tests/regression/tools/crash/test_crash > +index 8c62c513d..3cbe97688 100755 > +--- a/tests/regression/tools/crash/test_crash > ++++ b/tests/regression/tools/crash/test_crash > +@@ -35,6 +35,10 @@ NUM_TESTS=77 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + # Global declaration for simplification > + LTTNG_CRASH=$TESTDIR/../src/bin/lttng-crash/$CRASH_BIN > + > +diff --git a/tests/regression/tools/exclusion/test_exclusion b/tests/regression/tools/exclusion/test_exclusion > +index 949cd41df..42e4d72fb 100755 > +--- a/tests/regression/tools/exclusion/test_exclusion > ++++ b/tests/regression/tools/exclusion/test_exclusion > +@@ -30,6 +30,10 @@ NUM_TESTS=149 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + function enable_ust_lttng_all_event_exclusion() > + { > + sess_name="$1" > +diff --git a/tests/regression/tools/filtering/test_valid_filter b/tests/regression/tools/filtering/test_valid_filter > +index 163b32182..1e8da630b 100755 > +--- a/tests/regression/tools/filtering/test_valid_filter > ++++ b/tests/regression/tools/filtering/test_valid_filter > +@@ -418,12 +418,18 @@ issue_356_filter+="intfield > 4 && intfield > 5 && " > + issue_356_filter+="intfield > 6 && intfield > 7 && " > + issue_356_filter+="intfield > 8 || intfield > 0" > + > ++BIN_NAME="gen-ust-events" > ++ > ++skip_ust=1 > ++if [ ! -x "$CURDIR/$BIN_NAME" ]; then > ++ skip_ust=0 > ++ skip 0 "No UST nevents binary detected." $NUM_UST_TESTS > ++fi > ++ > + start_lttng_sessiond > + > + ### UST TESTS > + > +-BIN_NAME="gen-ust-events" > +- > + KIRK_KRAUSS_TESTS=( > + # the tests below were written by Kirk Krauss in this article: > + # http://www.drdobbs.com/architecture-and-design/matching-wildcards-an-empirical-way-to-t/240169123 > +@@ -897,9 +903,6 @@ UST_STR_FILTERS=( > + END > + ) > + > +-if [ ! -x "$CURDIR/$BIN_NAME" ]; then > +- BAIL_OUT "No UST nevents binary detected." > +-fi > + > + IFS="$OLDIFS" > + > +@@ -910,6 +913,10 @@ i=0 > + while true; do > + validator="${UST_FILTERS[$i]}" > + > ++ if [ $skip_ust -eq 0 ]; then > ++ break > ++ fi > ++ > + if [ "$validator" = END ]; then > + break > + fi > +@@ -929,6 +936,10 @@ i=0 > + while true; do > + validator="${UST_STR_FILTERS[$i]}" > + > ++ if [ $skip_ust -eq 0 ]; then > ++ break > ++ fi > ++ > + if [ "$validator" = END ]; then > + break > + fi > +diff --git a/tests/regression/tools/health/test_thread_ok b/tests/regression/tools/health/test_thread_ok > +index e81d6ed24..849b7e71f 100755 > +--- a/tests/regression/tools/health/test_thread_ok > ++++ b/tests/regression/tools/health/test_thread_ok > +@@ -27,6 +27,9 @@ CHANNEL_NAME="testchan" > + HEALTH_CHECK_BIN="health_check" > + NUM_TESTS=17 > + SLEEP_TIME=30 > ++TESTAPP_PATH="$TESTDIR/utils/testapp" > ++TESTAPP_NAME="gen-ust-events" > ++TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" > + > + source $TESTDIR/utils/utils.sh > + > +@@ -76,15 +79,19 @@ function test_thread_ok > + $CURDIR/$HEALTH_CHECK_BIN > ${STDOUT_PATH} 2> ${STDERR_PATH} > + report_errors > + > +- diag "With UST consumer daemons" > +- create_lttng_session_no_output $SESSION_NAME > +- enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME > +- start_lttng_tracing_ok $SESSION_NAME > +- destroy_lttng_session_ok $SESSION_NAME > ++ skip $skip_ust "Ust does not seems to be supported" "5" || > ++ { > ++ diag "With UST consumer daemons" > ++ create_lttng_session_no_output $SESSION_NAME > ++ enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME > ++ start_lttng_tracing_ok $SESSION_NAME > ++ destroy_lttng_session_ok $SESSION_NAME > + > +- # Check health status > +- $CURDIR/$HEALTH_CHECK_BIN > ${STDOUT_PATH} 2> ${STDERR_PATH} > +- report_errors > ++ > ++ # Check health status > ++ $CURDIR/$HEALTH_CHECK_BIN > ${STDOUT_PATH} 2> ${STDERR_PATH} > ++ report_errors > ++ } > + > + skip $isroot "Root access is needed. Skipping kernel consumer health check test." "5" || > + { > +@@ -141,6 +148,12 @@ else > + isroot=0 > + fi > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ skip_ust=0 > ++else > ++ skip_ust=1 > ++fi > ++ > + test_thread_ok > + > + rm -rf ${HEALTH_PATH} > +diff --git a/tests/regression/tools/live/Makefile.am b/tests/regression/tools/live/Makefile.am > +index 46186d383..db74de8d5 100644 > +--- a/tests/regression/tools/live/Makefile.am > ++++ b/tests/regression/tools/live/Makefile.am > +@@ -16,9 +16,7 @@ LIVE=$(top_builddir)/src/bin/lttng-sessiond/session.$(OBJEXT) \ > + noinst_PROGRAMS = live_test > + EXTRA_DIST = test_kernel test_lttng_kernel > + > +-if HAVE_LIBLTTNG_UST_CTL > + EXTRA_DIST += test_ust test_ust_tracefile_count test_lttng_ust > +-endif > + > + live_test_SOURCES = live_test.c > + live_test_LDADD = $(LIBTAP) $(LIBCOMMON) $(LIBRELAYD) $(LIBSESSIOND_COMM) \ > +diff --git a/tests/regression/tools/live/test_lttng_ust b/tests/regression/tools/live/test_lttng_ust > +index 06017d01d..be9b3d7f7 100755 > +--- a/tests/regression/tools/live/test_lttng_ust > ++++ b/tests/regression/tools/live/test_lttng_ust > +@@ -38,6 +38,10 @@ NUM_TESTS=12 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + # MUST set TESTDIR before calling those functions > + plan_tests $NUM_TESTS > + > +diff --git a/tests/regression/tools/live/test_ust b/tests/regression/tools/live/test_ust > +index 0384a706f..add521bfc 100755 > +--- a/tests/regression/tools/live/test_ust > ++++ b/tests/regression/tools/live/test_ust > +@@ -36,6 +36,10 @@ DIR=$(readlink -f $TESTDIR) > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + echo "$TEST_DESC" > + > + function setup_live_tracing() > +diff --git a/tests/regression/tools/live/test_ust_tracefile_count b/tests/regression/tools/live/test_ust_tracefile_count > +index 6da368fc6..10504f8c6 100755 > +--- a/tests/regression/tools/live/test_ust_tracefile_count > ++++ b/tests/regression/tools/live/test_ust_tracefile_count > +@@ -36,6 +36,10 @@ DIR=$(readlink -f $TESTDIR) > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + echo "$TEST_DESC" > + > + function setup_live_tracing() > +diff --git a/tests/regression/tools/mi/test_mi b/tests/regression/tools/mi/test_mi > +index 48dda7da6..2cc30b29a 100755 > +--- a/tests/regression/tools/mi/test_mi > ++++ b/tests/regression/tools/mi/test_mi > +@@ -61,6 +61,10 @@ NUM_TESTS=228 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + #Overwrite the lttng_bin to get mi output > + LTTNG_BIN="lttng --mi xml" > + > +diff --git a/tests/regression/tools/notification/test_notification_multi_app b/tests/regression/tools/notification/test_notification_multi_app > +index 0a05ea6a0..29b0f62fa 100755 > +--- a/tests/regression/tools/notification/test_notification_multi_app > ++++ b/tests/regression/tools/notification/test_notification_multi_app > +@@ -52,6 +52,11 @@ plan_tests $NUM_TESTS > + > + print_test_banner "$TEST_DESC" > + > ++skip_ust=1 > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ skip_ust=0 > ++fi > ++ > + app_pids=() > + > + function kernel_event_generator_toogle_state > +@@ -468,10 +473,15 @@ function test_on_register_evaluation () > + } > + > + > +-TESTS=( > +- test_multi_app_ust > +- test_on_register_evaluation_ust > +-) > ++TESTS=() > ++if [ $skip_ust -eq "1" ]; then > ++ TESTS+=( > ++ test_multi_app_ust > ++ test_on_register_evaluation_ust > ++ ) > ++else > ++ skip 0 "No UST events binary detected." $NUM_TEST_UST > ++fi > + > + if [ "$(id -u)" == "0" ]; then > + TESTS+=( > +diff --git a/tests/regression/tools/notification/test_notification_ust b/tests/regression/tools/notification/test_notification_ust > +index 8941e476d..eb2e15cad 100755 > +--- a/tests/regression/tools/notification/test_notification_ust > ++++ b/tests/regression/tools/notification/test_notification_ust > +@@ -46,6 +46,10 @@ DIR=$(readlink -f $TESTDIR) > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + function ust_event_generator_toogle_state > + { > + ust_event_generator_suspended=$((ust_event_generator_suspended==0)) > +diff --git a/tests/regression/tools/regen-metadata/test_ust b/tests/regression/tools/regen-metadata/test_ust > +index b7f1af1d8..312c8a40d 100755 > +--- a/tests/regression/tools/regen-metadata/test_ust > ++++ b/tests/regression/tools/regen-metadata/test_ust > +@@ -34,7 +34,7 @@ NUM_TESTS=33 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function lttng_create_session_uri > +diff --git a/tests/regression/tools/regen-statedump/test_ust b/tests/regression/tools/regen-statedump/test_ust > +index 486b9a560..8d455b26a 100755 > +--- a/tests/regression/tools/regen-statedump/test_ust > ++++ b/tests/regression/tools/regen-statedump/test_ust > +@@ -34,7 +34,7 @@ NUM_TESTS=11 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function test_ust_local () > +diff --git a/tests/regression/tools/save-load/test_autoload b/tests/regression/tools/save-load/test_autoload > +index 7ee5e9906..ec376cfb3 100755 > +--- a/tests/regression/tools/save-load/test_autoload > ++++ b/tests/regression/tools/save-load/test_autoload > +@@ -21,6 +21,9 @@ CURDIR=$(dirname $0)/ > + CONFIG_DIR="${CURDIR}/configuration" > + TESTDIR=$CURDIR/../../../ > + export LTTNG_SESSION_CONFIG_XSD_PATH=$(readlink -m ${TESTDIR}../src/common/config/) > ++TESTAPP_PATH="$TESTDIR/utils/testapp" > ++TESTAPP_NAME="gen-ust-events" > ++TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" > + > + DIR=$(readlink -f $TESTDIR) > + > +@@ -28,6 +31,10 @@ NUM_TESTS=9 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + # MUST set TESTDIR before calling those functions > + plan_tests $NUM_TESTS > + > +diff --git a/tests/regression/tools/save-load/test_load b/tests/regression/tools/save-load/test_load > +index 5e38b46b6..b6fdd8192 100755 > +--- a/tests/regression/tools/save-load/test_load > ++++ b/tests/regression/tools/save-load/test_load > +@@ -20,6 +20,10 @@ TEST_DESC="Load session(s)" > + CURDIR=$(dirname $0)/ > + CONFIG_DIR="${CURDIR}/configuration" > + TESTDIR=$CURDIR/../../../ > ++TESTAPP_PATH="$TESTDIR/utils/testapp" > ++TESTAPP_NAME="gen-ust-events" > ++TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" > ++ > + export LTTNG_SESSION_CONFIG_XSD_PATH=$(readlink -m ${TESTDIR}../src/common/config/) > + > + SESSION_NAME="load-42" > +@@ -31,6 +35,10 @@ NUM_TESTS=67 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "$TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + # MUST set TESTDIR before calling those functions > + plan_tests $NUM_TESTS > + > +diff --git a/tests/regression/tools/save-load/test_save b/tests/regression/tools/save-load/test_save > +index c5f6b1341..cfaf67b7a 100755 > +--- a/tests/regression/tools/save-load/test_save > ++++ b/tests/regression/tools/save-load/test_save > +@@ -23,6 +23,9 @@ TESTDIR=$CURDIR/../../../ > + SESSION_NAME="save-42" > + CHANNEL_NAME="chan-save" > + EVENT_NAME="tp:tptest" > ++TESTAPP_PATH="$TESTDIR/utils/testapp" > ++TESTAPP_NAME="gen-ust-events" > ++TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" > + > + DIR=$(readlink -f $TESTDIR) > + > +@@ -30,6 +33,10 @@ NUM_TESTS=41 > + > + source $TESTDIR/utils/utils.sh > + > ++if [ ! -x "TESTAPP_BIN" ]; then > ++ plan_skip_all "No UST events binary detected." > ++fi > ++ > + # MUST set TESTDIR before calling those functions > + plan_tests $NUM_TESTS > + > +diff --git a/tests/regression/tools/snapshots/test_ust_fast b/tests/regression/tools/snapshots/test_ust_fast > +index edb435c52..5a68ec56d 100755 > +--- a/tests/regression/tools/snapshots/test_ust_fast > ++++ b/tests/regression/tools/snapshots/test_ust_fast > +@@ -23,7 +23,7 @@ TEST_BIN="ust_test" > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$CURDIR/$TEST_BIN" ]; then > +- BAIL_OUT "No UST test found: $TEST_BIN" > ++ plan_skip_all "No UST test found: $TEST_BIN" > + fi > + > + ./$CURDIR/$TEST_BIN $NR_SNAPSHOT > +diff --git a/tests/regression/tools/snapshots/test_ust_long b/tests/regression/tools/snapshots/test_ust_long > +index 9e1a0c262..afa019f6a 100755 > +--- a/tests/regression/tools/snapshots/test_ust_long > ++++ b/tests/regression/tools/snapshots/test_ust_long > +@@ -23,7 +23,7 @@ TEST_BIN="ust_test" > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$CURDIR/$TEST_BIN" ]; then > +- BAIL_OUT "No UST test found: $TEST_BIN" > ++ plan_skip_all "No UST test found: $TEST_BIN" > + fi > + > + ./$CURDIR/$TEST_BIN $NR_SNAPSHOT > +diff --git a/tests/regression/tools/snapshots/test_ust_streaming b/tests/regression/tools/snapshots/test_ust_streaming > +index 93b0957f3..69291ab4d 100755 > +--- a/tests/regression/tools/snapshots/test_ust_streaming > ++++ b/tests/regression/tools/snapshots/test_ust_streaming > +@@ -37,7 +37,7 @@ NUM_TESTS=75 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function snapshot_add_output () > +diff --git a/tests/regression/tools/snapshots/ust_test b/tests/regression/tools/snapshots/ust_test > +index 755cef9e0..92f9f6cff 100755 > +--- a/tests/regression/tools/snapshots/ust_test > ++++ b/tests/regression/tools/snapshots/ust_test > +@@ -34,7 +34,7 @@ TRACE_PATH=$(mktemp -d) > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + # Need the number of snapshot to do. > +diff --git a/tests/regression/tools/streaming/test_high_throughput_limits b/tests/regression/tools/streaming/test_high_throughput_limits > +index 32c3f1f2b..f54178923 100755 > +--- a/tests/regression/tools/streaming/test_high_throughput_limits > ++++ b/tests/regression/tools/streaming/test_high_throughput_limits > +@@ -38,7 +38,7 @@ NUM_TESTS=104 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function set_bw_limit > +diff --git a/tests/regression/tools/streaming/test_ust b/tests/regression/tools/streaming/test_ust > +index a5d5b5e92..e1dd98ee7 100755 > +--- a/tests/regression/tools/streaming/test_ust > ++++ b/tests/regression/tools/streaming/test_ust > +@@ -34,7 +34,7 @@ NUM_TESTS=16 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function lttng_create_session_uri > +diff --git a/tests/regression/tools/tracefile-limits/test_tracefile_count b/tests/regression/tools/tracefile-limits/test_tracefile_count > +index 6ada8580f..7553c7d1f 100755 > +--- a/tests/regression/tools/tracefile-limits/test_tracefile_count > ++++ b/tests/regression/tools/tracefile-limits/test_tracefile_count > +@@ -33,7 +33,7 @@ PAGE_SIZE=$(getconf PAGE_SIZE) > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function enable_lttng_channel_count_limit () > +diff --git a/tests/regression/tools/tracefile-limits/test_tracefile_size b/tests/regression/tools/tracefile-limits/test_tracefile_size > +index 3dddbe613..1089487ff 100755 > +--- a/tests/regression/tools/tracefile-limits/test_tracefile_size > ++++ b/tests/regression/tools/tracefile-limits/test_tracefile_size > +@@ -33,7 +33,7 @@ NUM_TESTS=66 > + source $TESTDIR/utils/utils.sh > + > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST events binary detected." > ++ plan_skip_all "No UST events binary detected." > + fi > + > + function enable_lttng_channel_size_limit () > +diff --git a/tests/regression/tools/wildcard/test_event_wildcard b/tests/regression/tools/wildcard/test_event_wildcard > +index 61ea67a72..921a2301d 100755 > +--- a/tests/regression/tools/wildcard/test_event_wildcard > ++++ b/tests/regression/tools/wildcard/test_event_wildcard > +@@ -97,42 +97,47 @@ print_test_banner "$TEST_DESC" > + > + start_lttng_sessiond > + > +-diag "Test UST wildcard" > +- > + if [ ! -x "$TESTAPP_BIN" ]; then > +- BAIL_OUT "No UST nevents binary detected." > ++ skip_ust=0 > ++else > ++ skip_ust=1 > + fi > + > +-EVENT_NAME="tp:tptest" > ++skip $skip_ust "No UST nevents binary detected." $NUM_UST_TESTS || > ++{ > ++ diag "Test UST wildcard" > + > +-# non-matching > +-test_event_wildcard ust 0 'tp:abc*' > +-test_event_wildcard ust 0 '*abc' > +-test_event_wildcard ust 0 '*z*' > +-test_event_wildcard ust 0 '*\**' > +-test_event_wildcard ust 0 '*\*' > +-test_event_wildcard ust 0 '\**' > +-test_event_wildcard ust 0 '*:*tpte*s' > +-test_event_wildcard ust 0 'tp**tpTest' > ++ EVENT_NAME="tp:tptest" > + > +-# matching > +-test_event_wildcard ust 1 'tp:tp*' > +-test_event_wildcard ust 1 '*' > +-test_event_wildcard ust 1 'tp:tptest*' > +-test_event_wildcard ust 1 '**' > +-test_event_wildcard ust 1 '***' > +-test_event_wildcard ust 1 '*tptest' > +-test_event_wildcard ust 1 '**tptest' > +-test_event_wildcard ust 1 '*tpte*' > +-test_event_wildcard ust 1 '*tp*' > +-test_event_wildcard ust 1 '*tp**' > +-test_event_wildcard ust 1 '*:*tptest' > +-test_event_wildcard ust 1 '*:*tpte*t' > +-test_event_wildcard ust 1 't*p*:*t*e*s*t' > +-test_event_wildcard ust 1 '*t*p*:*t*e*s*t*' > +-test_event_wildcard ust 1 'tp*tptest' > +-test_event_wildcard ust 1 'tp**tptest' > +-test_event_wildcard ust 1 'tp*test' > ++ # non-matching > ++ test_event_wildcard ust 0 'tp:abc*' > ++ test_event_wildcard ust 0 '*abc' > ++ test_event_wildcard ust 0 '*z*' > ++ test_event_wildcard ust 0 '*\**' > ++ test_event_wildcard ust 0 '*\*' > ++ test_event_wildcard ust 0 '\**' > ++ test_event_wildcard ust 0 '*:*tpte*s' > ++ test_event_wildcard ust 0 'tp**tpTest' > ++ > ++ # matching > ++ test_event_wildcard ust 1 'tp:tp*' > ++ test_event_wildcard ust 1 '*' > ++ test_event_wildcard ust 1 'tp:tptest*' > ++ test_event_wildcard ust 1 '**' > ++ test_event_wildcard ust 1 '***' > ++ test_event_wildcard ust 1 '*tptest' > ++ test_event_wildcard ust 1 '**tptest' > ++ test_event_wildcard ust 1 '*tpte*' > ++ test_event_wildcard ust 1 '*tp*' > ++ test_event_wildcard ust 1 '*tp**' > ++ test_event_wildcard ust 1 '*:*tptest' > ++ test_event_wildcard ust 1 '*:*tpte*t' > ++ test_event_wildcard ust 1 't*p*:*t*e*s*t' > ++ test_event_wildcard ust 1 '*t*p*:*t*e*s*t*' > ++ test_event_wildcard ust 1 'tp*tptest' > ++ test_event_wildcard ust 1 'tp**tptest' > ++ test_event_wildcard ust 1 'tp*test' > ++} > + > + if [ "$(id -u)" == "0" ]; then > + isroot=1 > +-- > +2.17.1 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch b/meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch > new file mode 100644 > index 0000000000..16df3e610a > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch > @@ -0,0 +1,176 @@ > +From 9bc81a446d0a3ea9a884739eee48d3f14db3283c Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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 > +Signed-off-by: Jérémie Galarneau > +--- > + 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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch b/meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch > new file mode 100644 > index 0000000000..e07c227f46 > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch > @@ -0,0 +1,28 @@ > +From 92f93238f1df005aadc98e105c0dd0e04a5955a7 Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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 > +--- > + 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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch b/meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > new file mode 100644 > index 0000000000..5437de26e8 > --- /dev/null > +++ b/meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch > @@ -0,0 +1,345 @@ > +From 10e8001ad876d8cb3b5a17c7492e713bbc047975 Mon Sep 17 00:00:00 2001 > +From: Jonathan Rajotte > +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=) at src/malloc/malloc.c:515 > +2 free (p=) at src/malloc/malloc.c:526 > +3 0x00007f46d9dc3849 in __getgrent_a (f=f@entry=0x7f46d9d1f7e0, gr=gr@entry=0x7f46d9e24460 , line=line@entry=0x7f46d9e26058 , size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 , 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 , buf=buf@entry=0x7f46d9e26058 , size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 , nmem=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgr_a.c:30 > +5 0x00007f46d9dc3733 in getgrnam (name=) at src/passwd/getgrent.c:37 > +6 0x0000000000460b29 in utils_get_group_id (name=) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241 > +7 0x000000000044ee69 in thread_manage_health (data=) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/main.c:4115 > +8 0x00007f46d9de1541 in start (p=) 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=) at src/malloc/malloc.c:515 > +2 free (p=) at src/malloc/malloc.c:526 > +3 0x00007f5abc210849 in __getgrent_a (f=f@entry=0x7f5abc2733e0, gr=gr@entry=0x7f5abc271460 , line=line@entry=0x7f5abc273058 , size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 , 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 , buf=buf@entry=0x7f5abc273058 , size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 , nmem=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgr_a.c:30 > +5 0x00007f5abc210733 in getgrnam (name=) at src/passwd/getgrent.c:37 > +6 0x0000000000460b29 in utils_get_group_id (name=) 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=) 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 > +--- > + 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 > + #include > + #include > ++#include > ++#include > + > + #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 > + > diff --git a/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb b/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb > index 86418f14c0..b720b84afa 100644 > --- a/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb > +++ b/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb > @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=01d7fc4496aacf37d90df90b90b0cac1 \ > > DEPENDS = "liburcu popt libxml2 util-linux" > RDEPENDS_${PN} = "libgcc" > -RDEPENDS_${PN}-ptest += "make perl bash gawk ${PN} babeltrace procps perl-module-overloading coreutils util-linux" > +RDEPENDS_${PN}-ptest += "make perl bash gawk ${PN} babeltrace procps perl-module-overloading coreutils util-linux kmod" > RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils" > RDEPENDS_${PN}-ptest_append_libc-musl = " musl-utils" > # babelstats.pl wants getopt-long > @@ -33,6 +33,13 @@ 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 \ > " > > SRC_URI[md5sum] = "e88c521b5da6bb48a8187af633336ecc" > -- > 2.17.1 > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core