subtree updates july 21 2023 poky,openembedded

poky: 13b646c0e1..b398c7653e:
  Adrian Freihofer (2):
        runqemu-ifdown: catch up with ifup
        runqemu: drop uid parameter for ifdown

  Alejandro Hernandez Samaniego (3):
        baremetal-helloworld: Fix race condition
        runqemu: Stop using warn() since its been deprecated
        runqemu: Fix automated call to runqemu-ifup

  Alex Kiernan (3):
        rootfs: Add debugfs package db file copy and cleanup
        rpm: Pick debugfs package db files/dirs explicitly
        eudev: Add group sgx to eudev package

  Alexander Kanavin (27):
        insane.bbclass: enable 32 bit time API check (as a warning) on affected architectures
        libxcrypt: upgrade 4.4.34 -> 4.4.35
        libxml2: update 2.10.4 -> 2.11.4
        ovmf: update 202302 -> 202305
        lua: update 5.4.4 -> 5.4.6
        cargo.bbclass: set up cargo environment in common do_compile
        rust-common.bbclass: move musl-specific linking fix from rust-source.inc
        python3-cryptography: update 39.0.2 -> 41.0.1
        python3-cryptography-vectors: update 39.0.2 -> 41.0.1
        python3: update 3.11.3 -> 3.11.4
        diffutils: update 3.9 -> 3.10
        shadow: remove dependency on pam-plugin-lastlog
        libpam: update 1.5.2 -> 1.5.3
        librsvg: update 2.56.0 -> 2.56.1
        vulkan-validation-layers: update 1.3.243 -> 1.3.250
        xcb-util-cursor: add a recipe from meta-oe
        weston: update 11.0.1 -> 12.0.1
        libdmx: update 1.1.4 -> 1.1.5
        xtrans: update 1.4.0 -> 1.5.0
        libproxy: fetch from git
        libproxy: update 0.4.18 -> 0.5.2
        libssh2: update 1.10.0 -> 1.11.0
        gstreamer1.0-plugins-base: enable glx/opengl support
        webkitgtk: update 2.38.5 -> 2.40.2
        python3-cryptography: update a patch to upstream's better followup fix
        time64.inc: annotate and clean up recipe-specific Y2038 exceptions
        Revert "rootfs-postcommands.bbclass: add post func remove_unused_dnf_log_lock"

  Andrej Valek (3):
        cve-check: add option to add additional patched CVEs
        oeqa/selftest/cve_check: rework test to new cve status handling
        cve_check: convert CVE_CHECK_IGNORE to CVE_STATUS

  Anuj Mittal (7):
        rpm: backport fix to prevent crashes with latest sqlite
        sqlite3: upgrade 3.41.2 -> 3.42.0
        vte: upgrade 0.72.1 -> 0.72.2
        libpng: upgrade 1.6.39 -> 1.6.40
        glib-networking: upgrade 2.76.0 -> 2.76.1
        bluez5: upgrade 5.66 -> 5.68
        selftest/cases/glibc.py: fix the override syntax

  BELOUARGA Mohamed (9):
        bitbake: fetch2/npmsw: Add support for the new format of the shrinkwrap file
        bitbake: fetch2/npmsw: Don't fetch dev dependencies when they are not demanded
        bitbake: fetch2/npm: Remove special caracters that causes recipe tool to fail
        recipetool: create: npm: Remove duplicate function to not have future conflicts
        classes: npm: Handle peer dependencies for npm packages
        recipetool: create: npm: Add support for the new format of the shrinkwrap file
        recipetool: create: npm: Add support to handle peer dependencies
        classes: npm: Add support for the new format of the shrinkwrap file
        classe-recipes: npm: Add support for dependencies and devDependencies

  Benjamin Bouvier (1):
        util-linux: add alternative links for ipcs,ipcrm

  Bruce Ashfield (19):
        perf: fix buildpaths QA warning in 6.4+
        linux-libc-headers: bump to 6.4
        kernel: fix localversion in v6.3+
        linux-yocto: introduce 6.4 reference kernel recipes
        linux-yocto/6.4: update to latest
        linux-yocto/6.4: aufs6 integration
        linux-yocto/6.4: refresh configuration
        linux-yocto-rt/6.4: integrate -rt6
        linux-yocto/6.4: update to v6.4.2
        linux-yocto-tiny/6.4: fix configuration warnings (HID)
        linux-yocto-tiny/arm: fix configuration warnings (HID)
        linux-yocto/ppc: add elfutils-native to DEPENDS
        linux-yocto/6.1: update to v6.1.36
        linux-yocto/6.1: update to v6.1.37
        linux-yocto/6.1: update to v6.1.38
        linux-yocto/6.x: cfg: update ima.cfg to match current meta-integrity
        linux-yocto/6.4: update to v6.4.3
        kernel: set HOSTPKG_CONFIG to use pkg-config-native
        linux-yocto/6.4: fix menuconfig

  Changqing Li (2):
        dnf: only write the log lock to root for native dnf
        rootfs-postcommands.bbclass: add post func remove_unused_dnf_log_lock

  Denys Dmytriyenko (1):
        bitbake: runqueue: convert deferral messages from bb.note to bb.debug

  Enrico Scholz (1):
        shadow-sysroot: add license information

  Etienne Cordonnier (2):
        libxcrypt: fix hard-coded ".so" extension
        qemu: fix typo

  Fabio Estevam (3):
        u-boot: Update Upstream-Status
        u-boot: Upgrade to 2023.07
        u-boot: Upgrade to 2023.07.02

  Frederic Martinsons (1):
        ptest-cargo.bbclass: fix condition to detect test executable

  Joe Slater (1):
        ghostscript: advance to version 10.01.2

  Jose Quaresma (12):
        kernel: config modules directories are handled by kernel-module-split
        kernel-module-split: install config modules directories only when they are needed
        kernel-module-split: use context manager to open files
        kernel-module-split: make autoload and probeconf distribution specific
        kernel-module-split add systemd modulesloaddir and modprobedir config
        pybootchartgui: calcule elapsed_time when starting the loop
        pybootchartgui: concatenate the elapsed time with the process
        pybootchartgui: fix overlapping argument in render_processes_chart
        pybootchartgui: fix width max usage in draw_label_in_box
        openssl: add PERLEXTERNAL path to test its existence
        openssl: use a glob on the PERLEXTERNAL to track updates on the path
        go: update 1.20.5 -> 1.20.6

  Julien Stephan (1):
        automake: fix buildtest patch

  Khem Raj (9):
        ffmpeg: Fix build on riscv
        libpam: Fix examples build on musl
        webkitgtk: Enable JIT on RISCV64
        musl: Guard fallocate64 with _LARGEFILE64_SOURCE
        alsa-lib: Disable old API symbols
        mesa: Fix build with upcoming LLVM 17
        meson.bbclass: Point to llvm-config from native sysroot
        webkitgtk: Unbreak build on platforms using pvr graphics drivers
        python3-lxml: upgrade 4.9.2 -> 4.9.3

  Martin Jansa (4):
        selftest: multiconfig-image-packager: try to respect IMAGE_LINK_NAME
        kernel-devicetree: install dtb files without -${KERNEL_DTB_NAME} suffix
        image-artifact-names: include ${IMAGE_NAME_SUFFIX} directly in both ${IMAGE_NAME} and ${IMAGE_LINK_NAME}
        cpio: respect MLPREFIX for PACKAGE_WRITE_DEPS

  Michael Halstead (1):
        resulttool/resultutils: allow index generation despite corrupt json

  Mingli Yu (1):
        qemu: Add qemu-user-* and qemu-system-* to PACKAGES_DYNAMIC

  Natasha Bailey (1):
        tiff: backport a fix for CVE-2023-26965

  Ovidiu Panait (5):
        mdadm: fix util-linux ptest dependency
        mdadm: fix 07revert-inplace ptest
        mdadm: fix segfaults when running ptests
        mdadm: skip running known broken ptests
        mdadm: re-add mdadm-ptest to PTESTS_SLOW

  Peter Hoyes (5):
        bitbake: bitbake: tests/fetch: Mark TestTimeout as not a test suite
        bitbake: bitbake: tests/fetch: Rename assertRaisesRegexp to assertRaisesRegex
        bitbake: bitbake: tests/fetch: Set git config if not already set
        bitbake: bitbake: tests: Use assertLogs to test logging output
        bitbake: bitbake: Bootstrap pytest for self-tests

  Peter Marko (4):
        cve-update-nvd2-native: fix cvssV3 metrics
        gcsections: apply section removal also in C++, not only in C
        cve-update-nvd2-native: retry all errors and sleep between retries
        cve-update-nvd2-native: increase retry count

  Piotr Łobacz (1):
        bitbake.conf: Add acl distro native features support

  Quentin Schulz (1):
        uboot-extlinux-config.bbclass: fix old override syntax in comment

  Richard Purdie (14):
        defaultsetup: Enable largefile and 64bit time_t support systemwide for 32 bit platforms
        time64: Disable CFLAGS for strace
        bitbake: runqueue: Fix deferred task/multiconfig race issue
        strace: Update patches/tests with upstream fixes
        bitbake: fetch2/npmsw: Support old and new shrinkwrap formats
        ptest-runner: Pull in "runner: Remove threads and mutexes" fix
        bitbake: server/process: Show command in timeout message
        bitbake: cooker: Log when parsing starts in server log
        gcc-testsuite: Fix ppc cpu specification
        ptest-runner: Pull in parallel test fixes and output handling
        oeqa/selftest/rust: Various fixes to work correctly
        bitbake: runqueue: Add pressure change logging
        build-appliance-image: Update to master head revision
        glibc-testsuite: Fix network restrictions causing test failures

  Ross Burton (26):
        cve-update-db-native: remove
        cve-update-nvd2-native: handle all configuration nodes, not just first
        cve-update-nvd2-native: use exact times, don't truncate
        ghostscript: remove CVE_CHECK_IGNORE for CVE-2013-6629
        pkgconf: update SRC_URI
        libjpeg-turbo: upgrade to 3.0.0
        cups: upgrade to 2.4.6
        tiff: upgrade to 4.5.1
        linux-yocto/cve-exclusion: move entries from cve-extra-exclusions
        linux-yocto/cve-exclusion: ignore more backported CVEs
        python3: fix missing comma in get_module_deps3.py
        python3-jsonpointer: upgrade to 2.4
        oeqa/runtime/cases/rpm: fix wait_for_no_process_for_user failure case
        cml1: add showconfig task to easily find the generated .config file
        rootfs_rpm: don't depend on opkg-native for update-alternatives
        poky: add Debian 12 to supported distribution list
        cve-update-nvd2-native: log a little more
        cve-update-nvd2-native: actually use API keys
        gcc: don't pass --enable-standard-branch-protection
        machine/arch-arm64: add -mbranch-protection=standard
        qemuarm: pin kernel to 6.1
        libdmx: remove obsolete library
        linux-yocto_6.1: ignore backported CVEs
        python3: ignore CVE-2023-36632
        ltp: add RDEPENDS on findutils
        oeqa/ltp: rewrote LTP testcase and parser

  Siddharth Doshi (2):
        bind: Upgrade 9.18.15 -> 9.18.16
        flac: Upgrade 1.4.2 -> 1.4.3

  Soumya (1):
        perl: Fix CVE-2023-31486

  Staffan Rydén (1):
        kernel: Fix path comparison in kernel staging dir symlinking

  Stéphane Veyret (1):
        scripts/oe-setup-builddir: copy conf-notes.txt to build dir

  Sudip Mukherjee (1):
        libssh2: disable rpath to fix curl-native build

  Thomas Roos (1):
        testimage/oeqa: Drop testimage_dump_host functionality

  Tim Orling (10):
        python3-pytest-subtests: upgrade 0.10.0 -> 0.11.0
        python3-urllib3: upgrade 2.0.2 -> 2.0.3
        python3-typing-extensions: upgrade 4.6.3 -> 4.7.0
        python3-hypothesis: upgrade 6.79.2 -> 6.80.0
        python3-pygments: upgrade 2.14.0 -> 2.15.1
        python3-importlib-metadata: upgrade 6.7.0 -> 6.8.0
        python3-typing-extensions: upgrade 4.7.0 -> 4.7.1
        python3-cryptography{-vectors}: upgrade 41.0.1 -> 41.0.2
        python3-zipp: upgrade 3.15.0 -> 3.16.2
        python3-hypothesis: upgrade 6.80.0 -> 6.81.2

  Trevor Gamblin (15):
        python3: add cgitb, zipapp ptest dependencies
        qemu: upgrade 8.0.0 -> 8.0.3
        python3: parallelize ptests, add test_cppext dependencies
        python3-setuptools: upgrade 67.6.1 -> 68.0.0
        diffoscope: upgrade 242 -> 243
        p11-kit: upgrade 0.24.1 -> 0.25.0
        diffoscope: add missing RDEPENDS and alphabetize
        linux-firmware: upgrade 20230515 -> 20230625
        python3-trove-classifiers: upgrade 2023.5.24 -> 2023.7.6
        python3-cython: upgrade 0.29.35 -> 0.29.36
        icu: upgrade 72-1 -> 73-2
        python3-editables: add python3-io to RDEPENDS
        python3: ensure ptest regression capture
        diffoscope: upgrade 243 -> 244
        xeyes: upgrade 1.2.0 -> 1.3.0

  Wang Mingyu (51):
        freetype: upgrade 2.13.0 -> 2.13.1
        gstreamer1.0: upgrade 1.22.3 -> 1.22.4
        kbd: upgrade 2.5.1 -> 2.6.0
        libassuan: upgrade 2.5.5 -> 2.5.6
        libksba: upgrade 1.6.3 -> 1.6.4
        libmd: upgrade 1.0.4 -> 1.1.0
        libsdl2: upgrade 2.26.5 -> 2.28.0
        libtraceevent: upgrade 1.7.2 -> 1.7.3
        libx11: upgrade 1.8.5 -> 1.8.6
        lttng-ust: upgrade 2.13.5 -> 2.13.6
        nettle: upgrade 3.9 -> 3.9.1
        nghttp2: upgrade 1.53.0 -> 1.54.0
        ccache: upgrade 4.8.1 -> 4.8.2
        mesa: upgrade 23.1.1 -> 23.1.3
        python3-numpy: upgrade 1.24.3 -> 1.25.0
        python3-typing-extensions: upgrade 4.6.2 -> 4.6.3
        xorgproto: upgrade 2022.2 -> 2023.2
        python3-hatchling: upgrade 1.17.0 -> 1.18.0
        python3-hypothesis: upgrade 6.75.7 -> 6.79.2
        python3-importlib-metadata: upgrade 6.6.0 -> 6.7.0
        python3-iso8601: upgrade 1.1.0 -> 2.0.0
        python3-markupsafe: upgrade 2.1.2 -> 2.1.3
        python3-pluggy: upgrade 1.0.0 -> 1.2.0
        python3-pycairo: upgrade 1.23.0 -> 1.24.0
        python3-pyparsing: upgrade 3.0.9 -> 3.1.0
        python3-pytest: upgrade 7.3.1 -> 7.4.0
        python3-ruamel-yaml: upgrade 0.17.31 -> 0.17.32
        python3-sphinx-rtd-theme: upgrade 1.2.1 -> 1.2.2
        xkeyboard-config: upgrade 2.38 -> 2.39
        xwayland: upgrade 23.1.1 -> 23.1.2
        wayland-protocols: upgrade 1.31 -> 1.32
        taglib: upgrade 1.13 -> 1.13.1
        libxcrypt: upgrade 4.4.35 -> 4.4.36
        msmtp: upgrade 1.8.23 -> 1.8.24
        libwebp: upgrade 1.3.0 -> 1.3.1
        libuv: upgrade 1.45.0 -> 1.46.0
        acpica: upgrade 20230331 -> 20230628
        libnss-nis: upgrade 3.1 -> 3.2
        harfbuzz: upgrade 7.3.0 -> 8.0.1
        libproxy: upgrade 0.5.2 -> 0.5.3
        nghttp2: upgrade 1.54.0 -> 1.55.1
        debianutils: upgrade 5.7 -> 5.8
        glib-2.0: upgrade 2.76.3 -> 2.76.4
        python3-pip: upgrade 23.1.2 -> 23.2
        opkg: upgrade 0.6.1 -> 0.6.2
        opkg-utils: upgrade 0.5.0 -> 0.6.2
        python3-editables: upgrade 0.3 -> 0.4
        python3-git: upgrade 3.1.31 -> 3.1.32
        python3-numpy: upgrade 1.25.0 -> 1.25.1
        repo: upgrade 2.34.1 -> 2.35
        libva: upgrade to 2.19.0

  Yash Shinde (1):
        oeqa/selftest: Add rust selftests

  Yi Zhao (1):
        ifupdown: install missing directories

  Yoann Congal (2):
        recipetool: Fix inherit in created -native* recipes
        oeqa/selftest/devtool: add unit test for "devtool add -b"

  Yuta Hayama (1):
        systemd-systemctl: fix errors in instance name expansion

