diff mbox series

[1/2] gcc: Oe-selftest failure analysis - fix for host key verfication & kex exchange identification failures

Message ID 20240418105051.2559536-1-Harish.Sadineni@windriver.com
State New
Headers show
Series [1/2] gcc: Oe-selftest failure analysis - fix for host key verfication & kex exchange identification failures | expand

Commit Message

Sadineni, Harish April 18, 2024, 10:50 a.m. UTC
From: Harish Sadineni <Harish.Sadineni@windriver.com>

while runnig oe-selftest for gcc, testcases that need to be run on qemu are not running due to below failures.
- Executing on ssh: mkdir -p /tmp/runtest.3549641   (timeout = 300)
   spawn [open ...]
   Host key verification failed.
   ERROR: Couldn't create remote directory /tmp/runtest.3549641 on ssh
- kex_exchange_identification: read: Connection reset by peer^M
   Connection reset by 192.168.7.2 port 22^M
   ERROR: Couldn't create remote directory /tmp/runtest.3549814 on ssh

Host key verification failure is happening when ssh board config file name is defined as "ssh.exp" and there are multiple ssh.exp files generated during the build and a wrong ssh config was taken. To resolve this changed the board config file name to "linux-ssh.exp" which ensures correct ssh settings are used.

To resolve kex exchange identification error increased the MaxStartups.

Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
---
 meta/lib/oeqa/selftest/cases/gcc.py                   | 2 +-
 meta/recipes-connectivity/openssh/openssh/sshd_config | 2 +-
 meta/recipes-devtools/gcc/gcc-testsuite.inc           | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

Comments

Sadineni, Harish April 18, 2024, 10:57 a.m. UTC | #1
testresults before applying patch for x86_64 :
|  gcc            |   g++           |  libatomic    |   libgomp  |    libitm      |   libstdc++ |  Total (Sum of all modules)
expected passes         |  148313     |   218545      |  27              |    3369      |    24           |    9693     |  379971
unexpected failures     |  15             |   20              |                    |                  |                   |                 |  35
expected failures         |  1419         |   2052          |                    |    30          |                   |    6           |  3507
unresolved testcases  |  25130        |   10816       |  27              |    1579      |     22          |    4869      |  42443
unsupported tests       |  2686          |   10420       |                    |    410        |     2             |    643       |  14161

testresults after applying patch for x86_64:
|  gcc          |   g++           |  libatomic    |   libgomp  |    libitm      |   libstdc++ |  Total (Sum of all modules)
expected passes         |  177610    |   230158     |  54              |    5033      |    24          |    13695    |  426574
unexpected failures     |  99           |   20              |                    |    1            |    19          |    7            |  146
expected failures         |  1422       |   2063          |                    |    32          |    3            |    106        |  3626
unresolved testcases  |  4              |                    |                    |                  |                  |    1125       |  1129
unsupported tests       |  2147        |   10350       |                    |    429        |    2            |    805         |  13733

Unresolved cases are reduced to ~1000 (i.e., More than 41K tests are newly executed)
More than 45000 tests cases are passed newly.
patchtest@automation.yoctoproject.org April 18, 2024, 11:07 a.m. UTC | #2
Thank you for your submission. Patchtest identified one
or more issues with the patch. Please see the log below for
more information:

---
Testing patch /home/patchtest/share/mboxes/1-2-gcc-Oe-selftest-failure-analysis---fix-for-host-key-verfication-kex-exchange-identification-failures.patch

FAIL: test shortlog length: Edit shortlog so that it is 90 characters or less (currently 103 characters) (test_mbox.TestMbox.test_shortlog_length)

PASS: pretest pylint (test_python_pylint.PyLint.pretest_pylint)
PASS: test Signed-off-by presence (test_mbox.TestMbox.test_signed_off_by_presence)
PASS: test author valid (test_mbox.TestMbox.test_author_valid)
PASS: test commit message presence (test_mbox.TestMbox.test_commit_message_presence)
PASS: test max line length (test_metadata.TestMetadata.test_max_line_length)
PASS: test mbox format (test_mbox.TestMbox.test_mbox_format)
PASS: test non-AUH upgrade (test_mbox.TestMbox.test_non_auh_upgrade)
PASS: test pylint (test_python_pylint.PyLint.test_pylint)
PASS: test shortlog format (test_mbox.TestMbox.test_shortlog_format)

