<div dir='auto'><div><br><div><br><div class="elided-text">On Apr 23, 2019 5:25 AM, "Burton, Ross" &lt;ross.burton@intel.com&gt; wrote:<br type="attribution"><blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc solid;padding-left:1ex"><div>&gt; 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch<br>&gt; Fixes a race found while testing OE built with musl. This is a legit<br>&gt; bug. The fixes or a variant should be accepted soon.<br><br>This was missing the Upstream-Status tag.  Is there an upstream bug or<br>similar we can point at in an Upstream-Status for tracking?<br></div></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">Sorry for that.</div><div dir="auto"><br></div><div dir="auto">There is no "bug" but you can follow the status here [1].</div><div dir="auto"><br></div><div dir="auto">[1]&nbsp;https://patchwork.lttng.org/patch/2314703</div><div dir="auto"><br></div><div dir="auto">The status should be: Submitted.</div><div dir="auto"><br></div><div dir="auto">Cheers</div><div dir="auto"><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Apr 23, 2019 5:25 AM, &quot;Burton, Ross&quot; &lt;ross.burton@intel.com&gt; wrote:<br type="attribution" /><br />&gt; 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch<br />&gt; Fixes a race found while testing OE built with musl. This is a legit<br />&gt; bug. The fixes or a variant should be accepted soon.<br /><br />This was missing the Upstream-Status tag.  Is there an upstream bug or<br />similar we can point at in an Upstream-Status for tracking?<br /><br />Ross<br /><br />On Thu, 4 Apr 2019 at 22:48, Jonathan Rajotte<br />&lt;jonathan.rajotte-julien@efficios.com&gt; wrote:<br />&gt;<br />&gt; Multiple patches are to be applied to improve the current ptest suite.<br />&gt;<br />&gt; 0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch<br />&gt; 0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch<br />&gt; 0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch<br />&gt; 0006-Tests-check-for-lttng-modules-presence.patch<br />&gt;<br />&gt; All deal with problem in the test suite. Most of these are already<br />&gt; accepted upstream and will be removed on the next recipe update.<br />&gt;<br />&gt; 0004-Skip-when-testapp-is-not-present.patch<br />&gt;<br />&gt; Is a OE specific fix that make sure that we skip the test if<br />&gt; the test util application (event generator) is not present. We are<br />&gt; still unsure on how (upstream) we are going to solve this problem. We<br />&gt; already have this problem if a user build lttng without lttng-ust<br />&gt; (--without-lttng-ust). We will most probably end up splitting each test<br />&gt; into kernel and userspace tests and adjust the makefile accordingly.<br />&gt; Another option is to probe lttng for enabled function at runtime.<br />&gt;<br />&gt; 0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch<br />&gt;<br />&gt; Is a requirement for 0006 that should be accepted upstream shorlty.<br />&gt;<br />&gt; 0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch<br />&gt;<br />&gt; Fixes a race found while testing OE built with musl. This is a legit<br />&gt; bug. The fixes or a variant should be accepted soon.<br />&gt;<br />&gt; Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; ---<br />&gt;  ...nk-libpause_consumer-on-liblttng-ctl.patch |  35 +<br />&gt;  ...st_getcpu_override-on-single-thread-.patch |  52 ++<br />&gt;  ...e-tree-origin-can-be-a-symlink-itsel.patch |  80 +++<br />&gt;  ...004-Skip-when-testapp-is-not-present.patch | 610 ++++++++++++++++++<br />&gt;  ...be-to-test-for-the-presence-of-lttng.patch | 176 +++++<br />&gt;  ...sts-check-for-lttng-modules-presence.patch |  28 +<br />&gt;  ...tgrnam-is-not-MT-Safe-use-getgrnam_r.patch | 345 ++++++++++<br />&gt;  .../lttng/lttng-tools_2.10.6.bb               |   9 +-<br />&gt;  8 files changed, 1334 insertions(+), 1 deletion(-)<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch<br />&gt;  create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch<br />&gt;<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..df18dc842b<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch<br />&gt; @@ -0,0 +1,35 @@<br />&gt; +From 7244eac44be929fabd6ed1333f96929ef8da564f Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Tue, 19 Mar 2019 17:56:49 +0000<br />&gt; +Subject: [PATCH] fix: tests: link libpause_consumer on liblttng-ctl<br />&gt; +<br />&gt; +This preload test library uses symbols from liblttng-ctl which are<br />&gt; +resolved when preloaded by GLIBC but not by MUSL.<br />&gt; +<br />&gt; +Upstream-Status: Accepted [f667fbd7f8b9512f9943edb2597c226fcc424ee9]<br />&gt; +Backported to 2.11 and 2.10.<br />&gt; +<br />&gt; +Signed-off-by: Michael Jeanson &lt;mjeanson@efficios.com&gt;<br />&gt; +---<br />&gt; + tests/regression/tools/notification/Makefile.am | 5 ++++-<br />&gt; + 1 file changed, 4 insertions(+), 1 deletion(-)<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/notification/Makefile.am b/tests/regression/tools/notification/Makefile.am<br />&gt; +index 41adc69..a352bb8 100644<br />&gt; +--- a/tests/regression/tools/notification/Makefile.am<br />&gt; ++++ b/tests/regression/tools/notification/Makefile.am<br />&gt; +@@ -20,7 +20,10 @@ FORCE_SHARED_LIB_OPTIONS = -module -shared -avoid-version \<br />&gt; +                          -rpath $(abs_builddir)<br />&gt; +<br />&gt; + libpause_consumer_la_SOURCES = consumer_testpoints.c<br />&gt; +-libpause_consumer_la_LIBADD = $(top_builddir)/src/common/libcommon.la $(DL_LIBS)<br />&gt; ++libpause_consumer_la_LIBADD = \<br />&gt; ++     $(top_builddir)/src/common/libcommon.la \<br />&gt; ++     $(top_builddir)/src/lib/lttng-ctl/liblttng-ctl.la \<br />&gt; ++     $(DL_LIBS)<br />&gt; + libpause_consumer_la_LDFLAGS = $(FORCE_SHARED_LIB_OPTIONS)<br />&gt; + noinst_LTLIBRARIES = libpause_consumer.la<br />&gt; +<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..5bb88d21e5<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch<br />&gt; @@ -0,0 +1,52 @@<br />&gt; +From e7db27668a9d7fd279d45bc43f3a2d5847374e7b Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Tue, 12 Mar 2019 12:04:58 -0400<br />&gt; +Subject: [PATCH lttng-tools 1/2] Fix: test: skip test_getcpu_override on<br />&gt; + single thread system<br />&gt; +<br />&gt; +There is no value in performing this test on single thread system<br />&gt; +since the only valid value for the cpu field is 0.<br />&gt; +<br />&gt; +This test currently fails on single thread system (i.e yocto runquemu)<br />&gt; +on the test_getcpu_override_fail test case.<br />&gt; +<br />&gt; +Upstream-Status: Accepted [f87d0ca370c17b597762f5ee218f0e821ed2452d]<br />&gt; +Backported to 2.11 and 2.10<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +---<br />&gt; + .../ust/getcpu-override/test_getcpu_override     | 16 +++++++++++-----<br />&gt; + 1 file changed, 11 insertions(+), 5 deletions(-)<br />&gt; +<br />&gt; +diff --git a/tests/regression/ust/getcpu-override/test_getcpu_override b/tests/regression/ust/getcpu-override/test_getcpu_override<br />&gt; +index 4ca385aeb..ee3e31953 100755<br />&gt; +--- a/tests/regression/ust/getcpu-override/test_getcpu_override<br />&gt; ++++ b/tests/regression/ust/getcpu-override/test_getcpu_override<br />&gt; +@@ -157,13 +157,19 @@ plan_tests $NUM_TESTS<br />&gt; +<br />&gt; + print_test_banner &quot;$TEST_DESC&quot;<br />&gt; +<br />&gt; +-if [ -x &quot;$CURDIR/.libs/lttng-ust-getcpu-override-test.so&quot; ]; then<br />&gt; +-      foundobj=1<br />&gt; +-else<br />&gt; +-      foundobj=0<br />&gt; ++if [ ! -x &quot;$CURDIR/.libs/lttng-ust-getcpu-override-test.so&quot; ]; then<br />&gt; ++      skip 0 &quot;No shared object generated. Skipping all tests.&quot; $NUM_TESTS &amp;&amp; exit 0<br />&gt; ++fi<br />&gt; ++<br />&gt; ++if [ &quot;$num_cpus&quot; -eq &quot;1&quot; ]; then<br />&gt; ++      # Skip the test since we cannot perform it as designed since N mod 1<br />&gt; ++      # is always equals to zero. There is no point testing this on a system<br />&gt; ++      # with a single thread. LTTng-UST limits the get_cpu function to return<br />&gt; ++      # value inside the [0, NUM_CPU - 1] range for a valid event (present in<br />&gt; ++      # trace).<br />&gt; ++      skip 0 &quot;Test system only have a single thread. Skipping all tests.&quot; $NUM_TESTS &amp;&amp; exit 0<br />&gt; + fi<br />&gt; +<br />&gt; +-skip $foundobj &quot;No shared object generated. Skipping all tests.&quot; $NUM_TESTS &amp;&amp; exit 0<br />&gt; +<br />&gt; + TESTS=(<br />&gt; +       test_getcpu_override_fail<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..822b26a367<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch<br />&gt; @@ -0,0 +1,80 @@<br />&gt; +From 83d165442d1c3658b6bafa28ddade8ffee7092ad Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Wed, 6 Mar 2019 16:46:49 -0500<br />&gt; +Subject: [PATCH lttng-tools 2/2] Fix: test: unit: the tree origin can be a<br />&gt; + symlink itself<br />&gt; +<br />&gt; +Problem:<br />&gt; +<br />&gt; +The base tree is defined as &quot;/tmp/.....XXXXXX&quot;.<br />&gt; +On systems where &quot;/tmp/&quot; is itself a symlink utils_expand_path will<br />&gt; +expand the tree origin itself.<br />&gt; +<br />&gt; +For example on a base core-image-minimal Yocto build /tmp is a symlink<br />&gt; +to &quot;/var/tmp&quot;, which is a symlink to &quot;/var/volatile&quot;.<br />&gt; +<br />&gt; +utils_expand_path will return something like this for the symlink test:<br />&gt; +&quot;/var/volative/.....XXXXXX/....&quot; which is the valid result.<br />&gt; +<br />&gt; +Solution:<br />&gt; +<br />&gt; +Simply use realpath on the tree_origin and use this path to perform the<br />&gt; +test validation.<br />&gt; +<br />&gt; +This work was performed in the effort to support yocto fully and be able<br />&gt; +to run the test suite to detect problem as early as possible.<br />&gt; +<br />&gt; +<br />&gt; +Upstream-Status: Accepted [f66e964a2e0c75f5e1a55fbcc963b1c5e2b4519d]<br />&gt; +Backported to 2.11 and 2.10<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +---<br />&gt; + tests/unit/test_utils_expand_path.c | 18 ++++++++++++++----<br />&gt; + 1 file changed, 14 insertions(+), 4 deletions(-)<br />&gt; +<br />&gt; +diff --git a/tests/unit/test_utils_expand_path.c b/tests/unit/test_utils_expand_path.c<br />&gt; +index d5cab002e..d047c207d 100644<br />&gt; +--- a/tests/unit/test_utils_expand_path.c<br />&gt; ++++ b/tests/unit/test_utils_expand_path.c<br />&gt; +@@ -281,8 +281,8 @@ error:<br />&gt; + static void test_utils_expand_path(void)<br />&gt; + {<br />&gt; +       char *result;<br />&gt; +-      char name[100], tmppath[PATH_MAX];<br />&gt; +-      int i;<br />&gt; ++      char name[100], tmppath[PATH_MAX], real_tree_origin[PATH_MAX];<br />&gt; ++      int i, treelen;<br />&gt; +<br />&gt; +       /* Test valid cases */<br />&gt; +       for (i = 0; i &lt; num_valid_tests; i++) {<br />&gt; +@@ -295,14 +295,24 @@ static void test_utils_expand_path(void)<br />&gt; +               free(result);<br />&gt; +       }<br />&gt; +<br />&gt; ++      /*<br />&gt; ++       * Get the realpath for the tree_origin since it can itself be a<br />&gt; ++       * symlink.<br />&gt; ++       */<br />&gt; ++      result = realpath(tree_origin, real_tree_origin);<br />&gt; ++      if (!result) {<br />&gt; ++              fail(&quot;realpath failed.&quot;);<br />&gt; ++              return;<br />&gt; ++      }<br />&gt; ++<br />&gt; +       /* Test symlink tree cases */<br />&gt; +-      int treelen = strlen(tree_origin) + 1;<br />&gt; ++      treelen = strlen(real_tree_origin) + 1;<br />&gt; +       for (i = 0; i &lt; num_symlink_tests; i++) {<br />&gt; +               sprintf(name, &quot;symlink tree test case: [tmppath/]%s&quot;,<br />&gt; +                               symlink_tests_inputs[i].input);<br />&gt; +<br />&gt; +               snprintf(tmppath, PATH_MAX, &quot;%s/%s&quot;,<br />&gt; +-                              tree_origin, symlink_tests_inputs[i].input);<br />&gt; ++                              real_tree_origin, symlink_tests_inputs[i].input);<br />&gt; +               result = utils_expand_path(tmppath);<br />&gt; +               ok(result != NULL &amp;&amp; strcmp(result + treelen,<br />&gt; +                                       symlink_tests_inputs[i].expected_result) == 0, name);<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..6c9f7e462c<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0004-Skip-when-testapp-is-not-present.patch<br />&gt; @@ -0,0 +1,610 @@<br />&gt; +From 95c27e6acceaeda55c729b9e92e594322adef13f Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Wed, 3 Apr 2019 16:31:18 -0400<br />&gt; +Subject: [PATCH lttng-tools] Skip when testapp is not present<br />&gt; +<br />&gt; +We expect lttng-ust do be present, this is a wrong assumptions.<br />&gt; +<br />&gt; +This is a quick fix. The real fix is to either detect at runtime<br />&gt; +lttng-ust support or at build time (HAVE_LIBLTTNG_UST_CTL).<br />&gt; +<br />&gt; +This prevent hang for make check done on a build configured with<br />&gt; +--without-lttng-ust.<br />&gt; +<br />&gt; +Upstream-Status: Inappropriate [other]<br />&gt; +Reason: This patch is inappropriate for upstream for 2.10 stable release<br />&gt; +since we do not backport &quot;superficial&quot; fix to the test suite. We do<br />&gt; +backport when a test is broken. The fact that on --without-lttng-ust<br />&gt; +hang is not a &quot;broken&quot; test per-see. Still, a variation of this fix will<br />&gt; +be upstreamed in our master branch and possibly 2.11. The upstreamed<br />&gt; +version will split the test in kernel/ust test and skip them at the<br />&gt; +build system level. This patch is more succinct.<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +---<br />&gt; + tests/regression/tools/crash/test_crash       |  4 ++<br />&gt; + .../regression/tools/exclusion/test_exclusion |  4 ++<br />&gt; + .../tools/filtering/test_valid_filter         | 21 ++++--<br />&gt; + tests/regression/tools/health/test_thread_ok  | 29 +++++---<br />&gt; + tests/regression/tools/live/Makefile.am       |  2 -<br />&gt; + tests/regression/tools/live/test_lttng_ust    |  4 ++<br />&gt; + tests/regression/tools/live/test_ust          |  4 ++<br />&gt; + .../tools/live/test_ust_tracefile_count       |  4 ++<br />&gt; + tests/regression/tools/mi/test_mi             |  4 ++<br />&gt; + .../notification/test_notification_multi_app  | 18 +++--<br />&gt; + .../tools/notification/test_notification_ust  |  4 ++<br />&gt; + .../regression/tools/regen-metadata/test_ust  |  2 +-<br />&gt; + .../regression/tools/regen-statedump/test_ust |  2 +-<br />&gt; + .../regression/tools/save-load/test_autoload  |  7 ++<br />&gt; + tests/regression/tools/save-load/test_load    |  8 +++<br />&gt; + tests/regression/tools/save-load/test_save    |  7 ++<br />&gt; + .../regression/tools/snapshots/test_ust_fast  |  2 +-<br />&gt; + .../regression/tools/snapshots/test_ust_long  |  2 +-<br />&gt; + .../tools/snapshots/test_ust_streaming        |  2 +-<br />&gt; + tests/regression/tools/snapshots/ust_test     |  2 +-<br />&gt; + .../streaming/test_high_throughput_limits     |  2 +-<br />&gt; + tests/regression/tools/streaming/test_ust     |  2 +-<br />&gt; + .../tracefile-limits/test_tracefile_count     |  2 +-<br />&gt; + .../tracefile-limits/test_tracefile_size      |  2 +-<br />&gt; + .../tools/wildcard/test_event_wildcard        | 67 ++++++++++---------<br />&gt; + 25 files changed, 147 insertions(+), 60 deletions(-)<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/crash/test_crash b/tests/regression/tools/crash/test_crash<br />&gt; +index 8c62c513d..3cbe97688 100755<br />&gt; +--- a/tests/regression/tools/crash/test_crash<br />&gt; ++++ b/tests/regression/tools/crash/test_crash<br />&gt; +@@ -35,6 +35,10 @@ NUM_TESTS=77<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + # Global declaration for simplification<br />&gt; + LTTNG_CRASH=$TESTDIR/../src/bin/lttng-crash/$CRASH_BIN<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/exclusion/test_exclusion b/tests/regression/tools/exclusion/test_exclusion<br />&gt; +index 949cd41df..42e4d72fb 100755<br />&gt; +--- a/tests/regression/tools/exclusion/test_exclusion<br />&gt; ++++ b/tests/regression/tools/exclusion/test_exclusion<br />&gt; +@@ -30,6 +30,10 @@ NUM_TESTS=149<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + function enable_ust_lttng_all_event_exclusion()<br />&gt; + {<br />&gt; +       sess_name=&quot;$1&quot;<br />&gt; +diff --git a/tests/regression/tools/filtering/test_valid_filter b/tests/regression/tools/filtering/test_valid_filter<br />&gt; +index 163b32182..1e8da630b 100755<br />&gt; +--- a/tests/regression/tools/filtering/test_valid_filter<br />&gt; ++++ b/tests/regression/tools/filtering/test_valid_filter<br />&gt; +@@ -418,12 +418,18 @@ issue_356_filter+=&quot;intfield &gt; 4 &amp;&amp; intfield &gt; 5 &amp;&amp; &quot;<br />&gt; + issue_356_filter+=&quot;intfield &gt; 6 &amp;&amp; intfield &gt; 7 &amp;&amp; &quot;<br />&gt; + issue_356_filter+=&quot;intfield &gt; 8 || intfield &gt; 0&quot;<br />&gt; +<br />&gt; ++BIN_NAME=&quot;gen-ust-events&quot;<br />&gt; ++<br />&gt; ++skip_ust=1<br />&gt; ++if [ ! -x &quot;$CURDIR/$BIN_NAME&quot; ]; then<br />&gt; ++      skip_ust=0<br />&gt; ++      skip 0 &quot;No UST nevents binary detected.&quot; $NUM_UST_TESTS<br />&gt; ++fi<br />&gt; ++<br />&gt; + start_lttng_sessiond<br />&gt; +<br />&gt; + ### UST TESTS<br />&gt; +<br />&gt; +-BIN_NAME=&quot;gen-ust-events&quot;<br />&gt; +-<br />&gt; + KIRK_KRAUSS_TESTS=(<br />&gt; +       # the tests below were written by Kirk Krauss in this article:<br />&gt; +       # http://www.drdobbs.com/architecture-and-design/matching-wildcards-an-empirical-way-to-t/240169123<br />&gt; +@@ -897,9 +903,6 @@ UST_STR_FILTERS=(<br />&gt; +       END<br />&gt; + )<br />&gt; +<br />&gt; +-if [ ! -x &quot;$CURDIR/$BIN_NAME&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST nevents binary detected.&quot;<br />&gt; +-fi<br />&gt; +<br />&gt; + IFS=&quot;$OLDIFS&quot;<br />&gt; +<br />&gt; +@@ -910,6 +913,10 @@ i=0<br />&gt; + while true; do<br />&gt; +       validator=&quot;${UST_FILTERS[$i]}&quot;<br />&gt; +<br />&gt; ++      if [ $skip_ust -eq 0 ]; then<br />&gt; ++              break<br />&gt; ++      fi<br />&gt; ++<br />&gt; +       if [ &quot;$validator&quot; = END ]; then<br />&gt; +               break<br />&gt; +       fi<br />&gt; +@@ -929,6 +936,10 @@ i=0<br />&gt; + while true; do<br />&gt; +       validator=&quot;${UST_STR_FILTERS[$i]}&quot;<br />&gt; +<br />&gt; ++      if [ $skip_ust -eq 0 ]; then<br />&gt; ++              break<br />&gt; ++      fi<br />&gt; ++<br />&gt; +       if [ &quot;$validator&quot; = END ]; then<br />&gt; +               break<br />&gt; +       fi<br />&gt; +diff --git a/tests/regression/tools/health/test_thread_ok b/tests/regression/tools/health/test_thread_ok<br />&gt; +index e81d6ed24..849b7e71f 100755<br />&gt; +--- a/tests/regression/tools/health/test_thread_ok<br />&gt; ++++ b/tests/regression/tools/health/test_thread_ok<br />&gt; +@@ -27,6 +27,9 @@ CHANNEL_NAME=&quot;testchan&quot;<br />&gt; + HEALTH_CHECK_BIN=&quot;health_check&quot;<br />&gt; + NUM_TESTS=17<br />&gt; + SLEEP_TIME=30<br />&gt; ++TESTAPP_PATH=&quot;$TESTDIR/utils/testapp&quot;<br />&gt; ++TESTAPP_NAME=&quot;gen-ust-events&quot;<br />&gt; ++TESTAPP_BIN=&quot;$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME&quot;<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +@@ -76,15 +79,19 @@ function test_thread_ok<br />&gt; +       $CURDIR/$HEALTH_CHECK_BIN &gt; ${STDOUT_PATH} 2&gt; ${STDERR_PATH}<br />&gt; +       report_errors<br />&gt; +<br />&gt; +-      diag &quot;With UST consumer daemons&quot;<br />&gt; +-      create_lttng_session_no_output $SESSION_NAME<br />&gt; +-      enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME<br />&gt; +-      start_lttng_tracing_ok $SESSION_NAME<br />&gt; +-      destroy_lttng_session_ok $SESSION_NAME<br />&gt; ++      skip $skip_ust &quot;Ust does not seems to be supported&quot; &quot;5&quot; ||<br />&gt; ++      {<br />&gt; ++              diag &quot;With UST consumer daemons&quot;<br />&gt; ++              create_lttng_session_no_output $SESSION_NAME<br />&gt; ++              enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME $CHANNEL_NAME<br />&gt; ++              start_lttng_tracing_ok $SESSION_NAME<br />&gt; ++              destroy_lttng_session_ok $SESSION_NAME<br />&gt; +<br />&gt; +-      # Check health status<br />&gt; +-      $CURDIR/$HEALTH_CHECK_BIN &gt; ${STDOUT_PATH} 2&gt; ${STDERR_PATH}<br />&gt; +-      report_errors<br />&gt; ++<br />&gt; ++              # Check health status<br />&gt; ++              $CURDIR/$HEALTH_CHECK_BIN &gt; ${STDOUT_PATH} 2&gt; ${STDERR_PATH}<br />&gt; ++              report_errors<br />&gt; ++      }<br />&gt; +<br />&gt; +       skip $isroot &quot;Root access is needed. Skipping kernel consumer health check test.&quot; &quot;5&quot; ||<br />&gt; +       {<br />&gt; +@@ -141,6 +148,12 @@ else<br />&gt; +       isroot=0<br />&gt; + fi<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      skip_ust=0<br />&gt; ++else<br />&gt; ++      skip_ust=1<br />&gt; ++fi<br />&gt; ++<br />&gt; + test_thread_ok<br />&gt; +<br />&gt; + rm -rf ${HEALTH_PATH}<br />&gt; +diff --git a/tests/regression/tools/live/Makefile.am b/tests/regression/tools/live/Makefile.am<br />&gt; +index 46186d383..db74de8d5 100644<br />&gt; +--- a/tests/regression/tools/live/Makefile.am<br />&gt; ++++ b/tests/regression/tools/live/Makefile.am<br />&gt; +@@ -16,9 +16,7 @@ LIVE=$(top_builddir)/src/bin/lttng-sessiond/session.$(OBJEXT) \<br />&gt; + noinst_PROGRAMS = live_test<br />&gt; + EXTRA_DIST = test_kernel test_lttng_kernel<br />&gt; +<br />&gt; +-if HAVE_LIBLTTNG_UST_CTL<br />&gt; + EXTRA_DIST += test_ust test_ust_tracefile_count test_lttng_ust<br />&gt; +-endif<br />&gt; +<br />&gt; + live_test_SOURCES = live_test.c<br />&gt; + live_test_LDADD = $(LIBTAP) $(LIBCOMMON) $(LIBRELAYD) $(LIBSESSIOND_COMM) \<br />&gt; +diff --git a/tests/regression/tools/live/test_lttng_ust b/tests/regression/tools/live/test_lttng_ust<br />&gt; +index 06017d01d..be9b3d7f7 100755<br />&gt; +--- a/tests/regression/tools/live/test_lttng_ust<br />&gt; ++++ b/tests/regression/tools/live/test_lttng_ust<br />&gt; +@@ -38,6 +38,10 @@ NUM_TESTS=12<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + # MUST set TESTDIR before calling those functions<br />&gt; + plan_tests $NUM_TESTS<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/live/test_ust b/tests/regression/tools/live/test_ust<br />&gt; +index 0384a706f..add521bfc 100755<br />&gt; +--- a/tests/regression/tools/live/test_ust<br />&gt; ++++ b/tests/regression/tools/live/test_ust<br />&gt; +@@ -36,6 +36,10 @@ DIR=$(readlink -f $TESTDIR)<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + echo &quot;$TEST_DESC&quot;<br />&gt; +<br />&gt; + function setup_live_tracing()<br />&gt; +diff --git a/tests/regression/tools/live/test_ust_tracefile_count b/tests/regression/tools/live/test_ust_tracefile_count<br />&gt; +index 6da368fc6..10504f8c6 100755<br />&gt; +--- a/tests/regression/tools/live/test_ust_tracefile_count<br />&gt; ++++ b/tests/regression/tools/live/test_ust_tracefile_count<br />&gt; +@@ -36,6 +36,10 @@ DIR=$(readlink -f $TESTDIR)<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + echo &quot;$TEST_DESC&quot;<br />&gt; +<br />&gt; + function setup_live_tracing()<br />&gt; +diff --git a/tests/regression/tools/mi/test_mi b/tests/regression/tools/mi/test_mi<br />&gt; +index 48dda7da6..2cc30b29a 100755<br />&gt; +--- a/tests/regression/tools/mi/test_mi<br />&gt; ++++ b/tests/regression/tools/mi/test_mi<br />&gt; +@@ -61,6 +61,10 @@ NUM_TESTS=228<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + #Overwrite the lttng_bin to get mi output<br />&gt; + LTTNG_BIN=&quot;lttng --mi xml&quot;<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/notification/test_notification_multi_app b/tests/regression/tools/notification/test_notification_multi_app<br />&gt; +index 0a05ea6a0..29b0f62fa 100755<br />&gt; +--- a/tests/regression/tools/notification/test_notification_multi_app<br />&gt; ++++ b/tests/regression/tools/notification/test_notification_multi_app<br />&gt; +@@ -52,6 +52,11 @@ plan_tests $NUM_TESTS<br />&gt; +<br />&gt; + print_test_banner &quot;$TEST_DESC&quot;<br />&gt; +<br />&gt; ++skip_ust=1<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      skip_ust=0<br />&gt; ++fi<br />&gt; ++<br />&gt; + app_pids=()<br />&gt; +<br />&gt; + function kernel_event_generator_toogle_state<br />&gt; +@@ -468,10 +473,15 @@ function test_on_register_evaluation ()<br />&gt; + }<br />&gt; +<br />&gt; +<br />&gt; +-TESTS=(<br />&gt; +-      test_multi_app_ust<br />&gt; +-      test_on_register_evaluation_ust<br />&gt; +-)<br />&gt; ++TESTS=()<br />&gt; ++if [ $skip_ust -eq &quot;1&quot; ]; then<br />&gt; ++      TESTS+=(<br />&gt; ++              test_multi_app_ust<br />&gt; ++              test_on_register_evaluation_ust<br />&gt; ++      )<br />&gt; ++else<br />&gt; ++      skip 0 &quot;No UST events binary detected.&quot; $NUM_TEST_UST<br />&gt; ++fi<br />&gt; +<br />&gt; + if [ &quot;$(id -u)&quot; == &quot;0&quot; ]; then<br />&gt; +       TESTS+=(<br />&gt; +diff --git a/tests/regression/tools/notification/test_notification_ust b/tests/regression/tools/notification/test_notification_ust<br />&gt; +index 8941e476d..eb2e15cad 100755<br />&gt; +--- a/tests/regression/tools/notification/test_notification_ust<br />&gt; ++++ b/tests/regression/tools/notification/test_notification_ust<br />&gt; +@@ -46,6 +46,10 @@ DIR=$(readlink -f $TESTDIR)<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + function ust_event_generator_toogle_state<br />&gt; + {<br />&gt; +       ust_event_generator_suspended=$((ust_event_generator_suspended==0))<br />&gt; +diff --git a/tests/regression/tools/regen-metadata/test_ust b/tests/regression/tools/regen-metadata/test_ust<br />&gt; +index b7f1af1d8..312c8a40d 100755<br />&gt; +--- a/tests/regression/tools/regen-metadata/test_ust<br />&gt; ++++ b/tests/regression/tools/regen-metadata/test_ust<br />&gt; +@@ -34,7 +34,7 @@ NUM_TESTS=33<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function lttng_create_session_uri<br />&gt; +diff --git a/tests/regression/tools/regen-statedump/test_ust b/tests/regression/tools/regen-statedump/test_ust<br />&gt; +index 486b9a560..8d455b26a 100755<br />&gt; +--- a/tests/regression/tools/regen-statedump/test_ust<br />&gt; ++++ b/tests/regression/tools/regen-statedump/test_ust<br />&gt; +@@ -34,7 +34,7 @@ NUM_TESTS=11<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function test_ust_local ()<br />&gt; +diff --git a/tests/regression/tools/save-load/test_autoload b/tests/regression/tools/save-load/test_autoload<br />&gt; +index 7ee5e9906..ec376cfb3 100755<br />&gt; +--- a/tests/regression/tools/save-load/test_autoload<br />&gt; ++++ b/tests/regression/tools/save-load/test_autoload<br />&gt; +@@ -21,6 +21,9 @@ CURDIR=$(dirname $0)/<br />&gt; + CONFIG_DIR=&quot;${CURDIR}/configuration&quot;<br />&gt; + TESTDIR=$CURDIR/../../../<br />&gt; + export LTTNG_SESSION_CONFIG_XSD_PATH=$(readlink -m ${TESTDIR}../src/common/config/)<br />&gt; ++TESTAPP_PATH=&quot;$TESTDIR/utils/testapp&quot;<br />&gt; ++TESTAPP_NAME=&quot;gen-ust-events&quot;<br />&gt; ++TESTAPP_BIN=&quot;$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME&quot;<br />&gt; +<br />&gt; + DIR=$(readlink -f $TESTDIR)<br />&gt; +<br />&gt; +@@ -28,6 +31,10 @@ NUM_TESTS=9<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + # MUST set TESTDIR before calling those functions<br />&gt; + plan_tests $NUM_TESTS<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/save-load/test_load b/tests/regression/tools/save-load/test_load<br />&gt; +index 5e38b46b6..b6fdd8192 100755<br />&gt; +--- a/tests/regression/tools/save-load/test_load<br />&gt; ++++ b/tests/regression/tools/save-load/test_load<br />&gt; +@@ -20,6 +20,10 @@ TEST_DESC=&quot;Load session(s)&quot;<br />&gt; + CURDIR=$(dirname $0)/<br />&gt; + CONFIG_DIR=&quot;${CURDIR}/configuration&quot;<br />&gt; + TESTDIR=$CURDIR/../../../<br />&gt; ++TESTAPP_PATH=&quot;$TESTDIR/utils/testapp&quot;<br />&gt; ++TESTAPP_NAME=&quot;gen-ust-events&quot;<br />&gt; ++TESTAPP_BIN=&quot;$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME&quot;<br />&gt; ++<br />&gt; + export LTTNG_SESSION_CONFIG_XSD_PATH=$(readlink -m ${TESTDIR}../src/common/config/)<br />&gt; +<br />&gt; + SESSION_NAME=&quot;load-42&quot;<br />&gt; +@@ -31,6 +35,10 @@ NUM_TESTS=67<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + # MUST set TESTDIR before calling those functions<br />&gt; + plan_tests $NUM_TESTS<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/save-load/test_save b/tests/regression/tools/save-load/test_save<br />&gt; +index c5f6b1341..cfaf67b7a 100755<br />&gt; +--- a/tests/regression/tools/save-load/test_save<br />&gt; ++++ b/tests/regression/tools/save-load/test_save<br />&gt; +@@ -23,6 +23,9 @@ TESTDIR=$CURDIR/../../../<br />&gt; + SESSION_NAME=&quot;save-42&quot;<br />&gt; + CHANNEL_NAME=&quot;chan-save&quot;<br />&gt; + EVENT_NAME=&quot;tp:tptest&quot;<br />&gt; ++TESTAPP_PATH=&quot;$TESTDIR/utils/testapp&quot;<br />&gt; ++TESTAPP_NAME=&quot;gen-ust-events&quot;<br />&gt; ++TESTAPP_BIN=&quot;$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME&quot;<br />&gt; +<br />&gt; + DIR=$(readlink -f $TESTDIR)<br />&gt; +<br />&gt; +@@ -30,6 +33,10 @@ NUM_TESTS=41<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; ++if [ ! -x &quot;TESTAPP_BIN&quot; ]; then<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; ++fi<br />&gt; ++<br />&gt; + # MUST set TESTDIR before calling those functions<br />&gt; + plan_tests $NUM_TESTS<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/snapshots/test_ust_fast b/tests/regression/tools/snapshots/test_ust_fast<br />&gt; +index edb435c52..5a68ec56d 100755<br />&gt; +--- a/tests/regression/tools/snapshots/test_ust_fast<br />&gt; ++++ b/tests/regression/tools/snapshots/test_ust_fast<br />&gt; +@@ -23,7 +23,7 @@ TEST_BIN=&quot;ust_test&quot;<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$CURDIR/$TEST_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST test found: $TEST_BIN&quot;<br />&gt; ++      plan_skip_all &quot;No UST test found: $TEST_BIN&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + ./$CURDIR/$TEST_BIN $NR_SNAPSHOT<br />&gt; +diff --git a/tests/regression/tools/snapshots/test_ust_long b/tests/regression/tools/snapshots/test_ust_long<br />&gt; +index 9e1a0c262..afa019f6a 100755<br />&gt; +--- a/tests/regression/tools/snapshots/test_ust_long<br />&gt; ++++ b/tests/regression/tools/snapshots/test_ust_long<br />&gt; +@@ -23,7 +23,7 @@ TEST_BIN=&quot;ust_test&quot;<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$CURDIR/$TEST_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST test found: $TEST_BIN&quot;<br />&gt; ++      plan_skip_all &quot;No UST test found: $TEST_BIN&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + ./$CURDIR/$TEST_BIN $NR_SNAPSHOT<br />&gt; +diff --git a/tests/regression/tools/snapshots/test_ust_streaming b/tests/regression/tools/snapshots/test_ust_streaming<br />&gt; +index 93b0957f3..69291ab4d 100755<br />&gt; +--- a/tests/regression/tools/snapshots/test_ust_streaming<br />&gt; ++++ b/tests/regression/tools/snapshots/test_ust_streaming<br />&gt; +@@ -37,7 +37,7 @@ NUM_TESTS=75<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function snapshot_add_output ()<br />&gt; +diff --git a/tests/regression/tools/snapshots/ust_test b/tests/regression/tools/snapshots/ust_test<br />&gt; +index 755cef9e0..92f9f6cff 100755<br />&gt; +--- a/tests/regression/tools/snapshots/ust_test<br />&gt; ++++ b/tests/regression/tools/snapshots/ust_test<br />&gt; +@@ -34,7 +34,7 @@ TRACE_PATH=$(mktemp -d)<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + # Need the number of snapshot to do.<br />&gt; +diff --git a/tests/regression/tools/streaming/test_high_throughput_limits b/tests/regression/tools/streaming/test_high_throughput_limits<br />&gt; +index 32c3f1f2b..f54178923 100755<br />&gt; +--- a/tests/regression/tools/streaming/test_high_throughput_limits<br />&gt; ++++ b/tests/regression/tools/streaming/test_high_throughput_limits<br />&gt; +@@ -38,7 +38,7 @@ NUM_TESTS=104<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function set_bw_limit<br />&gt; +diff --git a/tests/regression/tools/streaming/test_ust b/tests/regression/tools/streaming/test_ust<br />&gt; +index a5d5b5e92..e1dd98ee7 100755<br />&gt; +--- a/tests/regression/tools/streaming/test_ust<br />&gt; ++++ b/tests/regression/tools/streaming/test_ust<br />&gt; +@@ -34,7 +34,7 @@ NUM_TESTS=16<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function lttng_create_session_uri<br />&gt; +diff --git a/tests/regression/tools/tracefile-limits/test_tracefile_count b/tests/regression/tools/tracefile-limits/test_tracefile_count<br />&gt; +index 6ada8580f..7553c7d1f 100755<br />&gt; +--- a/tests/regression/tools/tracefile-limits/test_tracefile_count<br />&gt; ++++ b/tests/regression/tools/tracefile-limits/test_tracefile_count<br />&gt; +@@ -33,7 +33,7 @@ PAGE_SIZE=$(getconf PAGE_SIZE)<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function enable_lttng_channel_count_limit ()<br />&gt; +diff --git a/tests/regression/tools/tracefile-limits/test_tracefile_size b/tests/regression/tools/tracefile-limits/test_tracefile_size<br />&gt; +index 3dddbe613..1089487ff 100755<br />&gt; +--- a/tests/regression/tools/tracefile-limits/test_tracefile_size<br />&gt; ++++ b/tests/regression/tools/tracefile-limits/test_tracefile_size<br />&gt; +@@ -33,7 +33,7 @@ NUM_TESTS=66<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST events binary detected.&quot;<br />&gt; ++      plan_skip_all &quot;No UST events binary detected.&quot;<br />&gt; + fi<br />&gt; +<br />&gt; + function enable_lttng_channel_size_limit ()<br />&gt; +diff --git a/tests/regression/tools/wildcard/test_event_wildcard b/tests/regression/tools/wildcard/test_event_wildcard<br />&gt; +index 61ea67a72..921a2301d 100755<br />&gt; +--- a/tests/regression/tools/wildcard/test_event_wildcard<br />&gt; ++++ b/tests/regression/tools/wildcard/test_event_wildcard<br />&gt; +@@ -97,42 +97,47 @@ print_test_banner &quot;$TEST_DESC&quot;<br />&gt; +<br />&gt; + start_lttng_sessiond<br />&gt; +<br />&gt; +-diag &quot;Test UST wildcard&quot;<br />&gt; +-<br />&gt; + if [ ! -x &quot;$TESTAPP_BIN&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;No UST nevents binary detected.&quot;<br />&gt; ++      skip_ust=0<br />&gt; ++else<br />&gt; ++      skip_ust=1<br />&gt; + fi<br />&gt; +<br />&gt; +-EVENT_NAME=&quot;tp:tptest&quot;<br />&gt; ++skip $skip_ust &quot;No UST nevents binary detected.&quot; $NUM_UST_TESTS ||<br />&gt; ++{<br />&gt; ++      diag &quot;Test UST wildcard&quot;<br />&gt; +<br />&gt; +-# non-matching<br />&gt; +-test_event_wildcard ust 0 &#039;tp:abc*&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;*abc&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;*z*&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;*\**&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;*\*&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;\**&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;*:*tpte*s&#039;<br />&gt; +-test_event_wildcard ust 0 &#039;tp**tpTest&#039;<br />&gt; ++      EVENT_NAME=&quot;tp:tptest&quot;<br />&gt; +<br />&gt; +-# matching<br />&gt; +-test_event_wildcard ust 1 &#039;tp:tp*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;tp:tptest*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;**&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;***&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*tptest&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;**tptest&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*tpte*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*tp*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*tp**&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*:*tptest&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*:*tpte*t&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;t*p*:*t*e*s*t&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;*t*p*:*t*e*s*t*&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;tp*tptest&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;tp**tptest&#039;<br />&gt; +-test_event_wildcard ust 1 &#039;tp*test&#039;<br />&gt; ++      # non-matching<br />&gt; ++      test_event_wildcard ust 0 &#039;tp:abc*&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;*abc&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;*z*&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;*\**&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;*\*&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;\**&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;*:*tpte*s&#039;<br />&gt; ++      test_event_wildcard ust 0 &#039;tp**tpTest&#039;<br />&gt; ++<br />&gt; ++      # matching<br />&gt; ++      test_event_wildcard ust 1 &#039;tp:tp*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;tp:tptest*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;**&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;***&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*tptest&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;**tptest&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*tpte*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*tp*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*tp**&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*:*tptest&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*:*tpte*t&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;t*p*:*t*e*s*t&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;*t*p*:*t*e*s*t*&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;tp*tptest&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;tp**tptest&#039;<br />&gt; ++      test_event_wildcard ust 1 &#039;tp*test&#039;<br />&gt; ++}<br />&gt; +<br />&gt; + if [ &quot;$(id -u)&quot; == &quot;0&quot; ]; then<br />&gt; +       isroot=1<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..16df3e610a<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch<br />&gt; @@ -0,0 +1,176 @@<br />&gt; +From 9bc81a446d0a3ea9a884739eee48d3f14db3283c Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Wed, 28 Mar 2018 15:21:26 -0400<br />&gt; +Subject: [PATCH lttng-tools] Tests: use modprobe to test for the presence of<br />&gt; + lttng-modules<br />&gt; +MIME-Version: 1.0<br />&gt; +Content-Type: text/plain; charset=UTF-8<br />&gt; +Content-Transfer-Encoding: 8bit<br />&gt; +<br />&gt; +Upstream-Status: Backport [28702730192ae1ded06105c54c5dc]<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Signed-off-by: Jérémie Galarneau &lt;jeremie.galarneau@efficios.com&gt;<br />&gt; +---<br />&gt; + tests/regression/tools/regen-metadata/test_kernel      |  8 ++------<br />&gt; + tests/regression/tools/regen-statedump/test_kernel     |  7 +------<br />&gt; + tests/regression/tools/snapshots/test_kernel           |  9 +++------<br />&gt; + tests/regression/tools/snapshots/test_kernel_streaming |  8 ++------<br />&gt; + tests/regression/tools/streaming/test_kernel           |  8 ++------<br />&gt; + tests/utils/utils.sh                                   | 10 ++++++++++<br />&gt; + 6 files changed, 20 insertions(+), 30 deletions(-)<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/regen-metadata/test_kernel b/tests/regression/tools/regen-metadata/test_kernel<br />&gt; +index fd139aeef..1849b9cd0 100755<br />&gt; +--- a/tests/regression/tools/regen-metadata/test_kernel<br />&gt; ++++ b/tests/regression/tools/regen-metadata/test_kernel<br />&gt; +@@ -28,12 +28,6 @@ NUM_TESTS=18<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +-# LTTng kernel modules check<br />&gt; +-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`<br />&gt; +-if [ -z &quot;$out&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; +-fi<br />&gt; +-<br />&gt; + function lttng_create_session_uri<br />&gt; + {<br />&gt; +       # Create session with default path<br />&gt; +@@ -91,6 +85,8 @@ fi<br />&gt; +<br />&gt; + skip $isroot &quot;Root access is needed. Skipping all kernel streaming tests.&quot; $NUM_TESTS ||<br />&gt; + {<br />&gt; ++      validate_lttng_modules_present<br />&gt; ++<br />&gt; +       start_lttng_relayd &quot;-o $TRACE_PATH&quot;<br />&gt; +       start_lttng_sessiond<br />&gt; +       modprobe lttng-test<br />&gt; +diff --git a/tests/regression/tools/regen-statedump/test_kernel b/tests/regression/tools/regen-statedump/test_kernel<br />&gt; +index 85afe76a1..50054eb07 100755<br />&gt; +--- a/tests/regression/tools/regen-statedump/test_kernel<br />&gt; ++++ b/tests/regression/tools/regen-statedump/test_kernel<br />&gt; +@@ -29,12 +29,6 @@ NUM_TESTS=11<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +-# LTTng kernel modules check<br />&gt; +-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`<br />&gt; +-if [ -z &quot;$out&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; +-fi<br />&gt; +-<br />&gt; + function test_kernel_local ()<br />&gt; + {<br />&gt; +       diag &quot;Test kernel local with statedump regeneration&quot;<br />&gt; +@@ -64,6 +58,7 @@ fi<br />&gt; +<br />&gt; + skip $isroot &quot;Root access is needed. Skipping all kernel streaming tests.&quot; $NUM_TESTS ||<br />&gt; + {<br />&gt; ++      validate_lttng_modules_present<br />&gt; +       start_lttng_sessiond<br />&gt; +       modprobe lttng-test<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/snapshots/test_kernel b/tests/regression/tools/snapshots/test_kernel<br />&gt; +index 886c4557a..ff563100b 100755<br />&gt; +--- a/tests/regression/tools/snapshots/test_kernel<br />&gt; ++++ b/tests/regression/tools/snapshots/test_kernel<br />&gt; +@@ -29,12 +29,6 @@ NUM_TESTS=2060<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +-# LTTng kernel modules check<br />&gt; +-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`<br />&gt; +-if [ -z &quot;$out&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; +-fi<br />&gt; +-<br />&gt; + function test_kernel_local_snapshot ()<br />&gt; + {<br />&gt; +       diag &quot;Test local kernel snapshots&quot;<br />&gt; +@@ -241,6 +235,9 @@ fi<br />&gt; +<br />&gt; + skip $isroot &quot;Root access is needed. Skipping all kernel snapshot tests.&quot; $NUM_TESTS ||<br />&gt; + {<br />&gt; ++<br />&gt; ++      validate_lttng_modules_present<br />&gt; ++<br />&gt; +       start_lttng_sessiond<br />&gt; +<br />&gt; +       #tests=( test_kernel_1000_local_snapshots )<br />&gt; +diff --git a/tests/regression/tools/snapshots/test_kernel_streaming b/tests/regression/tools/snapshots/test_kernel_streaming<br />&gt; +index 7b96ef270..1d97519aa 100755<br />&gt; +--- a/tests/regression/tools/snapshots/test_kernel_streaming<br />&gt; ++++ b/tests/regression/tools/snapshots/test_kernel_streaming<br />&gt; +@@ -29,12 +29,6 @@ NUM_TESTS=61<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +-# LTTng kernel modules check<br />&gt; +-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`<br />&gt; +-if [ -z &quot;$out&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; +-fi<br />&gt; +-<br />&gt; + function snapshot_add_output ()<br />&gt; + {<br />&gt; +       local sess_name=$1<br />&gt; +@@ -169,6 +163,8 @@ fi<br />&gt; +<br />&gt; + skip $isroot &quot;Root access is needed. Skipping all kernel streaming tests.&quot; $NUM_TESTS ||<br />&gt; + {<br />&gt; ++      validate_lttng_modules_present<br />&gt; ++<br />&gt; +       start_lttng_relayd &quot;-o $TRACE_PATH&quot;<br />&gt; +       start_lttng_sessiond<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/streaming/test_kernel b/tests/regression/tools/streaming/test_kernel<br />&gt; +index d54bcedf5..6bb23d9f5 100755<br />&gt; +--- a/tests/regression/tools/streaming/test_kernel<br />&gt; ++++ b/tests/regression/tools/streaming/test_kernel<br />&gt; +@@ -28,12 +28,6 @@ NUM_TESTS=10<br />&gt; +<br />&gt; + source $TESTDIR/utils/utils.sh<br />&gt; +<br />&gt; +-# LTTng kernel modules check<br />&gt; +-out=`ls /lib/modules/$(uname -r)/extra | grep lttng`<br />&gt; +-if [ -z &quot;$out&quot; ]; then<br />&gt; +-      BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; +-fi<br />&gt; +-<br />&gt; + function lttng_create_session_uri<br />&gt; + {<br />&gt; +       # Create session with default path<br />&gt; +@@ -80,6 +74,8 @@ fi<br />&gt; +<br />&gt; + skip $isroot &quot;Root access is needed. Skipping all kernel streaming tests.&quot; $NUM_TESTS ||<br />&gt; + {<br />&gt; ++      validate_lttng_modules_present<br />&gt; ++<br />&gt; +       start_lttng_relayd &quot;-o $TRACE_PATH&quot;<br />&gt; +       start_lttng_sessiond<br />&gt; +<br />&gt; +diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh<br />&gt; +index af63824ce..26e59e383 100644<br />&gt; +--- a/tests/utils/utils.sh<br />&gt; ++++ b/tests/utils/utils.sh<br />&gt; +@@ -125,6 +125,16 @@ function conf_proc_count()<br />&gt; +       echo<br />&gt; + }<br />&gt; +<br />&gt; ++# Check if base lttng-modules are present.<br />&gt; ++# Bail out on failure<br />&gt; ++function validate_lttng_modules_present ()<br />&gt; ++{<br />&gt; ++      modprobe -n lttng-tracer 2&gt;/dev/null<br />&gt; ++      if [ $? -ne 0  ]; then<br />&gt; ++              BAIL_OUT &quot;LTTng modules not detected.&quot;<br />&gt; ++      fi<br />&gt; ++}<br />&gt; ++<br />&gt; + function enable_kernel_lttng_event<br />&gt; + {<br />&gt; +       local withtap=&quot;$1&quot;<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..e07c227f46<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0006-Tests-check-for-lttng-modules-presence.patch<br />&gt; @@ -0,0 +1,28 @@<br />&gt; +From 92f93238f1df005aadc98e105c0dd0e04a5955a7 Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Mon, 25 Mar 2019 14:24:51 -0400<br />&gt; +Subject: [2/2] tests: check for lttng-modules presence<br />&gt; +<br />&gt; +Upstream-status: Accepted [5da3fc8579a9f93ea4767729a107784bf2d034ae]<br />&gt; +Backported to 2.11 and 2.10<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +---<br />&gt; + tests/regression/tools/notification/test_notification_kernel | 1 +<br />&gt; + 1 file changed, 1 insertion(+)<br />&gt; +<br />&gt; +diff --git a/tests/regression/tools/notification/test_notification_kernel b/tests/regression/tools/notification/test_notification_kernel<br />&gt; +index 6d7f256ae..e7368df26 100755<br />&gt; +--- a/tests/regression/tools/notification/test_notification_kernel<br />&gt; ++++ b/tests/regression/tools/notification/test_notification_kernel<br />&gt; +@@ -108,6 +108,7 @@ function kernel_test<br />&gt; + }<br />&gt; +<br />&gt; + if [ &quot;$(id -u)&quot; == &quot;0&quot; ]; then<br />&gt; ++      validate_lttng_modules_present<br />&gt; +       kernel_test<br />&gt; + else<br />&gt; +       # Kernel tests are skipped.<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; 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<br />&gt; new file mode 100644<br />&gt; index 0000000000..5437de26e8<br />&gt; --- /dev/null<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools/0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch<br />&gt; @@ -0,0 +1,345 @@<br />&gt; +From 10e8001ad876d8cb3b5a17c7492e713bbc047975 Mon Sep 17 00:00:00 2001<br />&gt; +From: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +Date: Thu, 28 Mar 2019 18:31:29 -0400<br />&gt; +Subject: [PATCH] Fix: getgrnam is not MT-Safe, use getgrnam_r<br />&gt; +<br />&gt; +Running the test suite under a Yocto musl build resulted in musl<br />&gt; +coredump due to double freeing.<br />&gt; +<br />&gt; +We get the following backtraces:<br />&gt; +<br />&gt; +0  a_crash () at ./arch/x86_64/atomic_arch.h:108<br />&gt; +1  unmap_chunk (self=&lt;optimized out&gt;) at src/malloc/malloc.c:515<br />&gt; +2  free (p=&lt;optimized out&gt;) at src/malloc/malloc.c:526<br />&gt; +3  0x00007f46d9dc3849 in __getgrent_a (f=f@entry=0x7f46d9d1f7e0, gr=gr@entry=0x7f46d9e24460 &lt;gr&gt;, line=line@entry=0x7f46d9e26058 &lt;line&gt;, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 &lt;mem&gt;, nmem=nmem@entry=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgrent_a.c:45<br />&gt; +4  0x00007f46d9dc2e6b in __getgr_a (name=0x487242 &quot;tracing&quot;, gid=gid@entry=0, gr=gr@entry=0x7f46d9e24460 &lt;gr&gt;, buf=buf@entry=0x7f46d9e26058 &lt;line&gt;, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 &lt;mem&gt;, nmem=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgr_a.c:30<br />&gt; +5  0x00007f46d9dc3733 in getgrnam (name=&lt;optimized out&gt;) at src/passwd/getgrent.c:37<br />&gt; +6  0x0000000000460b29 in utils_get_group_id (name=&lt;optimized out&gt;) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241<br />&gt; +7  0x000000000044ee69 in thread_manage_health (data=&lt;optimized out&gt;) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/main.c:4115<br />&gt; +8  0x00007f46d9de1541 in start (p=&lt;optimized out&gt;) at src/thread/pthread_create.c:195<br />&gt; +9  0x00007f46d9dee661 in __clone () at src/thread/x86_64/clone.s:22<br />&gt; +<br />&gt; +From another run:<br />&gt; +<br />&gt; +0  a_crash () at ./arch/x86_64/atomic_arch.h:108<br />&gt; +1  unmap_chunk (self=&lt;optimized out&gt;) at src/malloc/malloc.c:515<br />&gt; +2  free (p=&lt;optimized out&gt;) at src/malloc/malloc.c:526<br />&gt; +3  0x00007f5abc210849 in __getgrent_a (f=f@entry=0x7f5abc2733e0, gr=gr@entry=0x7f5abc271460 &lt;gr&gt;, line=line@entry=0x7f5abc273058 &lt;line&gt;, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 &lt;mem&gt;, nmem=nmem@entry=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgrent_a.c:45<br />&gt; +4  0x00007f5abc20fe6b in __getgr_a (name=0x487242 &quot;tracing&quot;, gid=gid@entry=0, gr=gr@entry=0x7f5abc271460 &lt;gr&gt;, buf=buf@entry=0x7f5abc273058 &lt;line&gt;, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 &lt;mem&gt;, nmem=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgr_a.c:30<br />&gt; +5  0x00007f5abc210733 in getgrnam (name=&lt;optimized out&gt;) at src/passwd/getgrent.c:37<br />&gt; +6  0x0000000000460b29 in utils_get_group_id (name=&lt;optimized out&gt;) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241<br />&gt; +7  0x000000000042dee4 in notification_channel_socket_create () at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:238<br />&gt; +8  init_thread_state (state=0x7f5abaef5560, handle=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:375<br />&gt; +9  thread_notification (data=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:495<br />&gt; +10 0x00007f5abc22e541 in start (p=&lt;optimized out&gt;) at src/thread/pthread_create.c:195<br />&gt; +11 0x00007f5abc23b661 in __clone () at src/thread/x86_64/clone.s:22<br />&gt; +<br />&gt; +The problem was easily reproducible (~6 crash on ~300 runs). A prototype fix<br />&gt; +using mutex around the getgrnam yielded no crash in over 1000 runs. This<br />&gt; +patch yielded the same results as the prototype fix.<br />&gt; +<br />&gt; +Unfortunately we cannot rely on a mutex in liblttng-ctl since we cannot<br />&gt; +enforce the locking for the application using the lib.<br />&gt; +<br />&gt; +Use getgrnam_r instead.<br />&gt; +<br />&gt; +The previous implementation of utils_get_group_id returned the gid of<br />&gt; +the root group (0) on error/not found. lttng_check_tracing_group needs<br />&gt; +to know if an error/not found occured, returning the root group is not<br />&gt; +enough. We now return the gid via the passed parameter. The caller is<br />&gt; +responsible for either defaulting to the root group or propagating the<br />&gt; +error.<br />&gt; +<br />&gt; +We also do not want to warn when used in liblttng-ctl context. We might<br />&gt; +want to move the warning elsewhere in the future. For now, pass a bool<br />&gt; +if we need to warn or not.<br />&gt; +<br />&gt; +Signed-off-by: Jonathan Rajotte &lt;jonathan.rajotte-julien@efficios.com&gt;<br />&gt; +---<br />&gt; + src/bin/lttng-consumerd/health-consumerd.c   | 10 ++-<br />&gt; + src/bin/lttng-relayd/health-relayd.c         | 20 ++++--<br />&gt; + src/bin/lttng-sessiond/main.c                | 24 +++++--<br />&gt; + src/bin/lttng-sessiond/notification-thread.c | 10 ++-<br />&gt; + src/common/utils.c                           | 75 +++++++++++++++++---<br />&gt; + src/common/utils.h                           |  4 +-<br />&gt; + src/lib/lttng-ctl/lttng-ctl.c                |  8 +--<br />&gt; + 7 files changed, 122 insertions(+), 29 deletions(-)<br />&gt; +<br />&gt; +diff --git a/src/bin/lttng-consumerd/health-consumerd.c b/src/bin/lttng-consumerd/health-consumerd.c<br />&gt; +index 1e2f31e4..6045401a 100644<br />&gt; +--- a/src/bin/lttng-consumerd/health-consumerd.c<br />&gt; ++++ b/src/bin/lttng-consumerd/health-consumerd.c<br />&gt; +@@ -184,8 +184,14 @@ void *thread_manage_health(void *data)<br />&gt; +       is_root = !getuid();<br />&gt; +       if (is_root) {<br />&gt; +               /* lttng health client socket path permissions */<br />&gt; +-              ret = chown(health_unix_sock_path, 0,<br />&gt; +-                              utils_get_group_id(tracing_group_name));<br />&gt; ++              gid_t gid;<br />&gt; ++<br />&gt; ++              ret = utils_get_group_id(tracing_group_name, true, &amp;gid);<br />&gt; ++              if (ret) {<br />&gt; ++                      gid = 0; /* Default to root group. */<br />&gt; ++              }<br />&gt; ++<br />&gt; ++              ret = chown(health_unix_sock_path, 0, gid);<br />&gt; +               if (ret &lt; 0) {<br />&gt; +                       ERR(&quot;Unable to set group on %s&quot;, health_unix_sock_path);<br />&gt; +                       PERROR(&quot;chown&quot;);<br />&gt; +diff --git a/src/bin/lttng-relayd/health-relayd.c b/src/bin/lttng-relayd/health-relayd.c<br />&gt; +index ba996621..962e88c4 100644<br />&gt; +--- a/src/bin/lttng-relayd/health-relayd.c<br />&gt; ++++ b/src/bin/lttng-relayd/health-relayd.c<br />&gt; +@@ -105,8 +105,14 @@ static int create_lttng_rundir_with_perm(const char *rundir)<br />&gt; +               int is_root = !getuid();<br />&gt; +<br />&gt; +               if (is_root) {<br />&gt; +-                      ret = chown(rundir, 0,<br />&gt; +-                                      utils_get_group_id(tracing_group_name));<br />&gt; ++                      gid_t gid;<br />&gt; ++<br />&gt; ++                      ret = utils_get_group_id(tracing_group_name, true, &amp;gid);<br />&gt; ++                      if (ret) {<br />&gt; ++                              gid = 0; /* Default to root group.*/<br />&gt; ++                      }<br />&gt; ++<br />&gt; ++                      ret = chown(rundir, 0, gid);<br />&gt; +                       if (ret &lt; 0) {<br />&gt; +                               ERR(&quot;Unable to set group on %s&quot;, rundir);<br />&gt; +                               PERROR(&quot;chown&quot;);<br />&gt; +@@ -256,8 +262,14 @@ void *thread_manage_health(void *data)<br />&gt; +       is_root = !getuid();<br />&gt; +       if (is_root) {<br />&gt; +               /* lttng health client socket path permissions */<br />&gt; +-              ret = chown(health_unix_sock_path, 0,<br />&gt; +-                              utils_get_group_id(tracing_group_name));<br />&gt; ++              gid_t gid;<br />&gt; ++<br />&gt; ++              ret = utils_get_group_id(tracing_group_name, true, &amp;gid);<br />&gt; ++              if (ret) {<br />&gt; ++                      gid = 0; /* Default to root group */<br />&gt; ++              }<br />&gt; ++<br />&gt; ++              ret = chown(health_unix_sock_path, 0, gid);<br />&gt; +               if (ret &lt; 0) {<br />&gt; +                       ERR(&quot;Unable to set group on %s&quot;, health_unix_sock_path);<br />&gt; +                       PERROR(&quot;chown&quot;);<br />&gt; +diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c<br />&gt; +index fa6fa483..49307064 100644<br />&gt; +--- a/src/bin/lttng-sessiond/main.c<br />&gt; ++++ b/src/bin/lttng-sessiond/main.c<br />&gt; +@@ -4112,8 +4112,14 @@ static void *thread_manage_health(void *data)<br />&gt; +<br />&gt; +       if (is_root) {<br />&gt; +               /* lttng health client socket path permissions */<br />&gt; +-              ret = chown(config.health_unix_sock_path.value, 0,<br />&gt; +-                              utils_get_group_id(config.tracing_group_name.value));<br />&gt; ++              gid_t gid;<br />&gt; ++<br />&gt; ++              ret = utils_get_group_id(config.tracing_group_name.value, true, &amp;gid);<br />&gt; ++              if (ret) {<br />&gt; ++                      gid = 0; /* Default to root group */<br />&gt; ++              }<br />&gt; ++<br />&gt; ++              ret = chown(config.health_unix_sock_path.value, 0, &amp;gid);<br />&gt; +               if (ret &lt; 0) {<br />&gt; +                       ERR(&quot;Unable to set group on %s&quot;, config.health_unix_sock_path.value);<br />&gt; +                       PERROR(&quot;chown&quot;);<br />&gt; +@@ -5238,7 +5244,10 @@ static int set_permissions(char *rundir)<br />&gt; +       int ret;<br />&gt; +       gid_t gid;<br />&gt; +<br />&gt; +-      gid = utils_get_group_id(config.tracing_group_name.value);<br />&gt; ++      ret = utils_get_group_id(config.tracing_group_name.value, true, &amp;gid);<br />&gt; ++      if (ret) {<br />&gt; ++              gid = 0; /* Default to root group */<br />&gt; ++      }<br />&gt; +<br />&gt; +       /* Set lttng run dir */<br />&gt; +       ret = chown(rundir, 0, gid);<br />&gt; +@@ -5349,7 +5358,14 @@ static int set_consumer_sockets(struct consumer_data *consumer_data)<br />&gt; +               goto error;<br />&gt; +       }<br />&gt; +       if (is_root) {<br />&gt; +-              ret = chown(path, 0, utils_get_group_id(config.tracing_group_name.value));<br />&gt; ++              gid_t gid;<br />&gt; ++<br />&gt; ++              ret = utils_get_group_id(config.tracing_group_name.value, true, &amp;gid);<br />&gt; ++              if (ret) {<br />&gt; ++                      gid = 0; /* Default to root group */<br />&gt; ++              }<br />&gt; ++<br />&gt; ++              ret = chown(path, 0, gid);<br />&gt; +               if (ret &lt; 0) {<br />&gt; +                       ERR(&quot;Unable to set group on %s&quot;, path);<br />&gt; +                       PERROR(&quot;chown&quot;);<br />&gt; +diff --git a/src/bin/lttng-sessiond/notification-thread.c b/src/bin/lttng-sessiond/notification-thread.c<br />&gt; +index 92ac597f..18a264d9 100644<br />&gt; +--- a/src/bin/lttng-sessiond/notification-thread.c<br />&gt; ++++ b/src/bin/lttng-sessiond/notification-thread.c<br />&gt; +@@ -235,8 +235,14 @@ int notification_channel_socket_create(void)<br />&gt; +       }<br />&gt; +<br />&gt; +       if (getuid() == 0) {<br />&gt; +-              ret = chown(sock_path, 0,<br />&gt; +-                              utils_get_group_id(config.tracing_group_name.value));<br />&gt; ++              gid_t gid;<br />&gt; ++<br />&gt; ++              ret =  utils_get_group_id(config.tracing_group_name.value, true, &amp;gid);<br />&gt; ++              if (ret) {<br />&gt; ++                      gid = 0; /* Default to root group. */<br />&gt; ++              }<br />&gt; ++<br />&gt; ++              ret = chown(sock_path, 0, gid);<br />&gt; +               if (ret) {<br />&gt; +                       ERR(&quot;Failed to set the notification channel socket&#039;s group&quot;);<br />&gt; +                       ret = -1;<br />&gt; +diff --git a/src/common/utils.c b/src/common/utils.c<br />&gt; +index c0bb031e..778bc00f 100644<br />&gt; +--- a/src/common/utils.c<br />&gt; ++++ b/src/common/utils.c<br />&gt; +@@ -1231,24 +1231,77 @@ size_t utils_get_current_time_str(const char *format, char *dst, size_t len)<br />&gt; + }<br />&gt; +<br />&gt; + /*<br />&gt; +- * Return the group ID matching name, else 0 if it cannot be found.<br />&gt; ++ * Return 0 on success and set *gid to the group_ID matching the passed name.<br />&gt; ++ * Else -1 if it cannot be found or an error occurred.<br />&gt; +  */<br />&gt; + LTTNG_HIDDEN<br />&gt; +-gid_t utils_get_group_id(const char *name)<br />&gt; ++int utils_get_group_id(const char *name, bool warn, gid_t *gid)<br />&gt; + {<br />&gt; +-      struct group *grp;<br />&gt; ++      static volatile int warn_once;<br />&gt; +<br />&gt; +-      grp = getgrnam(name);<br />&gt; +-      if (!grp) {<br />&gt; +-              static volatile int warn_once;<br />&gt; ++      int ret;<br />&gt; ++      long sys_len;<br />&gt; ++      size_t len;<br />&gt; ++      struct group grp;<br />&gt; ++      struct group *result;<br />&gt; ++      char *buffer = NULL;<br />&gt; +<br />&gt; +-              if (!warn_once) {<br />&gt; +-                      WARN(&quot;No tracing group detected&quot;);<br />&gt; +-                      warn_once = 1;<br />&gt; ++      /* Get the system limit if it exists */<br />&gt; ++      sys_len = sysconf(_SC_GETGR_R_SIZE_MAX);<br />&gt; ++      if (sys_len == -1) {<br />&gt; ++              len = 1024;<br />&gt; ++      } else {<br />&gt; ++              len = (size_t) sys_len;<br />&gt; ++      }<br />&gt; ++<br />&gt; ++      buffer = malloc(len);<br />&gt; ++      if (!buffer) {<br />&gt; ++              PERROR(&quot;getgrnam_r malloc&quot;);<br />&gt; ++              ret = -1;<br />&gt; ++              goto error;<br />&gt; ++      }<br />&gt; ++<br />&gt; ++      while ((ret = getgrnam_r(name, &amp;grp, buffer, len, &amp;result)) == ERANGE)<br />&gt; ++      {<br />&gt; ++              /* Buffer is not big enough, increase its size. */<br />&gt; ++              size_t new_len = 2 * len;<br />&gt; ++              char *new_buffer = NULL;<br />&gt; ++              if (new_len &lt; len) {<br />&gt; ++                      ERR(&quot;getgrnam_r buffer size overflow&quot;);<br />&gt; ++                      ret = -1;<br />&gt; ++                      goto error;<br />&gt; ++              }<br />&gt; ++              len = new_len;<br />&gt; ++              new_buffer = realloc(buffer, len);<br />&gt; ++              if (!new_buffer) {<br />&gt; ++                      PERROR(&quot;getgrnam_r realloc&quot;);<br />&gt; ++                      ret = -1;<br />&gt; ++                      goto error;<br />&gt; +               }<br />&gt; +-              return 0;<br />&gt; ++              buffer = new_buffer;<br />&gt; ++      }<br />&gt; ++      if (ret != 0) {<br />&gt; ++              PERROR(&quot;getgrnam_r&quot;);<br />&gt; ++              ret = -1;<br />&gt; ++              goto error;<br />&gt; ++      }<br />&gt; ++<br />&gt; ++      /* Group not found. */<br />&gt; ++      if (!result) {<br />&gt; ++              ret = -1;<br />&gt; ++              goto error;<br />&gt; ++      }<br />&gt; ++<br />&gt; ++      *gid = result-&gt;gr_gid;<br />&gt; ++      ret = 0;<br />&gt; ++<br />&gt; ++error:<br />&gt; ++      free(buffer);<br />&gt; ++      if (ret &amp;&amp; warn &amp;&amp; !warn_once) {<br />&gt; ++              WARN(&quot;No tracing group detected&quot;);<br />&gt; ++              warn_once = 1;<br />&gt; +       }<br />&gt; +-      return grp-&gt;gr_gid;<br />&gt; ++      return ret;<br />&gt; + }<br />&gt; +<br />&gt; + /*<br />&gt; +diff --git a/src/common/utils.h b/src/common/utils.h<br />&gt; +index 18f19ef1..9c72431d 100644<br />&gt; +--- a/src/common/utils.h<br />&gt; ++++ b/src/common/utils.h<br />&gt; +@@ -22,6 +22,8 @@<br />&gt; + #include &lt;unistd.h&gt;<br />&gt; + #include &lt;stdint.h&gt;<br />&gt; + #include &lt;getopt.h&gt;<br />&gt; ++#include &lt;stdbool.h&gt;<br />&gt; ++#include &lt;sys/types.h&gt;<br />&gt; +<br />&gt; + #define KIBI_LOG2 10<br />&gt; + #define MEBI_LOG2 20<br />&gt; +@@ -52,7 +54,7 @@ int utils_get_count_order_u64(uint64_t x);<br />&gt; + char *utils_get_home_dir(void);<br />&gt; + char *utils_get_user_home_dir(uid_t uid);<br />&gt; + size_t utils_get_current_time_str(const char *format, char *dst, size_t len);<br />&gt; +-gid_t utils_get_group_id(const char *name);<br />&gt; ++int utils_get_group_id(const char *name, bool warn, gid_t *gid);<br />&gt; + char *utils_generate_optstring(const struct option *long_options,<br />&gt; +               size_t opt_count);<br />&gt; + int utils_create_lock_file(const char *filepath);<br />&gt; +diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c<br />&gt; +index 2d84aad9..561b0bcf 100644<br />&gt; +--- a/src/lib/lttng-ctl/lttng-ctl.c<br />&gt; ++++ b/src/lib/lttng-ctl/lttng-ctl.c<br />&gt; +@@ -208,15 +208,13 @@ end:<br />&gt; + LTTNG_HIDDEN<br />&gt; + int lttng_check_tracing_group(void)<br />&gt; + {<br />&gt; +-      struct group *grp_tracing;      /* no free(). See getgrnam(3) */<br />&gt; +-      gid_t *grp_list;<br />&gt; ++      gid_t *grp_list, tracing_gid;<br />&gt; +       int grp_list_size, grp_id, i;<br />&gt; +       int ret = -1;<br />&gt; +       const char *grp_name = tracing_group;<br />&gt; +<br />&gt; +       /* Get GID of group &#039;tracing&#039; */<br />&gt; +-      grp_tracing = getgrnam(grp_name);<br />&gt; +-      if (!grp_tracing) {<br />&gt; ++      if (utils_get_group_id(grp_name, false, &amp;tracing_gid)) {<br />&gt; +               /* If grp_tracing is NULL, the group does not exist. */<br />&gt; +               goto end;<br />&gt; +       }<br />&gt; +@@ -241,7 +239,7 @@ int lttng_check_tracing_group(void)<br />&gt; +       }<br />&gt; +<br />&gt; +       for (i = 0; i &lt; grp_list_size; i++) {<br />&gt; +-              if (grp_list[i] == grp_tracing-&gt;gr_gid) {<br />&gt; ++              if (grp_list[i] == tracing_gid) {<br />&gt; +                       ret = 1;<br />&gt; +                       break;<br />&gt; +               }<br />&gt; +--<br />&gt; +2.17.1<br />&gt; +<br />&gt; diff --git a/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb b/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb<br />&gt; index 86418f14c0..b720b84afa 100644<br />&gt; --- a/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb<br />&gt; +++ b/meta/recipes-kernel/lttng/lttng-tools_2.10.6.bb<br />&gt; @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = &quot;file://LICENSE;md5=01d7fc4496aacf37d90df90b90b0cac1 \<br />&gt;<br />&gt;  DEPENDS = &quot;liburcu popt libxml2 util-linux&quot;<br />&gt;  RDEPENDS_${PN} = &quot;libgcc&quot;<br />&gt; -RDEPENDS_${PN}-ptest += &quot;make perl bash gawk ${PN} babeltrace procps perl-module-overloading coreutils util-linux&quot;<br />&gt; +RDEPENDS_${PN}-ptest += &quot;make perl bash gawk ${PN} babeltrace procps perl-module-overloading coreutils util-linux kmod&quot;<br />&gt;  RDEPENDS_${PN}-ptest_append_libc-glibc = &quot; glibc-utils&quot;<br />&gt;  RDEPENDS_${PN}-ptest_append_libc-musl = &quot; musl-utils&quot;<br />&gt;  # babelstats.pl wants getopt-long<br />&gt; @@ -33,6 +33,13 @@ SRC_URI = &quot;https://lttng.org/files/lttng-tools/lttng-tools-${PV}.tar.bz2 \<br />&gt;             file://x32.patch \<br />&gt;             file://run-ptest \<br />&gt;             file://lttng-sessiond.service \<br />&gt; +           file://0001-Fix-tests-link-libpause_consumer-on-liblttng-ctl.patch \<br />&gt; +           file://0002-Fix-test-skip-test_getcpu_override-on-single-thread-.patch \<br />&gt; +           file://0003-Fix-test-unit-the-tree-origin-can-be-a-symlink-itsel.patch \<br />&gt; +           file://0004-Skip-when-testapp-is-not-present.patch\<br />&gt; +           file://0005-Tests-use-modprobe-to-test-for-the-presence-of-lttng.patch \<br />&gt; +           file://0006-Tests-check-for-lttng-modules-presence.patch \<br />&gt; +           file://0007-Fix-getgrnam-is-not-MT-Safe-use-getgrnam_r.patch \<br />&gt;             &quot;<br />&gt;<br />&gt;  SRC_URI[md5sum] = &quot;e88c521b5da6bb48a8187af633336ecc&quot;<br />&gt; --<br />&gt; 2.17.1<br />&gt;<br />&gt; --<br />&gt; _______________________________________________<br />&gt; Openembedded-core mailing list<br />&gt; Openembedded-core@lists.openembedded.org<br />&gt; http://lists.openembedded.org/mailman/listinfo/openembedded-core<br /></body>