meta-openembedded: 2638d458a5..0e3f5e5201:
  Alex Kiernan (1):
        ostree: Upgrade 2023.4 -> 2023.5

  Archana Polampalli (1):
        tcpreplay: upgrade 4.4.3 -> 4.4.4

  Beniamin Sandu (1):
        mbedtls: fix builds with crypto extensions

  Bruce Ashfield (1):
        vboxguestdrivers: fix compilation against 6.4 kernel / headers

  Carlos Rafael Giani (3):
        pipewire: Disable libmysofa since it is not available in OE
        pipewire: Improve packageconfigs
        pipewire: Add dedicated aes67 package and fix rlimits.d package assignment

  Chee Yang Lee (1):
        rabbitmq-c: Fix CVE-2023-35789

  Jasper Orschulko (8):
        python3-pytest-cov: Add initial recipe 4.1.0
        python3-covdefaults: Add initial recipe 2.3.0
        python3-platformdirs: Fix recipe version 3.6.0
        python3-distlib: Add initial recipe 0.3.6
        python3-filelock: Add initial recipe 3.12.0
        python3-virtualenv: Add initial recipe 20.23.0
        python3-pyproject-api: Add initial recipe 1.5.1
        python3-tox: Add initial recipe 4.6.0

  Joe Slater (1):
        libgpiod: modify RDEPENDS for ptest

  Justin Bronder (2):
        python3-asyncinotify: upgrade 3.0.1 -> 4.0.2
        python3-pytest-asyncio: upgrade 0.16.0 -> 0.21.1

  Kai Kang (2):
        libtimezonemap: rename downloaded file name
        fltk-native: fix libdl link issue

  Khem Raj (33):
        gupnp-av: Fix build with libxml2-2.11 and newer
        xcb-util-cursor: Delete recipe
        pidgin-sipe: Add packageconfig to turn Werror on/off
        fbida: Fix build on musl
        pcp: Update to 6.0.5
        geos: Upgrade to 3.12.0
        ctags: Extend to build native package
        libcoap: Build linker symbol file explicitly
        geos: Use cmake directly
        pcp: Fix build race
        sblim-sfcc: Fix build with clang17
        minifi-cpp: Fix build with clang 17
        python3-grpcio-tools: Upgrade to 1.56.0
        python3-grpcio: Upgrade to 1.56.0
        python3-grpcio: Fix build on musl
        python3-grpcio-tools: Fix build with musl
        thin-provisioning-tools: Upgrade to 1.0.4
        thin-provisioning-tools: Fix build on musl.
        pcp: Disable parallel build
        crash: Fix build with glibc 2.38+
        breakpad: Update to latest trunk
        python3-requests-toolbelt: Fix ptest failures seen with urllib3 2.0
        ptest-packagelists-meta-oe: Limit mcelog to x86/x86_64
        graphviz: Upgrade to 8.1.0 release
        emlog: Update to latest to fix build with 6.4 kernel
        dlm: Upgrade to 4.2.0
        mdio-tools: Update to latest on trunk
        dlm: Fix build with linux kernel 6.4+
        dlm: Do not pass -fcf-protection=full via Makefile
        dlm: Do not use -fcf-protection=full on arm platforms
        zfs: Update to 2.2.0 rc1
        zfs: Disable builds on aarch64 for now
        dhcp-relay: Pass cross configure flags to bind build

  Luke Schaefer (1):
        nginx: Add stream Signed-off-by: Luke Schaefer <lukeschafer17@gmail.com>

  Marek Vasut (4):
        lvgl: Factor out and unify lv-drivers configuration
        lvgl: Add default input device configuration option
        linux-serial-test: Update to latest git revision
        libiio: enable c++ bindings

  Markus Volk (10):
        pipewire: upgrade 0.3.71 -> 0.3.72
        pipewire: upgrade 0.3.72 -> 0.3.73
        gnome-software: upgrade 44.2 -> 44.3
        eog: upgrade 44.2 -> 44.3
        spdlog: upgrade 1.11.0 -> 1.12.0
        flatpak: update dependencies
        gnome-control-center: upgrade 44.2 -> 44.3
        gnome-shell: upgrade 44.2 -> 44.3
        mutter: upgrade 44.2 -> 44.3
        gnome-settings-daemon: upgrade 44.0 -> 44.1

  Martin Jansa (4):
        nodejs: use PIE for host binaries
        gupnp: backport a fix not to use deprecated xmlReadMemory
        pidgin-sipe: allow to build with libxml2-2.11
        raptor2: backport a fix to build with libxml2-2.11

  Michael Haener (1):
        nginx: upgrade to 1.24.0 release

  Michael Weiß (1):
        pv: Show progress bar even if no terminal is set as in 1.6.6

  Mingli Yu (1):
        snort: Add systemd unit file

  Peter Kjellerstedt (1):
        cppzmq: Move the version to the recipe file name

  Petr Gotthard (2):
        python3-pyroute2: upgrade 0.5.19 -> 0.7.9
        networkmanager: upgrade 1.42.6 -> 1.42.8

  Ricardo Salveti (1):
        lshw: bump to b4e0673

  Ross Burton (5):
        poppler: fix missing include
        libpaper: remove redundant autoreconf --install
        liblbxutil: remove obsolete library
        xsetmode: remove obsolete utility
        libxkbui: remove obsolete recipe

  Tim Orling (1):
        python3-argh: upgrade 0.26.2 -> 0.28.1

  Trevor Gamblin (9):
        python3-alembic: upgrade 1.10.4 -> 1.11.1
        python3-sqlalchemy: upgrade 2.0.15 -> 2.0.19
        python3-argcomplete: upgrade 3.1.0 -> 3.1.1
        python3-arpeggio: upgrade 2.0.0 -> 2.0.2
        python3-astroid: upgrade 2.15.5 -> 2.15.6
        python3-autobahn: upgrade 23.6.1 -> 23.6.2
        python3-bandit: upgrade 1.7.4 -> 1.7.5
        python3-bandit: add python3-rich to RDEPENDS
        python3-bitarray: upgrade 2.7.3 -> 2.7.6

  Wang Mingyu (44):
        cppzmq: upgrade 4.9.0 -> 4.10.0
        iwd: upgrade 2.5 -> 2.6
        libburn: upgrade 1.5.4 -> 1.5.6
        libzip: upgrade 1.9.2 -> 1.10.0
        openfortivpn: upgrade 1.20.3 -> 1.20.5
        psqlodbc: upgrade 13.02.0000 -> 15.00.0000
        python3-aenum: upgrade 3.1.12 -> 3.1.14
        python3-can: upgrade 4.2.1 -> 4.2.2
        python3-google-api-python-client: upgrade 2.89.0 -> 2.90.0
        python3-h5py: upgrade 3.8.0 -> 3.9.0
        python3-natsort: upgrade 8.3.1 -> 8.4.0
        python3-pymodbus: upgrade 3.3.1 -> 3.3.2
        python3-pymongo: upgrade 4.3.3 -> 4.4.0
        python3-pyscaffold: upgrade 4.4.1 -> 4.5
        python3-pyzstd: upgrade 0.15.7 -> 0.15.9
        python3-requests-futures: upgrade 1.0.0 -> 1.0.1
        python3-sentry-sdk: upgrade 1.25.1 -> 1.26.0
        python3-zeroconf: upgrade 0.68.0 -> 0.69.0
        weechat: upgrade 3.8 -> 4.0.0
        python3-platformdirs: upgrade 3.6.0 -> 3.8.0
        renderdoc: upgrade 1.13 -> 1.27
        gegl: upgrade 0.4.44 -> 0.4.46
        gvfs: upgrade 1.50.4 -> 1.51.1
        weechat: upgrade 4.0.0 -> 4.0.1
        avro-c: upgrade 1.11.1 -> 1.11.2
        glfw: upgrade 3.3 -> 3.3.8
        hwloc: upgrade 2.9.1 -> 2.9.2
        minicoredumper: upgrade 2.0.3 -> 2.0.6
        thingsboard-gateway: upgrade 3.2 -> 3.3
        xterm: upgrade 382 -> 383
        passwdqc: upgrade 2.0.2 -> 2.0.3
        python3-aenum: upgrade 3.1.14 -> 3.1.15
        python3-configargparse : upgrade 1.5.3 -> 1.5.5
        python3-elementpath: upgrade 4.1.3 -> 4.1.4
        python3-google-api-python-client: upgrade 2.90.0 -> 2.92.0
        python3-google-auth: upgrade 2.20.0 -> 2.21.0
        python3-joblib: upgrade 1.2.0 -> 1.3.1
        python3-pillow: upgrade 9.5.0 -> 10.0.0
        python3-redis: upgrade 4.5.5 -> 4.6.0
        python3-tox: upgrade 4.6.0 -> 4.6.3
        python3-virtualenv: upgrade 20.23.0 -> 20.23.1
        python3-zeroconf: upgrade 0.69.0 -> 0.70.0
        libyang: Fix install conflict when enable multilib.
        php: Fix install conflict when enable multilib.

  Wolfgang Meyer (4):
        fbida: Switch to git fetcher
        fbida: build with meson
        fbida: SRC_REV bump ac9005b..eb769e3
        fbida: make fbpdf build optional

  Yi Zhao (6):
        conntrack-tools: add systemd unit file
        conntrack-tools: add required kernel modules to RRECOMMENDS
        frr: upgrade 8.4.2 -> 8.4.4
        mbedtls: upgrade 2.28.2 -> 2.28.3
        open-vm-tools: Security fix CVE-2023-20867
        samba: upgrade 4.18.3 -> 4.18.4

  Zoltán Böszörményi (1):
        opencv: 4.8.0

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I48c2ba4573ee81b637b1ba890c312f491004f666
diff --git a/poky/meta/lib/oe/cve_check.py b/poky/meta/lib/oe/cve_check.py
index dbaa0b3..5bf3caa 100644
--- a/poky/meta/lib/oe/cve_check.py
+++ b/poky/meta/lib/oe/cve_check.py
@@ -130,6 +130,13 @@
         if not fname_match and not text_match:
             bb.debug(2, "Patch %s doesn't solve CVEs" % patch_file)
 