SKIP: pretest src uri left files: No modified recipes, skipping pretest (test_metadata.TestMetadata.pretest_src_uri_left_files)
SKIP: test CVE check ignore: No modified recipes or older target branch, skipping test (test_metadata.TestMetadata.test_cve_check_ignore)
SKIP: test CVE tag format: No new CVE patches introduced (test_patch.TestPatch.test_cve_tag_format)
SKIP: test Signed-off-by presence: No new CVE patches introduced (test_patch.TestPatch.test_signed_off_by_presence)
SKIP: test Upstream-Status presence: No new CVE patches introduced (test_patch.TestPatch.test_upstream_status_presence_format)
SKIP: test bugzilla entry format: No bug ID found (test_mbox.TestMbox.test_bugzilla_entry_format)
SKIP: test lic files chksum modified not mentioned: No modified recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_modified_not_mentioned)
SKIP: test lic files chksum presence: No added recipes, skipping test (test_metadata.TestMetadata.test_lic_files_chksum_presence)
SKIP: test license presence: No added recipes, skipping test (test_metadata.TestMetadata.test_license_presence)
SKIP: test series merge on head: Merge test is disabled for now (test_mbox.TestMbox.test_series_merge_on_head)
SKIP: test src uri left files: No modified recipes, skipping pretest (test_metadata.TestMetadata.test_src_uri_left_files)
SKIP: test summary presence: No added recipes, skipping test (test_metadata.TestMetadata.test_summary_presence)
SKIP: test target mailing list: Series merged, no reason to check other mailing lists (test_mbox.TestMbox.test_target_mailing_list)

---

Please address the issues identified and
submit a new revision of the patch, or alternatively, reply to this
email with an explanation of why the patch should be accepted. If you
believe these results are due to an error in patchtest, please submit a
bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
under 'Yocto Project Subprojects'). For more information on specific
failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
you!
Richard Purdie April 25, 2024, 12:07 p.m. UTC | #3
Hi Harish,

On Thu, 2024-04-18 at 03:50 -0700, Sadineni, Harish via
lists.openembedded.org wrote:
> From: Harish Sadineni <Harish.Sadineni@windriver.com>
> 
> while runnig oe-selftest for gcc, testcases that need to be run on
> qemu are not running due to below failures.
> - Executing on ssh: mkdir -p /tmp/runtest.3549641   (timeout = 300)
>    spawn [open ...]
>    Host key verification failed.
>    ERROR: Couldn't create remote directory /tmp/runtest.3549641 on
> ssh
> - kex_exchange_identification: read: Connection reset by peer^M
>    Connection reset by 192.168.7.2 port 22^M
>    ERROR: Couldn't create remote directory /tmp/runtest.3549814 on
> ssh
> 
> Host key verification failure is happening when ssh board config file
> name is defined as "ssh.exp" and there are multiple ssh.exp files
> generated during the build and a wrong ssh config was taken. To
> resolve this changed the board config file name to "linux-ssh.exp"
> which ensures correct ssh settings are used.
> 
> To resolve kex exchange identification error increased the
> MaxStartups.
> 
> Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
> ---
>  meta/lib/oeqa/selftest/cases/gcc.py                   | 2 +-
>  meta/recipes-connectivity/openssh/openssh/sshd_config | 2 +-
>  meta/recipes-devtools/gcc/gcc-testsuite.inc           | 2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)

Thanks for these. They did pass testing on the autobuilder but I there
are some style tweaks needed before they can merge and we have to
answer some questions about the sshd_config changes.

Style wise, the shortlog of the patch (subject line) needs to be
improved. It should start "oeqa/selftest/gcc:" to make it clear this
isn't a gcc recipe change but a selftest change.

The shortlog should also be a short summary, so for example:

oeqa/selftest/gcc: Fix ssh tests to run correctly

The longer log can contain contain information about the host key and
key exchange pieces.

Moving on to the patch content, the openssh piece needs to be separated
out into a separate patch as it is changing a quite key separate part
of the system.

I noticed the second patch also has an openssh change, so perhaps
combine those two changes together into a separate patch. The second
patch also needs the shortlog improving similar to the above.

The rest of the patch content is good.

The remaining issue is where/when to apply the openssh changes. My
worry is that this does have potential DoS implications on real target
devices as the config change is being made globally. It made me wonder
if we should have a "qemuall" openssh config that applies to our qemu
machines we use for testing as way of handling this?

Cheers,

Richard
Richard Purdie April 25, 2024, 12:35 p.m. UTC | #4
I did compare a build with this patch in it with the 5.0 rc4 test
report:

http://autobuilder.yocto.io/pub/non-release/20240424-25/testresults/testresult-report.txt

vs

http://autobuilder.yocto.io/pub/releases/yocto-5.0.rc4/testreport.txt

which shows:

gcc                          | 149932       | 15        | 27534       | 1548
gcc-g++                      | 219372       | 22        | 21074       | 1350
gcc-libatomic                | 27           | 0         | 27          | 513
gcc-libgomp                  | 3428         | 0         | 1960        | 582
gcc-libitm                   | 24           | 0         | 24          | 430
gcc-libstdc++-v3             | 9722         | 0         | 5447        | 2202

vs

gcc                          | 149794       | 31        | 27672       | 1446
gcc-g++                      | 219325       | 31        | 21128       | 1100
gcc-libatomic                | 27           | 1         | 27          | 517
gcc-libgomp                  | 3411         | 15        | 1977        | 782
gcc-libitm                   | 24           | 1         | 24          | 397
gcc-libstdc++-v3             | 9705         | 32        | 5464        | 2669


so I'm not sure this is fixing the large number of skipped tests that
it is supposed to fix?

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/lib/oeqa/selftest/cases/gcc.py b/meta/lib/oeqa/selftest/cases/gcc.py
index 89360178fe..4cc0894d42 100644
--- a/meta/lib/oeqa/selftest/cases/gcc.py
+++ b/meta/lib/oeqa/selftest/cases/gcc.py
@@ -37,7 +37,7 @@  class GccSelfTestBase(OESelftestTestCase, OEPTestResultTestCase):
         features = []
         features.append('MAKE_CHECK_TARGETS = "{0}"'.format(" ".join(targets)))
         if ssh is not None:
-            features.append('TOOLCHAIN_TEST_TARGET = "ssh"')
+            features.append('TOOLCHAIN_TEST_TARGET = "linux-ssh"')
             features.append('TOOLCHAIN_TEST_HOST = "{0}"'.format(ssh))
             features.append('TOOLCHAIN_TEST_HOST_USER = "root"')
             features.append('TOOLCHAIN_TEST_HOST_PORT = "22"')
diff --git a/meta/recipes-connectivity/openssh/openssh/sshd_config b/meta/recipes-connectivity/openssh/openssh/sshd_config
index e9eaf93157..b9357ef6c5 100644
--- a/meta/recipes-connectivity/openssh/openssh/sshd_config
+++ b/meta/recipes-connectivity/openssh/openssh/sshd_config
@@ -100,7 +100,7 @@  ClientAliveInterval 15
 ClientAliveCountMax 4
 #UseDNS no
 #PidFile /var/run/sshd.pid
-#MaxStartups 10:30:100
+MaxStartups 75:30:100
 #PermitTunnel no
 #ChrootDirectory none
 #VersionAddendum none
diff --git a/meta/recipes-devtools/gcc/gcc-testsuite.inc b/meta/recipes-devtools/gcc/gcc-testsuite.inc
index f16d471478..0a950b6c9e 100644
--- a/meta/recipes-devtools/gcc/gcc-testsuite.inc
+++ b/meta/recipes-devtools/gcc/gcc-testsuite.inc
@@ -101,7 +101,7 @@  python check_prepare() {
         f.write(generate_qemu_linux_user_config(d))
 
     # write out target ssh board config
-    with open(os.path.join(dejagnudir, "ssh.exp"), "w") as f:
+    with open(os.path.join(dejagnudir, "linux-ssh.exp"), "w") as f:
         f.write(generate_remote_ssh_linux_config(d))
 
     # generate site.exp to provide boards