+    # Search for additional patched CVEs
+    for cve in (d.getVarFlags("CVE_STATUS") or {}):
+        decoded_status, _, _ = decode_cve_status(d, cve)
+        if decoded_status == "Patched":
+            bb.debug(2, "CVE %s is additionally patched" % cve)
+            patched_cves.add(cve)
+
     return patched_cves
 
 
@@ -218,3 +225,21 @@
 
     return version + update
 
+def decode_cve_status(d, cve):
+    """
+    Convert CVE_STATUS into status, detail and description.
+    """
+    status = d.getVarFlag("CVE_STATUS", cve)
+    if status is None:
+        return ("", "", "")
+
+    status_split = status.split(':', 1)
+    detail = status_split[0]
+    description = status_split[1].strip() if (len(status_split) > 1) else ""
+
+    status_mapping = d.getVarFlag("CVE_CHECK_STATUSMAP", detail)
+    if status_mapping is None:
+        bb.warn('Invalid detail %s for CVE_STATUS[%s] = "%s", fallback to Unpatched' % (detail, cve, status))
+        status_mapping = "Unpatched"
+
+    return (status_mapping, detail, description)
diff --git a/poky/meta/lib/oe/package_manager/rpm/rootfs.py b/poky/meta/lib/oe/package_manager/rpm/rootfs.py
index d4c415f..3ba5396 100644
--- a/poky/meta/lib/oe/package_manager/rpm/rootfs.py
+++ b/poky/meta/lib/oe/package_manager/rpm/rootfs.py
@@ -110,7 +110,7 @@
         if self.progress_reporter:
             self.progress_reporter.next_stage()
 
-        self._setup_dbg_rootfs(['/etc', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf'])
+        self._setup_dbg_rootfs(['/etc/rpm', '/etc/rpmrc', '/etc/dnf', '/var/lib/rpm', '/var/cache/dnf', '/var/lib/dnf'])
 
         execute_pre_post_process(self.d, rpm_post_process_cmds)
 
diff --git a/poky/meta/lib/oe/rootfs.py b/poky/meta/lib/oe/rootfs.py
index 890ba5f..1a48ed1 100644
--- a/poky/meta/lib/oe/rootfs.py
+++ b/poky/meta/lib/oe/rootfs.py
@@ -106,7 +106,7 @@
     def _cleanup(self):
         pass
 
-    def _setup_dbg_rootfs(self, dirs):
+    def _setup_dbg_rootfs(self, package_paths):
         gen_debugfs = self.d.getVar('IMAGE_GEN_DEBUGFS') or '0'
         if gen_debugfs != '1':
            return
@@ -122,11 +122,12 @@
         bb.utils.mkdirhier(self.image_rootfs)
 
         bb.note("  Copying back package database...")
-        for dir in dirs:
-            if not os.path.isdir(self.image_rootfs + '-orig' + dir):
-                continue
-            bb.utils.mkdirhier(self.image_rootfs + os.path.dirname(dir))
-            shutil.copytree(self.image_rootfs + '-orig' + dir, self.image_rootfs + dir, symlinks=True)
+        for path in package_paths:
+            bb.utils.mkdirhier(self.image_rootfs + os.path.dirname(path))
+            if os.path.isdir(self.image_rootfs + '-orig' + path):
+                shutil.copytree(self.image_rootfs + '-orig' + path, self.image_rootfs + path, symlinks=True)
+            elif os.path.isfile(self.image_rootfs + '-orig' + path):
+                shutil.copyfile(self.image_rootfs + '-orig' + path, self.image_rootfs + path)
 
         # Copy files located in /usr/lib/debug or /usr/src/debug
         for dir in ["/usr/lib/debug", "/usr/src/debug"]:
@@ -162,6 +163,13 @@
             bb.note("  Install extra debug packages...")
             self.pm.install(extra_debug_pkgs.split(), True)
 
+        bb.note("  Removing package database...")
+        for path in package_paths:
+            if os.path.isdir(self.image_rootfs + path):
+                shutil.rmtree(self.image_rootfs + path)
+            elif os.path.isfile(self.image_rootfs + path):
+                os.remove(self.image_rootfs + path)
+
         bb.note("  Rename debug rootfs...")
         try:
             shutil.rmtree(self.image_rootfs + '-dbg')
diff --git a/poky/meta/lib/oeqa/core/target/qemu.py b/poky/meta/lib/oeqa/core/target/qemu.py
index 79fd724..6893d10 100644
--- a/poky/meta/lib/oeqa/core/target/qemu.py
+++ b/poky/meta/lib/oeqa/core/target/qemu.py
@@ -22,7 +22,7 @@
 class OEQemuTarget(OESSHTarget):
     def __init__(self, logger, server_ip, timeout=300, user='root',
             port=None, machine='', rootfs='', kernel='', kvm=False, slirp=False,
-            dump_dir='', dump_host_cmds='', display='', bootlog='',
+            dump_dir='', display='', bootlog='',
             tmpdir='', dir_image='', boottime=60, serial_ports=2,
             boot_patterns = defaultdict(str), ovmf=False, tmpfsdir=None, **kwargs):
 
@@ -44,8 +44,7 @@
         self.runner = QemuRunner(machine=machine, rootfs=rootfs, tmpdir=tmpdir,
                                  deploy_dir_image=dir_image, display=display,
                                  logfile=bootlog, boottime=boottime,
-                                 use_kvm=kvm, use_slirp=slirp, dump_dir=dump_dir,
-                                 dump_host_cmds=dump_host_cmds, logger=logger,
+                                 use_kvm=kvm, use_slirp=slirp, dump_dir=dump_dir, logger=logger,
                                  serial_ports=serial_ports, boot_patterns = boot_patterns, 
                                  use_ovmf=ovmf, tmpfsdir=tmpfsdir)
         dump_monitor_cmds = kwargs.get("testimage_dump_monitor")
diff --git a/poky/meta/lib/oeqa/runtime/cases/ltp.py b/poky/meta/lib/oeqa/runtime/cases/ltp.py
index a66d5d1..29c26d7 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ltp.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ltp.py
@@ -65,29 +65,34 @@
     ltp_groups += ltp_fs
 
     def runltp(self, ltp_group):
-            cmd = '/opt/ltp/runltp -f %s -p -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+            # LTP appends to log files, so ensure we start with a clean log
+            self.target.deleteFiles("/opt/ltp/results/", ltp_group)
+
+            cmd = '/opt/ltp/runltp -f %s -q -r /opt/ltp -l /opt/ltp/results/%s -I 1 -d /opt/ltp' % (ltp_group, ltp_group)
+
             starttime = time.time()
             (status, output) = self.target.run(cmd)
             endtime = time.time()
 
+            # Write the console log to disk for convenience
             with open(os.path.join(self.ltptest_log_dir, "%s-raw.log" % ltp_group), 'w') as f:
                 f.write(output)
 
+            # Also put the console log into the test result JSON
             self.extras['ltpresult.rawlogs']['log'] = self.extras['ltpresult.rawlogs']['log'] + output
 
-            # copy nice log from DUT
-            dst = os.path.join(self.ltptest_log_dir, "%s" %  ltp_group )
+            # Copy the machine-readable test results locally so we can parse it
+            dst = os.path.join(self.ltptest_log_dir, ltp_group)
             remote_src = "/opt/ltp/results/%s" % ltp_group 
             (status, output) = self.target.copyFrom(remote_src, dst, True)
-            msg = 'File could not be copied. Output: %s' % output
             if status:
+                msg = 'File could not be copied. Output: %s' % output
                 self.target.logger.warning(msg)
 
             parser = LtpParser()
             results, sections  = parser.parse(dst)
 
-            runtime = int(endtime-starttime)
-            sections['duration'] = runtime
+            sections['duration'] = int(endtime-starttime)
             self.sections[ltp_group] =  sections
 
             failed_tests = {}
diff --git a/poky/meta/lib/oeqa/runtime/cases/rpm.py b/poky/meta/lib/oeqa/runtime/cases/rpm.py
index fa86eb0..a4ba4e6 100644
--- a/poky/meta/lib/oeqa/runtime/cases/rpm.py
+++ b/poky/meta/lib/oeqa/runtime/cases/rpm.py
@@ -59,8 +59,8 @@
                     return
                 time.sleep(1)
             user_pss = [ps for ps in output.split("\n") if u + ' ' in ps]
-            msg = "There're %s 's process(es) still running: %s".format(u, "\n".join(user_pss))
-            assertTrue(True, msg=msg)
+            msg = "User %s has processes still running: %s" % (u, "\n".join(user_pss))
+            self.fail(msg=msg)
 
         def unset_up_test_user(u):
             # ensure no test1 process in running
diff --git a/poky/meta/lib/oeqa/runtime/context.py b/poky/meta/lib/oeqa/runtime/context.py
index 0c5d186..cb7227a 100644
--- a/poky/meta/lib/oeqa/runtime/context.py
+++ b/poky/meta/lib/oeqa/runtime/context.py
@@ -10,7 +10,6 @@
 from oeqa.core.context import OETestContext, OETestContextExecutor
 from oeqa.core.target.ssh import OESSHTarget
 from oeqa.core.target.qemu import OEQemuTarget
-from oeqa.utils.dump import HostDumper
 
 from oeqa.runtime.loader import OERuntimeTestLoader
 
@@ -20,12 +19,11 @@
                         os.path.dirname(os.path.abspath(__file__)), "files")
 
     def __init__(self, td, logger, target,
-                 host_dumper, image_packages, extract_dir):
+                 image_packages, extract_dir):
         super(OERuntimeTestContext, self).__init__(td, logger)
 
         self.target = target
         self.image_packages = image_packages
-        self.host_dumper = host_dumper
         self.extract_dir = extract_dir
         self._set_target_cmds()
 
@@ -199,10 +197,6 @@
 
         return image_packages
 
-    @staticmethod
-    def getHostDumper(cmds, directory):
-        return HostDumper(cmds, directory)
-
     def _process_args(self, logger, args):
         if not args.packages_manifest:
             raise TypeError('Manifest file not provided')
@@ -215,9 +209,6 @@
         self.tc_kwargs['init']['target'] = \
                 OERuntimeTestContextExecutor.getTarget(args.target_type,
                         None, args.target_ip, args.server_ip, **target_kwargs)
-        self.tc_kwargs['init']['host_dumper'] = \
-                OERuntimeTestContextExecutor.getHostDumper(None,
-                        args.host_dumper_dir)
         self.tc_kwargs['init']['image_packages'] = \
                 OERuntimeTestContextExecutor.readPackagesManifest(
                         args.packages_manifest)
diff --git a/poky/meta/lib/oeqa/selftest/cases/bblayers.py b/poky/meta/lib/oeqa/selftest/cases/bblayers.py
index b048948..8faa060 100644
--- a/poky/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/poky/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -85,8 +85,9 @@
         result = runCmd('bitbake-layers show-recipes -i image')
         self.assertIn('core-image-minimal', result.output)
         self.assertNotIn('mtd-utils:', result.output)
-        result = runCmd('bitbake-layers show-recipes -i cmake,pkgconfig')
+        result = runCmd('bitbake-layers show-recipes -i meson,pkgconfig')
         self.assertIn('libproxy:', result.output)
+        result = runCmd('bitbake-layers show-recipes -i cmake,pkgconfig')
         self.assertNotIn('mtd-utils:', result.output) # doesn't inherit either
         self.assertNotIn('wget:', result.output) # doesn't inherit cmake
         self.assertNotIn('waffle:', result.output) # doesn't inherit pkgconfig
diff --git a/poky/meta/lib/oeqa/selftest/cases/cve_check.py b/poky/meta/lib/oeqa/selftest/cases/cve_check.py
index 9534c97..60cecd1 100644
--- a/poky/meta/lib/oeqa/selftest/cases/cve_check.py
+++ b/poky/meta/lib/oeqa/selftest/cases/cve_check.py
@@ -207,18 +207,34 @@
             self.assertEqual(len(report["package"]), 1)
             package = report["package"][0]
             self.assertEqual(package["name"], "logrotate")
-            found_cves = { issue["id"]: issue["status"] for issue in package["issue"]}
+            found_cves = {}
+            for issue in package["issue"]:
+                found_cves[issue["id"]] = {
+                    "status" : issue["status"],
+                    "detail" : issue["detail"] if "detail" in issue else "",
+                    "description" : issue["description"] if "description" in issue else ""
+                }
             # m4 CVE should not be in logrotate
             self.assertNotIn("CVE-2008-1687", found_cves)
             # logrotate has both Patched and Ignored CVEs
             self.assertIn("CVE-2011-1098", found_cves)
-            self.assertEqual(found_cves["CVE-2011-1098"], "Patched")
+            self.assertEqual(found_cves["CVE-2011-1098"]["status"], "Patched")
+            self.assertEqual(len(found_cves["CVE-2011-1098"]["detail"]), 0)
+            self.assertEqual(len(found_cves["CVE-2011-1098"]["description"]), 0)
+            detail = "not-applicable-platform"
+            description = "CVE is debian, gentoo or SUSE specific on the way logrotate was installed/used"
             self.assertIn("CVE-2011-1548", found_cves)
-            self.assertEqual(found_cves["CVE-2011-1548"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1548"]["status"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1548"]["detail"], detail)
+            self.assertEqual(found_cves["CVE-2011-1548"]["description"], description)
             self.assertIn("CVE-2011-1549", found_cves)
-            self.assertEqual(found_cves["CVE-2011-1549"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1549"]["status"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1549"]["detail"], detail)
+            self.assertEqual(found_cves["CVE-2011-1549"]["description"], description)
             self.assertIn("CVE-2011-1550", found_cves)
-            self.assertEqual(found_cves["CVE-2011-1550"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1550"]["status"], "Ignored")
+            self.assertEqual(found_cves["CVE-2011-1550"]["detail"], detail)
+            self.assertEqual(found_cves["CVE-2011-1550"]["description"], description)
 
         self.assertExists(summary_json)
         check_m4_json(summary_json)
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index 4c8e375..14a80d5 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -366,6 +366,38 @@
             bindir = bindir[1:]
         self.assertTrue(os.path.isfile(os.path.join(installdir, bindir, 'pv')), 'pv binary not found in D')
 
+    def test_devtool_add_binary(self):
+        # Create a binary package containing a known test file
+        tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+        self.track_for_cleanup(tempdir)
+        pn = 'tst-bin'
+        pv = '1.0'
+        test_file_dir     = "var/lib/%s/" % pn
+        test_file_name    = "test_file"
+        test_file_content = "TEST CONTENT"
+        test_file_package_root = os.path.join(tempdir, pn)
+        test_file_dir_full = os.path.join(test_file_package_root, test_file_dir)
+        bb.utils.mkdirhier(test_file_dir_full)
+        with open(os.path.join(test_file_dir_full, test_file_name), "w") as f:
+           f.write(test_file_content)
+        bin_package_path = os.path.join(tempdir, "%s.tar.gz" % pn)
+        runCmd("tar czf %s -C %s ." % (bin_package_path, test_file_package_root))
+
+        # Test devtool add -b on the binary package
+        self.track_for_cleanup(self.workspacedir)
+        self.add_command_to_tearDown('bitbake -c cleansstate %s' % pn)
+        self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+        result = runCmd('devtool add  -b %s %s' % (pn, bin_package_path))
+        self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created')
+
+        # Build the resulting recipe
+        result = runCmd('devtool build %s' % pn)
+        installdir = get_bb_var('D', pn)
+        self.assertTrue(installdir, 'Could not query installdir variable')
+
+        # Check that a known file from the binary package has indeed been installed
+        self.assertTrue(os.path.isfile(os.path.join(installdir, test_file_dir, test_file_name)), '%s not found in D' % test_file_name)
+
     def test_devtool_add_git_local(self):
         # We need dbus built so that DEPENDS recognition works
         bitbake('dbus')
diff --git a/poky/meta/lib/oeqa/selftest/cases/distrodata.py b/poky/meta/lib/oeqa/selftest/cases/distrodata.py
index c83a3a7..111bd3c 100644
--- a/poky/meta/lib/oeqa/selftest/cases/distrodata.py
+++ b/poky/meta/lib/oeqa/selftest/cases/distrodata.py
@@ -92,7 +92,7 @@
 
         def is_maintainer_exception(entry):
             exceptions = ["musl", "newlib", "linux-yocto", "linux-dummy", "mesa-gl", "libgfortran", "libx11-compose-data",
-                          "cve-update-db-native","cve-update-nvd2-native",]
+                          "cve-update-nvd2-native",]
             for i in exceptions:
                  if i in entry:
                      return True
diff --git a/poky/meta/lib/oeqa/selftest/cases/fitimage.py b/poky/meta/lib/oeqa/selftest/cases/fitimage.py
index 7bc171e..9383d0c 100644
--- a/poky/meta/lib/oeqa/selftest/cases/fitimage.py
+++ b/poky/meta/lib/oeqa/selftest/cases/fitimage.py
@@ -33,6 +33,8 @@
 # RAM disk variables including load address and entrypoint for kernel and RAM disk
 IMAGE_FSTYPES += "cpio.gz"
 INITRAMFS_IMAGE = "core-image-minimal"
+# core-image-minimal is used as initramfs here, drop the rootfs suffix
+IMAGE_NAME_SUFFIX:pn-core-image-minimal = ""
 UBOOT_RD_LOADADDRESS = "0x88000000"
 UBOOT_RD_ENTRYPOINT = "0x88000000"
 UBOOT_LOADADDRESS = "0x80080000"
diff --git a/poky/meta/lib/oeqa/selftest/cases/glibc.py b/poky/meta/lib/oeqa/selftest/cases/glibc.py
index a446543..4ec4b85 100644
--- a/poky/meta/lib/oeqa/selftest/cases/glibc.py
+++ b/poky/meta/lib/oeqa/selftest/cases/glibc.py
@@ -28,7 +28,7 @@
             features.append('TOOLCHAIN_TEST_HOST_USER = "root"')
             features.append('TOOLCHAIN_TEST_HOST_PORT = "22"')
             # force single threaded test execution
-            features.append('EGLIBCPARALLELISM_task-check:pn-glibc-testsuite = "PARALLELMFLAGS="-j1""')
+            features.append('EGLIBCPARALLELISM:task-check:pn-glibc-testsuite = "PARALLELMFLAGS="-j1""')
         self.write_config("\n".join(features))
 
         bitbake("glibc-testsuite -c check")
diff --git a/poky/meta/lib/oeqa/selftest/cases/rust.py b/poky/meta/lib/oeqa/selftest/cases/rust.py
new file mode 100644
index 0000000..7a0fd70
--- /dev/null
+++ b/poky/meta/lib/oeqa/selftest/cases/rust.py
@@ -0,0 +1,90 @@
+# SPDX-License-Identifier: MIT
+import os
+import subprocess
+from oeqa.core.decorator import OETestTag
+from oeqa.core.case import OEPTestResultTestCase
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars, runqemu, Command
+from oeqa.utils.sshcontrol import SSHControl
+
+def parse_results(filename):
+    tests = {}
+    with open(filename, "r") as f:
+        lines = f.readlines()
+        for line in lines:
+            if "..." in line and "test [" in line:
+                test = line.split("test ")[1].split(" ... ")[0]
+                if "] " in test:
+                    test = test.split("] ", 1)[1]
+                result = line.split(" ... ")[1].strip()
+                if result == "ok":
+                    result = "PASS"
+                elif result == "failed":
+                    result = "FAIL"
+                elif "ignored" in result:
+                    result = "SKIPPED"
+                if test in tests:
+                    if tests[test] != result:
+                        print("Duplicate and mismatching result %s for %s" % (result, test))
+                    else:
+                        print("Duplicate result %s for %s" % (result, test))
+                else:
+                    tests[test] = result
+    return tests
+
+# Total time taken for testing is of about 2hr 20min, with PARALLEL_MAKE set to 40 number of jobs.
+@OETestTag("toolchain-system")
+@OETestTag("toolchain-user")
+@OETestTag("runqemu")
+class RustSelfTestSystemEmulated(OESelftestTestCase, OEPTestResultTestCase):
+    def test_rust(self, *args, **kwargs):
+        # build remote-test-server before image build
+        recipe = "rust"
+        bitbake("{} -c test_compile".format(recipe))
+        builddir = get_bb_var("RUSTSRC", "rust")
+        # build core-image-minimal with required packages
+        default_installed_packages = ["libgcc", "libstdc++", "libatomic", "libgomp"]
+        features = []
+        features.append('IMAGE_FEATURES += "ssh-server-dropbear"')
+        features.append('CORE_IMAGE_EXTRA_INSTALL += "{0}"'.format(" ".join(default_installed_packages)))
+        self.write_config("\n".join(features))
+        bitbake("core-image-minimal")
+        # wrap the execution with a qemu instance.
+        # Tests are run with 512 tasks in parallel to execute all tests very quickly
+        with runqemu("core-image-minimal", runqemuparams = "nographic", qemuparams = "-m 512") as qemu:
+            # Copy remote-test-server to image through scp
+            host_sys = get_bb_var("RUST_BUILD_SYS", "rust")
+            ssh = SSHControl(ip=qemu.ip, logfile=qemu.sshlog, user="root")
+            ssh.copy_to(builddir + "/build/" + host_sys + "/stage1-tools-bin/remote-test-server","~/")
+            # Execute remote-test-server on image through background ssh
+            command = '~/remote-test-server --bind 0.0.0.0:12345 -v'
+            sshrun=subprocess.Popen(("ssh", '-o',  'UserKnownHostsFile=/dev/null', '-o',  'StrictHostKeyChecking=no', '-f', "root@%s" % qemu.ip, command), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+            # Get the values of variables.
+            tcpath = get_bb_var("TARGET_SYS", "rust")
+            targetsys = get_bb_var("RUST_TARGET_SYS", "rust")
+            rustlibpath = get_bb_var("WORKDIR", "rust")
+            tmpdir = get_bb_var("TMPDIR", "rust")
+
+            # Exclude the test folders that error out while building
+            # TODO: Fix the errors and include them for testing
+            # no-fail-fast: Run all tests regardless of failure.
+            # bless: First runs rustfmt to format the codebase,
+            # then runs tidy checks.
+            testargs = "--exclude tests/rustdoc --exclude src/tools/rust-analyzer  --exclude tests/rustdoc-json  --exclude tests/run-make-fulldeps --exclude src/tools/tidy --exclude src/tools/rustdoc-themes --exclude src/rustdoc-json-types --exclude src/librustdoc --exclude src/doc/unstable-book --exclude src/doc/rustdoc --exclude src/doc/rustc --exclude compiler/rustc --exclude library/panic_abort --exclude library/panic_unwind --exclude src/tools/lint-docs  --exclude tests/rustdoc-js-std --doc --no-fail-fast --bless"
+
+            # Set path for target-poky-linux-gcc, RUST_TARGET_PATH and hosttools.
+            cmd = " export PATH=%s/recipe-sysroot-native/usr/bin:$PATH;" % rustlibpath
+            cmd = cmd + " export TARGET_VENDOR=\"-poky\";"
+            cmd = cmd + " export PATH=%s/recipe-sysroot-native/usr/bin/%s:%s/hosttools:$PATH;" % (rustlibpath, tcpath, tmpdir)
+            cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % rustlibpath
+            # Trigger testing.
+            cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
+            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 2>&1;" % (builddir, testargs, targetsys)
+            runCmd(cmd)
+
+            ptestsuite = "rust"
+            self.ptest_section(ptestsuite, logfile = builddir + "/summary.txt")
+            filename = builddir + "/summary.txt"
+            test_results = parse_results(filename)
+            for test in test_results:
+                self.ptest_result(ptestsuite, test, test_results[test])
diff --git a/poky/meta/lib/oeqa/targetcontrol.py b/poky/meta/lib/oeqa/targetcontrol.py
index d686fe0..e21655c 100644
--- a/poky/meta/lib/oeqa/targetcontrol.py
+++ b/poky/meta/lib/oeqa/targetcontrol.py
@@ -104,7 +104,6 @@
             self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), d.getVar("KERNEL_IMAGETYPE", False) + '-' + d.getVar('MACHINE', False) + '.bin')
         self.qemulog = os.path.join(self.testdir, "qemu_boot_log.%s" % self.datetime)
         dump_target_cmds = d.getVar("testimage_dump_target")
-        dump_host_cmds = d.getVar("testimage_dump_host")
         dump_monitor_cmds = d.getVar("testimage_dump_monitor")
         dump_dir = d.getVar("TESTIMAGE_DUMP_DIR")
         if not dump_dir:
@@ -141,7 +140,6 @@
                             boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT")),
                             use_kvm = use_kvm,
                             dump_dir = dump_dir,
-                            dump_host_cmds = dump_host_cmds,
                             logger = logger,
                             tmpfsdir = d.getVar("RUNQEMU_TMPFS_DIR"),
                             serial_ports = len(d.getVar("SERIAL_CONSOLES").split()))
diff --git a/poky/meta/lib/oeqa/utils/dump.py b/poky/meta/lib/oeqa/utils/dump.py
index d420b49..d4d2713 100644
--- a/poky/meta/lib/oeqa/utils/dump.py
+++ b/poky/meta/lib/oeqa/utils/dump.py
@@ -51,9 +51,7 @@
         self.dump_dir = dump_dir
 
     def _construct_filename(self, command):
-        if isinstance(self, HostDumper):
-            prefix = "host"
-        elif isinstance(self, TargetDumper):
+        if isinstance(self, TargetDumper):
             prefix = "target"
         elif isinstance(self, MonitorDumper):
             prefix = "qmp"
@@ -76,22 +74,6 @@
             with open(fullname, 'w') as dump_file:
                 dump_file.write(output)
 
-class HostDumper(BaseDumper):
-    """ Class to get dumps from the host running the tests """
-
-    def __init__(self, cmds, parent_dir):
-        super(HostDumper, self).__init__(cmds, parent_dir)
-
-    def dump_host(self, dump_dir=""):
-        if dump_dir:
-            self.dump_dir = dump_dir
-        env = os.environ.copy()
-        env['PATH'] = '/usr/sbin:/sbin:/usr/bin:/bin'
-        env['COLUMNS'] = '9999'
-        for cmd in self.cmds:
-            result = runCmd(cmd, ignore_status=True, env=env)
-            self._write_dump(cmd.split()[0], result.output)
-
 class TargetDumper(BaseDumper):
     """ Class to get dumps from target, it only works with QemuRunner.
         Will give up permanently after 5 errors from running commands over
diff --git a/poky/meta/lib/oeqa/utils/logparser.py b/poky/meta/lib/oeqa/utils/logparser.py
index 8054acc..496d9e0 100644
--- a/poky/meta/lib/oeqa/utils/logparser.py
+++ b/poky/meta/lib/oeqa/utils/logparser.py
@@ -4,7 +4,7 @@
 # SPDX-License-Identifier: MIT
 #
 
-import sys
+import enum
 import os
 import re
 
@@ -106,30 +106,48 @@
                     f.write(status + ": " + test_name + "\n")
 
 
-# ltp log parsing
-class LtpParser(object):
-    def __init__(self):
-        self.results = {}
-        self.section = {'duration': "", 'log': ""}
-
+class LtpParser:
+    """
+    Parse the machine-readable LTP log output into a ptest-friendly data structure.
+    """
     def parse(self, logfile):
-        test_regex = {}
-        test_regex['PASSED'] = re.compile(r"PASS")
-        test_regex['FAILED'] = re.compile(r"FAIL")
-        test_regex['SKIPPED'] = re.compile(r"SKIP")
+        results = {}
+        # Aaccumulate the duration here but as the log rounds quick tests down
+        # to 0 seconds this is very much a lower bound. The caller can replace
+        # the value.
+        section = {"duration": 0, "log": ""}
 
-        with open(logfile, errors='replace') as f:
+        class LtpExitCode(enum.IntEnum):
+            # Exit codes as defined in ltp/include/tst_res_flags.h
+            TPASS = 0  # Test passed flag
+            TFAIL = 1  # Test failed flag
+            TBROK = 2  # Test broken flag
+            TWARN = 4  # Test warning flag
+            TINFO = 16 # Test information flag
+            TCONF = 32 # Test not appropriate for configuration flag
+
+        with open(logfile, errors="replace") as f:
+            # Lines look like this:
+            # tag=cfs_bandwidth01 stime=1689762564 dur=0 exit=exited stat=32 core=no cu=0 cs=0
             for line in f:
-                for t in test_regex:
-                    result = test_regex[t].search(line)
-                    if result:
-                        self.results[line.split()[0].strip()] = t
+                if not line.startswith("tag="):
+                    continue
 
-        for test in self.results:
-            result = self.results[test]
-            self.section['log'] = self.section['log'] + ("%s: %s\n" % (result.strip()[:-2], test.strip()))
+                values = dict(s.split("=") for s in line.strip().split())
 
-        return self.results, self.section
+                section["duration"] += int(values["dur"])
+                exitcode = int(values["stat"])
+                if values["exit"] == "exited" and exitcode == LtpExitCode.TCONF:
+                    # Exited normally with the "invalid configuration" code
+                    results[values["tag"]] = "SKIPPED"
+                elif exitcode == LtpExitCode.TPASS:
+                    # Successful exit
+                    results[values["tag"]] = "PASSED"
+                else:
+                    # Other exit
+                    results[values["tag"]] = "FAILED"
+
+        return results, section
 
 
 # ltp Compliance log parsing
diff --git a/poky/meta/lib/oeqa/utils/qemurunner.py b/poky/meta/lib/oeqa/utils/qemurunner.py
index 0ef8cf0..22cf258 100644
--- a/poky/meta/lib/oeqa/utils/qemurunner.py
+++ b/poky/meta/lib/oeqa/utils/qemurunner.py
@@ -21,7 +21,6 @@
 import codecs
 import logging
 import tempfile
-from oeqa.utils.dump import HostDumper
 from collections import defaultdict
 import importlib
 
@@ -33,8 +32,8 @@
 
 class QemuRunner:
 
-    def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, dump_host_cmds,
-                 use_kvm, logger, use_slirp=False, serial_ports=2, boot_patterns = defaultdict(str), use_ovmf=False, workdir=None, tmpfsdir=None):
+    def __init__(self, machine, rootfs, display, tmpdir, deploy_dir_image, logfile, boottime, dump_dir, use_kvm, logger, use_slirp=False,
+     serial_ports=2, boot_patterns = defaultdict(str), use_ovmf=False, workdir=None, tmpfsdir=None):
 
         # Popen object for runqemu
         self.runqemu = None
@@ -69,7 +68,6 @@
         if not workdir:
             workdir = os.getcwd()
         self.qemu_pidfile = workdir + '/pidfile_' + str(os.getpid())
-        self.host_dumper = HostDumper(dump_host_cmds, dump_dir)
         self.monitorpipe = None
 
         self.logger = logger
@@ -138,7 +136,6 @@
                 self.logger.error('runqemu exited with code %d' % self.runqemu.returncode)
                 self.logger.error('Output from runqemu:\n%s' % self.getOutput(self.runqemu.stdout))
                 self.stop()
-                self._dump_host()
 
     def start(self, qemuparams = None, get_ip = True, extra_bootparams = None, runqemuparams='', launch_cmd=None, discard_writes=True):
         env = os.environ.copy()
@@ -286,7 +283,6 @@
                 if self.runqemu.returncode:
                     # No point waiting any longer
                     self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode)
-                    self._dump_host()
                     self.logger.warning("Output from runqemu:\n%s" % self.getOutput(output))
                     self.stop()
                     return False
@@ -314,7 +310,6 @@
             ps = subprocess.Popen(['ps', 'axww', '-o', 'pid,ppid,pri,ni,command '], stdout=subprocess.PIPE).communicate()[0]
             processes = ps.decode("utf-8")
             self.logger.debug("Running processes:\n%s" % processes)
-            self._dump_host()
             op = self.getOutput(output)
             self.stop()
             if op:
@@ -430,7 +425,6 @@
                     self.logger.error("Couldn't get ip from qemu command line and runqemu output! "
                                  "Here is the qemu command line used:\n%s\n"
                                  "and output from runqemu:\n%s" % (cmdline, out))
-                    self._dump_host()
                     self.stop()
                     return False
 
@@ -517,7 +511,6 @@
             lines = tail(bootlog if bootlog else self.msg)
             self.logger.warning("Last 25 lines of text (%d):\n%s" % (len(bootlog), lines))
             self.logger.warning("Check full boot log: %s" % self.logfile)
-            self._dump_host()
             self.stop()
             return False
 
@@ -698,13 +691,6 @@
                     status = 1
         return (status, str(data))
 
-
-    def _dump_host(self):
-        self.host_dumper.create_dir("qemu")
-        self.logger.warning("Qemu ended unexpectedly, dump data from host"
-                " is in %s" % self.host_dumper.dump_dir)
-        self.host_dumper.dump_host()
-
 # This class is for reading data from a socket and passing it to logfunc
 # to be processed. It's completely event driven and has a straightforward
 # event loop. The mechanism for stopping the thread is a simple pipe which