The diff is quite large, but a partial comparison can be seen:
https://github.com/fkie-cad/nvd-json-data-feeds/compare/v2026.06.24-000003..v2026.07.23-000007
Signed-off-by: Tim Orling <tim.orling@konsulko.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The diff is quite large, but a partial comparison can be seen:
https://github.com/CVEProject/cvelistV5/compare/2026-06-24_baseline..2026-07-23_baseline
Signed-off-by: Tim Orling <tim.orling@konsulko.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Tim Orling [Thu, 23 Jul 2026 20:48:31 +0000 (13:48 -0700)]
fragments/yocto/sbom-cve-check: fix conflict with tag=
Fixes: 00864cf5bc meta: Add tag in SRC_URI to multiple recipes
When this fragment is enabled, SRCREV is set to AUTOREV, but this then
causes do_unpack to fail for both sbom-cve-check-update-cvelist-native
and sbom-cve-check-update-nvd-native, since the tag SRCREV does not
match with the 'main' HEAD AUTOREV.
Rather than allow the tag to float, for those that desire reproducible
builds with just IMAGES_CLASSES:append = " sbom-cve-check" and not
this fragment, set SRC_URI **without** the tag= in this fragment.
Signed-off-by: Tim Orling <tim.orling@konsulko.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Richard Purdie [Thu, 23 Jul 2026 12:51:13 +0000 (13:51 +0100)]
resulttool: Add support for ptests results for both musl and glibc
The code currently assumed a DISTRO has one libc and can't handle the case
where there are ptest results for both. Add in TCLIBC to the result data
to allow them to be differentiated and add support in the reporting to
see the difference between them.
We need to carefully handle the case where there is no TCLIBC data in the
results as the code currently assumes all data is present.
[YOCTO #16357]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Mon, 20 Jul 2026 19:45:10 +0000 (20:45 +0100)]
classes/cargo: remove BUILD_MODE, replace with CARGO_PROFILE
The BUILD_MODE variable appears to be a way to select the Cargo build profile
that is used, but it can't be assigned because it and other pieces of
code base their logic on the value of DEBUG_BUILD.
Instead of a BUILD_MODE variable that is "--release" or "" depending on
the value of DEBUG_BUILD, replace it with a clear CARGO_PROFILE variable
that selects the profile to use. The default has the same behaviour as before:
either "release" or "dev" based on DEBUG_BUILD.
This profile is then passed to cargo, and used to construct paths in the
build tree (with the caveat that the "dev" profile puts files in "debug").
kernel.bbclass: pass args instead of tuple of args to runstrip()
Since commit 7c99f90079e7 ("lib/package/utils: Improve
multiprocess_launch argument passing"), runstrip() now expects arguments
individually instead as a big tuple so let's fix the one user in OE-Core
of that function which we forgot to migrate.
Fixes: 7c99f90079e7 ("lib/package/utils: Improve multiprocess_launch argument passing") Reported-by: Robert P. J. Day <rpjday@crashcourse.ca> Closes: https://lore.kernel.org/openembedded-core/319bb00c-9712-4aa7-38b0-e1ad2bab840b@crashcourse.ca/ Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
oeqa/selftest/liboe: cover oe.path's own path logic
Add in-process coverage for oe.path's join(), is_path_parent(),
symlink(), make_relative_symlink(), canonicalize(), which_wild() and
realpath(), alongside the existing copytree tests.
The cases pin behaviour that is easy to regress: __realpath() falls back
to "not a directory" when os.path.isdir() raises; symlink(force=True)
replaces the literal destination even when its name contains glob
metacharacters, and never removes a pattern sibling; and canonicalize()
skips empty tokens so '', None, and a stray separator do not inject the
current working directory.
realpath() also gets its harder contracts covered: a self-referential
link and an A->B->A cycle both raise ELOOP rather than spinning, a
symlink several components deep still resolves under use_physdir, and a
missing trailing component raises ENOENT by default but is tolerated
with assume_dir=True. symlink() is shown to stage a dangling link whose
target does not exist yet, make_relative_symlink() is exercised several
directories below its target so the multi-level "../" loop runs, and
canonicalize() drops a run of "$" tokens and preserves a trailing slash.
oe/path: canonicalize('') should return '' rather than the cwd
canonicalize() splits its input on the separator and runs each token
through os.path.realpath(). os.path.realpath('') returns the current
working directory, so canonicalize('') and canonicalize(None) wrongly
produced the cwd instead of an empty string, and a stray separator (for
example "a,,b") injected a spurious cwd entry into the result.
Skip empty tokens alongside the existing unexpanded-variable skip so only
real paths are canonicalized.
oe/path: don't glob-expand the destination in symlink(force=True)
symlink(source, destination, force=True) cleared an existing destination
by calling remove(destination). remove() treats its argument as a glob
pattern (it iterates glob.glob(path)), so a destination whose name
contains glob metacharacters is mishandled: a name such as "foo[bar]"
may fail to match itself and be left in place, or a pattern could match
and delete unrelated files.
Remove the literal destination instead: unlink it directly, and fall
back to rmtree() for a directory, ignoring ENOENT. This keeps the
force=True semantics without passing the path through glob.
oe/path: fix bare `false` NameError in __realpath's isdir guard
__realpath() wraps its os.path.isdir() probe in a bare except that
assigns `is_dir = false`. `false` is not a Python name, so when
os.path.isdir() does raise (for example on an ELOOP path), the handler
meant to absorb the error instead raises NameError and aborts the walk.
Use the builtin False so the guard degrades to "not a directory" as
intended.
Peter Marko [Wed, 15 Jul 2026 21:58:51 +0000 (23:58 +0200)]
libxfont: remove recipe
This recipe is obsolete and successor libxfont2 is available.
Nothing in oe-core or meta-openembedded depends on it anymore.
Signed-off-by: Peter Marko <peter.marko@siemens.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
license: fix list_licenses() crash on CLOSED and empty licenses
oe.license.list_licenses() passes the result of parse_legacy_license()
straight into walk_license(), which unconditionally iterates
node.children. For LICENSE = "CLOSED" (and for an empty license string)
parse_legacy_license() returns None, so walk_license(None) dereferences
None.children and aborts do_package_qa with:
AttributeError: 'NoneType' object has no attribute 'children'
This breaks packaging for every CLOSED-licensed recipe reaching the
obsolete-license QA check.
Guard the walk against a None node, mirroring the existing "if node:"
check in the neighbouring apply_pkg_license_exclusion().
kernel-fit-image: introduce FIT_OS variable to override 'os' field
U-Boot can load an EFI application from a FIT image; this requires
setting the OS to "efi" (usually in combination with type
"kernel_noload"). Doing so is a convenient approach for giving the OS
access to EFI services while preserving other benefits of FIT image boot.
kernel-fit-image: make kernel entry point and load address optional
With image type kernel_noload, these are not used, and with [1] and
[2], U-Boot will not require them anymore for this image type. Allow
omitting them from image generation.
John Ripple [Wed, 22 Jul 2026 20:08:29 +0000 (14:08 -0600)]
go-vendor.bbclass: Run vendor_unlink task under fakeroot
do_install and do_package both run under fakeroot (pseudo), which keeps
pseudo's ownership/inode database in sync with what is actually on disk
under D. do_vendor_unlink runs between them but was never marked
fakeroot, so its os.unlink() of the vendor symlink happened outside of
pseudo's view: the file disappeared from disk but pseudo's database
still held a stale record for that path/inode.
The next fakeroot task to touch that path (do_package) then finds the
on-disk state and pseudo's database disagreeing, and pseudo aborts with
"path mismatch" / "inode mismatch" errors, failing do_package.
Mark do_vendor_unlink fakeroot, matching do_install and do_package, so
its filesystem operations are tracked by pseudo consistently.
Signed-off-by: John Ripple <john.ripple@keysight.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
John Ripple [Wed, 22 Jul 2026 20:08:28 +0000 (14:08 -0600)]
oeqa/selftest: Add go-vendor.bbclass selftest suite
Add govendor.py with two test classes that cover the behaviors fixed and
defined in go-vendor.bbclass:
GoVendorSrcUriTests (offline, ~10 s): unit tests for go_src_uri() parsed
via bb.tinfoil; verifies the basic URI shape, path/pathmajor/subdir/replaces
encoding, and that non-git VCS omits the git-specific nobranch/protocol flags.
GoVendorTaskTests: runs do_go_vendor once against the real recipetool-go-test
project and checks that external deps land in vendor/, *_test.go files are
excluded, pathmajor=/v5 falls back to the repo root when no v5/ subdir exists,
modules.txt is reproduced in vendor/, a local replacement (./is) appears as
a symlink, and the S/src/GO_IMPORT/vendor -> S/src/import/vendor symlink is
created.
Exclude the govendor test recipes from world builds since they are only meant
to be built directly by the govendor test suite.
Signed-off-by: John Ripple <john.ripple@keysight.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
John Ripple [Wed, 22 Jul 2026 20:08:27 +0000 (14:08 -0600)]
go-vendor.bbclass: Fix test file exclusion and license propagation
Two bugs in do_go_vendor:
1. The shutil.ignore_patterns glob was "*._test.go" (with an extra dot),
which never matches standard Go test files (*_test.go). Remove the
extra dot.
2. The license-propagation block used os.path.join(src, "LICENSE") as the
copy destination, writing into the already-processed vendor.fetch source
tree rather than into the vendor destination directory. Switch to
os.path.join(dst, "LICENSE") so the LICENSE lands in vendor/ where go
tools and licence scanners expect it. Also fix the guard condition from
not os.path.exists(subdir) (checking an unrelated relative name) to
not os.path.exists(subdirLicense) (checking the actual target).
Signed-off-by: John Ripple <john.ripple@keysight.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The CVE databases track xmltodict as xmltodict:xmltodict, so the
default python:xmltodict vendor prefix never matches and its CVEs
are not evaluated at all. Use the exact vendor:product pair.
The only existing CVE (CVE-2025-9375, disputed by upstream) affects
0.14.2 before 0.15.1, so it resolves as not affected at 1.0.4.
Signed-off-by: mark.yang <mark.yang@lge.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The pypi class default python:pyyaml vendor prefix matches nothing,
so PyYAML CVEs are not evaluated at all. The databases use two
vendor spellings: pyyaml in the NVD CPEs, and "Red Hat" (with a
space, not expressible as a vendor:product pair) in CVE-2020-1747's
CNA record. Use the bare product name to cover both.
All four existing CVEs (CVE-2017-18342, CVE-2019-20477,
CVE-2020-1747, CVE-2020-14343) are fixed by 5.4, so they resolve as
not affected at 6.0.3.
Signed-off-by: mark.yang <mark.yang@lge.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
NVD tracks certifi as certifi:certifi, so the default python:certifi
vendor prefix never matches and its CVEs are not evaluated at all.
Use the exact vendor:product pair.
All three existing CVEs (CVE-2022-23491, CVE-2023-37920,
CVE-2024-39689) affect versions below 2026.6.17, so they resolve as
not affected; nothing new shows as unpatched.
Signed-off-by: mark.yang <mark.yang@lge.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Daniel Turull [Wed, 22 Jul 2026 07:31:37 +0000 (09:31 +0200)]
devtool: recognize perldelta.pod as a changelog file
perl's changelog extraction was picking up dist/Attribute-Handlers/Changes
instead of perl's own release notes. perl bundles dozens of dual-life CPAN
modules under dist/*/{Changes,ChangeLog}, and since perl's own top-level
Changes file is not updated per-release, none of the known
_CHANGELOG_BASENAMES matched the intended file. The extraction fell back to
picking the largest diff among the bundled subcomponent changelogs, which
is unrelated to the perl core changes being upgraded.
perl's actual per-version release notes live in pod/perldelta.pod, which
is large enough to still win the "largest diff" comparison once
recognized. Add it to _CHANGELOG_BASENAMES so it is considered like any
other known changelog filename.
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Thomas Perrot [Wed, 22 Jul 2026 08:24:14 +0000 (10:24 +0200)]
opensbi: bump to 1.9
This release has the following changes.
General:
Initialize stack guard using Zkr extension
Improved irqchip framework to handle wired interrupts and MSIs
Added unit test for string operations
Added NMI support using Smrnmi extension
Added timer events support
Added Vector context save/restore in domain switch
Added Floating-point context save/restore in domain switch
Added Common PMP encoding/decoding helper functions
Added UBSan support
Improved misaligned vector load/store emulation
Platforms:
Added SiFive development platform support
Removed kendryte/k210 platform
Added Tenstorrent Atlantis platform support
Drivers:
Added Andes last level cache controller driver
Added Andes ATCSMU suspend driver
Added Altera JTAG UART driver
Added MPXY client driver for RPMI MM service group
Added minimal SpacemiT I2C driver
Added SpacemiT P1 PMIC reset driver
Added Litex SoC reset driver
Signed-off-by: Thomas Perrot <thomas.perrot@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Daniel Turull [Tue, 21 Jul 2026 14:48:05 +0000 (16:48 +0200)]
scripts/contrib: add helper to report and fix missing SRC_URI ;tag=
Add a contrib helper which scans parsed recipes for git/gitsm SRC_URI
entries missing a ;tag= parameter. By default it reports only and does
not construct the BitBake fetcher. With --query-remote it queries
upstream tags and, when a well-known tag format resolves to the recipe's
SRCREV, suggests it as a ;tag= candidate. With --write (which implies
--query-remote) the unambiguous candidate is written back to the recipe.
Tag candidate search uses TAG_FORMATS (v${PV}, ${PV}, ${BPN}-${PV})
followed by UPSTREAM_CHECK_GITTAGREGEX if defined in the recipe. A
candidate is only accepted when it resolves to the recipe's literal
SRCREV on the remote, so floating revisions (AUTOREV) and non-release
PVs are skipped.
Writes are performed via oe.recipeutils.patch_recipe(), which also
localises the change to the .inc file when SRC_URI is defined there.
Only literal SRC_URI entries (no ${...} in the URL token) are modified;
the entry is edited with bb.fetch2.decodeurl()/encodeurl() so the
;tag= parameter is appended without disturbing the other parameters.
Every modified file is printed, with a reminder to review the result
with git diff and test it with bitbake -c fetch. With --recipe and
--layer the scan can be restricted to a single recipe or layer, and
--fail-on-missing makes the exit status reflect URLs still missing after
any writes complete.
AI-Generated: Kiro with Claude-opus-4.8 Signed-off-by: Daniel Turull <daniel.turull@ericsson.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Peter Marko [Wed, 22 Jul 2026 16:47:59 +0000 (18:47 +0200)]
libpng: set status for CVE-2026-40930
Per [1]:
* The vulnerable code originates from the third-party libpng-apng patch,
which adds APNG support to libpng 1.6.x.
* Upstream libpng 1.6.x (without the apng patch) is not affected.
As Yocto never included libpng-apng patch, we can ignore this CVE.
lib/oe/patch: avoid duplicated "From:" in generated patches
To workaround issues with groups.io/list.openembedded.org/lists.yoctoproject.org
rewriting "From:" email header, users are encouraged to put a "From:"
header inside the mail body.
When using the suggested git-send-email workflow, users may use the
git configs format.from=true and format.forceInBodyFrom=true:
man git-config:
> format.from
> Provides the default value for the --from option to
> format-patch. Accepts a boolean value, or a name and email
> address. If false, format-patch defaults to --no-from, using
> commit authors directly in the "From:" field of patch mails.
> If true, format-patch defaults to --from, using your committer
> identity in the "From:" field of patch mails and including a
> "From:" field in the body of the patch mail if different. If
> set to a non-boolean value, format-patch uses that value
> instead of your committer identity. Defaults to false.
>
> format.forceInBodyFrom
> Provides the default value for the --[no-]force-in-body-from
> option to format-patch. Defaults to false.
Putting those configuration locally in every groups.io related
repositories (That means every bitbake-setup repo setup) is tedious, to
avoid that the configuration can be made globally (e.g. in
~/.gitconfig):
$ git config --global format.from true
$ git config --global format.forceInBodyFrom true
... but then it applies to the devtool workspace.
With this configuration, devtool generated patches look like:
|From 4457b9d7805551e6b35efa25f998b63901d4bf86 Mon Sep 17 00:00:00 2001
|From: Yoann Congal <yoann.congal@smile.fr>
|Subject: [PATCH] Add a new line
|
|From: Original Author <author@example.org>
|
|[rest of the patch]
Notice the duplicated "From:" header.
To fix the double "From:" header, use the --no-from option for
git-format-patch to override this configuration and generate only one
"From: Original Author <...>" header.
"--no-from" is the git global default, so this is a noop for users with
default configuration.
Note: The "format.from" configuration is in git since v2.10 (in 2016),
and the --no-from option before that.
Add a new nativesdk packagegroup providing the clang, lld, and
llvm-bin dependencies needed to build external/out-of-tree
modules in the SDK using the LLVM/Clang toolchain.
Rust support in the kernel on riscv64 requires the LLVM/Clang
toolchain rather than gcc, so this packagegroup is intended to
be added alongside nativesdk-packagegroup-sdk-rust when the SDK
targets riscv64.
Add this to TOOLCHAIN_HOST_TASK to include it in the SDK.
Add a new nativesdk packagegroup providing the dependencies needed to
build external/out-of-tree rust modules in sdk.
Set PACKAGE_ARCH to TUNE_PKGARCH instead of the packagegroup
default of "all", since nativesdk-libclang is dynamically
renamed per build (e.g. nativesdk-libclang22.1), which is
incompatible with an allarch packagegroup.
Add this to TOOLCHAIN_HOST_TASK to include it in the SDK.
Introduce packagegroup-core-buildessential-rust to provide the
on-target dependencies required for building Rust-based kernel
modules, including the Rust toolchain, bindgen, and libclang.
Set PACKAGE_ARCH to TUNE_PKGARCH instead of the packagegroup
default of "all", since libclang is dynamically renamed per
build (e.g. libclang22.1), which is incompatible with an
allarch packagegroup.
On riscv64, also pull in clang, lld, and llvm-bin, since rust
support in the kernel on riscv64 requires the LLVM/Clang
toolchain rather than gcc.
Michal Sieron [Fri, 17 Jul 2026 12:53:53 +0000 (14:53 +0200)]
rpcbind: Drop dependency on quota
Originally added to provide rpcsvc/rquota.h header [1], it is no longer
needed since at least v1.2.6 where [2] was merged.
Not sure why, but distros like Arch and Ubuntu (possibly others too) did
not have this dependency at any point from what I could find.
Anyway, this builds just fine without quota present.
The recipe currently always inherits mime-xdg and keeps the installed desktop
files. Add a desktop PACKAGECONFIG option so configurations can disable that
desktop integration while preserving the current default behavior.
When desktop support is disabled, remove the generated desktop files during
do_install and avoid inheriting mime-xdg.
Jörg Sommer [Thu, 16 Jul 2026 20:06:47 +0000 (22:06 +0200)]
base-files: Install /etc/mtab in a systemd-friendly way
The old mtab pointed to /proc/mounts which itself is a symlink. Systemd
therefore tries to replace it with a symlink to /proc/self/mounts, but fails
on a read-only rootfs:
systemd-tmpfiles: symlink(../proc/self/mounts, /etc/mtab) failed: Read-only file system
Signed-off-by: Jörg Sommer <joerg.sommer@navimatix.de> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Upstream isn't clearly communicating their release strategy and plan:
https://www.gnupg.org/download/
In the beginning gnupg 2.5.x were development releases while 2.4.x was
the current maintenance branch. Over time, upstream started to indicate
that 2.5.x should be seen as proper releases, while 2.4.x reached EOL a few
weeks ago. There has not been any communcation about if and when 2.6 appears,
and if it does, will the odd-even version scheme still be followed.
Meanwhile, we do need to pick up the latest 2.5 releases with AUH, so let's drop
the odd-even pretense for now.
Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
On many platforms, the boot time can be reduced by booting without
initramfs. Allow omitting it instead of failing the build when
INITRAMFS_IMAGE is empty.
Ross Burton [Wed, 15 Jul 2026 16:43:51 +0000 (17:43 +0100)]
classes/testimage: capture systemd coredumps on failure
Add /var/lib/systemd/coredump/ to the list of artifacts to save on test
failures, as this is where coredumpctl will write any core dumps that
have occured during testimage.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
kernel-arch: add KERNEL_TOOLCHAIN to switch the whole kernel toolchain
Setting TOOLCHAIN on the kernel recipe alone leaves modules and
make-mod-scripts running make against the shared build tree with gcc;
kbuild spots the CC_VERSION_TEXT mismatch and silently regenerates
the shared .config. Add a KERNEL_TOOLCHAIN switch covering all
kernel-arch recipes so they change toolchain together, gcc by default.
Modules and make-mod-scripts build against the shared kernel build
tree with the kernel toolchain, so the default virtual/libc and
virtual/compilerlibs dependencies are unused. Inhibit them and add
the cross toolchain explicitly, as kernel.bbclass does, which also
keeps compiler-rt and libcxx out of module builds with clang.
kernel-arch: fall back to GNU ld unless ld-is-lld is in DISTRO_FEATURES
Nothing stages a bare ld.lld unless ld-is-lld is in DISTRO_FEATURES,
so a clang kernel fails its first linker check on any other setup.
Use GNU ld.bfd from binutils-cross instead.
Daniel Turull [Wed, 22 Jul 2026 13:16:40 +0000 (15:16 +0200)]
systemd-tools-native: fix systemctl/hwdb --root on RHEL 8 hosts
The native systemctl and systemd-hwdb tools run offline against the
target rootfs (--root $D) during do_rootfs. On build hosts with a
kernel older than 5.8 (e.g. RHEL 8, kernel 4.18) statx() does not
support STATX_MNT_ID, so path resolution fails with -EUNATCH. This
breaks the offline "systemctl --root" enable/preset invoked by the
postinst of any package shipping a systemd service, e.g.:
Failed to preset all units: Protocol driver not attached.
which in turn fails do_rootfs:
ERROR: Postinstall scriptlets of ['busybox-syslog',
'systemd-networkd'] have failed. [...] Deferring to first boot via
'exit 1' is no longer supported.
- Add Handle-missing-STATX_MNT_ID-on-older-kernels.patch, which reads
mnt_id from /proc/self/fdinfo (available since kernel 3.15) as a
fallback when statx() lacks STATX_MNT_ID, restoring the behaviour
removed upstream after systemd 259
- Apply it only to systemd-tools-native, where /proc/self/fdinfo is
guaranteed available; the target systemd recipe is untouched
Tested on rhel8.10, qemux86-64 with systemd testsuite.
Assisted-by: kiro:claude-opus-4.8 Signed-off-by: Daniel Turull <daniel.turull@ericsson.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
- Drop backported patches no longer needed (libfido2_cflags,
tpm2-util PCR bank, fdset_new debug)
- Remove sysvinit-path/sysvrcnd-path meson options and
systemd-sysv-install skeleton (removed upstream in 260)
- Add explicit meson disables for auto-detected features in
systemd-systemctl-native to prevent host sysroot contamination
- Refresh 0003-Do-not-create-var-log-README.patch
Tested on qemu target with testsuite systemd.
Summary of changes in systemd from NEWS file:
* Drop legacy SysV init support: rc-local, sysv-generator, sysv-install
removed; services must ship native systemd unit files going forward.
* Deprecate non-system users/groups in udev and systemd-networkd
configs; usage still works but emits warnings and is scheduled for
removal.
* Raise dependency baselines:
- cryptsetup, elfutils, libblkid, libseccomp, glibc, libxcrypt,
OpenSSL, Python all require newer versions.
- Linux baseline moved from 5.4 to 5.10, recommended 5.14, with
6.6 needed for full functionality; compatibility code for older
kernels dropped.
- musl minimum bumped from 1.2.5 to 1.2.6 when building with
-Dlibc=musl.
* Rework dynamic linking: shift optional dependencies to dlopen() for
libgnutls, libmicrohttpd, libcurl, libcrypto, libssl, libfdisk,
libcryptsetup. libsystemd no longer guarantees a link to libm, so
consumers relying on transitive libm must link it explicitly.
* sd-varlink API: temporary enum extension in 260-rc1 changed numeric
values, reverted in -rc2. Binaries built against -rc1 headers must
be rebuilt to avoid ABI mismatches.
* systemd-logind D-Bus CanPowerOff/CanReboot/CanSuspend/... gain new
return values for inhibitors: "inhibited", "inhibitor-blocked",
"challenge-inhibitor-blocked". Consumers assuming only "yes"/"no"
need adjustment.
* Rename systemd-nspawn --user= to --uid=. The -u short option still
works. Old forms --user NAME/--user=NAME remain accepted but are
deprecated and emit a warning; bare --user now toggles user manager
scope instead of taking an argument.
* Varlink io.systemd.Unit: several configuration fields switched from
free-form strings to enums (ExecInputType, ExecOutputType,
ProtectHome, CGroupController, CollectMode, EmergencyAction,
JobMode). Wire format now uses underscores instead of dashes/plus
(e.g. "tty-force" -> "tty_force", "kmsg+console" -> "kmsg_console").
* Announced removal of experimental systemd-sysupdated D-Bus API in
favor of direct Varlink IPC to systemd-sysupdate; updatectl will be
reworked accordingly.
* TPM / CC measurement changes:
- systemd-stub now measures more artifacts into hardware CC
registers (e.g. TDX RTMRs) in addition to TPM, altering expected
CC values for devicetree, initrd, ucode addons, UKI profile.
- New verity TPM NvPCR added; various components measure dm-verity
images into it.
- New ConditionSecurity=measured-os, and improved SMBIOS measurements
in systemd-boot/systemd-stub.
- New systemd-pcrosseparator.service adds a PCR separator
measurement affecting PCRs 0-7,9,12-14 to isolate firmware vs OS
measurements.
* Boot and UKI tooling:
- systemd-stub introduces a "boot secret" passed via initrd for TPM
fallback key material in non-TPM environments.
- Keyboard layout and serial console are auto-propagated from UEFI
to Linux; LoaderKeyboardLayout EFI variable used as fallback
mapping.
- Unified handling of UKI sidecars and "extra" Type #1 stanzas for
confext/sysext/credentials.
- systemd-boot avoids auto-boot into non-default UKI profiles and
adds better fallback handling and new bootctl verbs/options.
* New IMDS subsystem:
- hwdb gains 40-imds.hwdb to detect major public clouds and describe
access to local IMDS endpoints.
- systemd-imdsd provides Varlink IPC for IMDS access; systemd-imds
imports IMDS data into credentials with measurements.
- Optional network lockdown for IMDS via -Dimds-network=, with a
"locked" default recommended for secure setups.
* New metrics / report framework:
- systemd-report defines a Varlink-based metrics aggregation API
under /run/systemd/report/.
- Initial endpoints from systemd-networkd and the service manager in
260; extended in 261 to system-wide and per-service/cgroup metrics,
with Varlink and HTTP upload support.
* New mstack feature:
- ".mstack/" directory layout defines overlayfs + bind mount stacks
for services/containers.
- RootMStack= unit setting and systemd-nspawn --mstack= support
invoking services and containers from self-describing mstack
images.
- importctl pull-oci stores OCI images as mstack images.
* Manager and resource-control enhancements:
- New per-unit settings: RootMStack=, PrivateUsers=managed,
MemoryTHP=, CPUSetPartition=, RestrictFileSystemAccess= (BPF LSM),
CPUPressureWatch=/CPUPressureThresholdSec=,
IOPressureWatch=/IOPressureThresholdSec=.
- New global knobs: DefaultMemoryZSwapWriteback=,
EventLoopRateLimitIntervalSec=/EventLoopRateLimitBurst=,
MinimumUptimeSec= (default 15s to avoid tight boot loops).
- fd-store persistence improvements: LUO/Kexec handover support in
PID1, FileDescriptorStorePreserve=on-success and user/manager
plumbing to keep memfds and other state across session restarts
and kexec.
* Varlink and IPC surface growth:
- New Varlink methods for shutdown (PowerOff, Reboot, SoftReboot,
Halt, Kexec) on io.systemd.Manager and io.systemd.Shutdown.
- io.systemd.Unit.StartTransient(), io.systemd.Manager.ListUnitsByNames(),
io.systemd.Job interface for job inspection/cancellation.
- systemd-networkd Varlink updates: Reload(), Link.Describe(),
Reconfigure(), Renew(), ForceRenew(), Up()/Down() and reporting
of interface bit rates.
- journalctl gains a Varlink GetEntries() interface.
- New sd-varlink APIs for sentinel handling and protocol upgrade,
plus wildcard type SD_VARLINK_ANY and per-UID connection limit
reduction.
* Scheduling and rollout knobs:
- CPUSchedulingPolicy=ext for SCHED_EXT.
- ConditionFraction= for percentage-based staged rollouts keyed by
machine ID and tag.
- ConditionMachineTag= and new Tags= in /etc/machine-info for
fleet-wide targeting via hostnamed.
* Filesystem, tmpfiles, sysusers:
- tmpfiles.d/root.conf sets / to mode 0555 in certain setups.
- systemd-tmpfiles gains --inline and new k/K directives for
capabilities.
- New initrd services systemd-sysext-sysroot.service and
systemd-confext-sysroot.service to merge extensions from initrd,
plus a kernel kill switch to fully disable sysext/confext.
* Networking and resolved:
- DHCP relay refactoring with sd-dhcp-relay backend; [DHCPServer]
options deprecated in favor of [Network]/[DHCPRelay] + networkd.conf
settings.
- systemd-networkd adds MultiPathRoute= improvements, ModemManager
"simple connect" integration, new offload controls in .link files,
new DHCPv4 server options, and various Varlink/JSON interface
updates.
- systemd-resolved adds JSON static RR drop-ins, per-interface cache
size tunables, improved DNSSEC handling for insecure answers,
better stale cache retention, and reload of /etc/hosts on
SIGHUP/Reload().
- resolvectl now talks via Varlink; nss-resolve gains interface
scoping via $SYSTEMD_NSS_RESOLVE_INTERFACE.
* Logging, coredumps, cryptsetup:
- coredumpctl info gains JSON output; crashing thread TID/name and
new COREDUMP_CODE field recorded.
- systemd-cryptsetup/libcryptsetup moved behind dlopen(); new
fixate-volume-key= support for binding crypttab entries to volume
keys; systemd-cryptenroll now defaults to RSA-OAEP+SHA-256 for
sealed keys.
- systemd-creds improves TPM2 PCR handling to avoid errors on non-TPM
systems.
* OOM and reliability:
- systemd-oomd gains OOM rulesets and "prekill hook" integration via
Varlink sockets.
- systemd-oomd and PID1 adopt pidfds in more places.
- systemd-run gets --output= to control verbose mode logging.
* Misc:
- RootImageOptions=/ExtensionImages=/MountImages= parsing changed so
last definition per partition wins, aligning with other option
semantics.
- systemd-sysext/confext refresh now suppresses unnecessary
umount/mount by default, with --always-refresh= to force a
refresh.
- getty@.service now has [Install] section and must be explicitly
enabled.
- runlevel[0-6].target can be restored when building with
-Dcompat-sysv-interfaces=yes, but SysV scripts themselves are
gone.
AI-Generated: Claude-opus-4.6 Signed-off-by: Daniel Turull <daniel.turull@ericsson.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Tue, 21 Jul 2026 16:15:11 +0000 (17:15 +0100)]
systemd: no need to use qemu for hwdb update
Now that systemd-tools-native gives us a native systemd-hwdb, and the
database format is known to be hardware-agnostic, we can simply run
systemd-hwdb directly instead of running it inside qemu-user if we're
using systemd instead of eudev.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Ross Burton [Tue, 21 Jul 2026 16:15:10 +0000 (17:15 +0100)]
systemd-tools-native: add systemd-hwdb
Also build systemd-hwdb so that we can generate hwdb.bin at rootfs time
with native code instead of using qemu-user. I've verified that the
hwdb.bin format is word-size and endian agnosic, so we don't need to use
qemu.
Add a patch so that source file names in the hwdb.bin have the rootfs
prefix stripped, so that build paths don't appear in the final image.
This does mean we have to hardcode prefix=/usr sysconfdir=/etc as the
target paths, but systemd effectively mandates these so hopefully this
is not a problem in the real world.
Partially based on work by Daniel Turull.
Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
systemd: Add backport of EFI_MEMORY_ATTRIBUTE_PROTOCOL warning downgrade patch
Add a backport systemd patch[1] that downgrades the
EFI_MEMORY_ATTRIBUTE_PROTOCOL missing message from warning to debug.
U-Boot does not currently implement EFI_MEMORY_ATTRIBUTE_PROTOCOL,
causing systemd-boot to emit a warning on every boot on EFI 2.10+
platforms. Although the condition is a known U-Boot limitation and
requires no user intervention, the warning triggers log_wait()
behavior, introducing an unnecessary ~2.5-second delay during boot
and negatively impacting boot-time KPIs.
Include the patch in the systemd recipe to suppress this
non-actionable warning, eliminate the associated ~2.5-second boot
delay, and improve boot performance on U-Boot-based systems.
Ross Burton [Fri, 17 Jul 2026 15:46:08 +0000 (16:46 +0100)]
systemd: move systemd-systemctl-native PACKAGE_WRITE_DEPS to systemd.bb
PACKAGE_WRITE_DEPS[1] is used to define package dependencies that are
needed at rootfs time, for example when a postinst can use a native
tool.
We allow distros to build recipes that support both systemd and sysv at
the same time, and the post-install script generated by systemd.bbclass
will use systemctl (via systemd-systemctl-native) at rootfs time to
install the units and thus generate the required symlinks.
Presently the dependency on systemctl-native is added to recipes via
systemd.bbclass but this results in all recipes that inherit that class
having the dependencies. This is actually suboptimal: at rootfs time
the key requirement is to install the units if and only if systemd is
being used.
We can move the PACKAGE_WRITE_DEPS dependency on systemd-systemctl-native
from each recipe (via the class) to systemd itself so units are installed
if systemd is present, and not otherwise.
This means recipes don't depend on systemd-systemctl-native (which has
non-trivial build dependencies itself), and the units are not installed
in non-systemd deployments.
Bruce Ashfield [Wed, 22 Jul 2026 16:54:07 +0000 (12:54 -0400)]
linux-yocto/6.18: drm/virtio: fix deadlock in display_info_cb by removing hotplug from dequeue worker
To partially (or fully) address: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16217
Integrating the following commit(s) to linux-yocto/6.18:
1/1 [
Author: Ryosuke Yasuoka
Email: ryasuoka@redhat.com
Subject: drm/virtio: fix deadlock in display_info_cb by removing hotplug from dequeue worker
Date: Mon, 13 Jul 2026 22:01:00 +0900
A probe-time deadlock can occur between the dequeue worker and
drm_client_register(). During probe, drm_client_register() holds
clientlist_mutex and calls the fbdev hotplug callback, which triggers an
atomic commit that ends up sleeping in virtio_gpu_queue_ctrl_sgs()
waiting for virtqueue space. The dequeue worker that would free that
space calls virtio_gpu_cmd_get_display_info_cb(), which invokes
drm_kms_helper_hotplug_event() -> drm_client_dev_hotplug(), attempting
to acquire the same clientlist_mutex. Since wake_up() is only called
after the resp_cb loop, the probe thread is never woken and both threads
deadlock.
Fix this by removing the hotplug notification from
virtio_gpu_cmd_get_display_info_cb(). The display data (outputs[i].info)
is still updated synchronously in the callback.
For the init path, drm_client_register() already fires an initial
hotplug when the client is registered, which picks up the connector
state updated by display_info_cb.
For the runtime config_changed path, add a wait_event_timeout() in
config_changed_work_func() so that display_info_cb updates the connector
data before the hotplug notification is sent. Also replace
drm_helper_hpd_irq_event() with drm_kms_helper_hotplug_event() since
virtio-gpu never calls drm_kms_helper_poll_init() and thus
drm_helper_hpd_irq_event() always returns false without doing anything.
linux-yocto-dev did not set KCONF_BSP_AUDIT_LEVEL, so it inherited the
kernel-yocto.bbclass default of 0. That silently suppresses the 'invalid
fragment elements' and 'redefinition' audit categories: do_kernel_configcheck
still runs and still writes .kernel-meta/cfg/{invalid,redefinition}.txt, but
nothing is ever reported to the user.
This was hiding real breakage. Five config options removed upstream in v7.1
(CONFIG_HAMRADIO, CONFIG_CRYPTO_MICHAEL_MIC, CONFIG_ISDN, CONFIG_ISDN_CAPI,
CONFIG_NF_CT_PROTO_UDPLITE) sat stale in the kernel-cache fragments for a
full release cycle without a single warning.
The versioned recipes already set this (linux-yocto and linux-yocto-rt use
1, linux-yocto-tiny uses 2); the dev recipe being the sole exception is
backwards, since the dev kernel tracks a moving upstream and is precisely
where dropped symbols should surface first.
Set it to 1 to match linux-yocto.
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
GPL-3.0-with-GCC-exception is a deprecated license ID, so replace it
with "GPL-3.0-or-later WITH GCC-exception-3.1".
Also, the LICENSE expression in gcc.inc appears to be incomplete,
missing GPL-2.0-or-later, LGPL-2.1-or-later, and LGPL-3.0-or-later, even
though the checksums for their corresponding license files are clearly
checked in LIC_FILES_CHKSUM.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
cargo-cinstall defaults its libdir to <prefix>/lib since the class does
not pass --libdir. On configurations where ${libdir} is not
<prefix>/lib (e.g. multilib builds where baselib is lib64), the libraries
and pkg-config files get installed into <prefix>/lib, causing do_package
QA failures (installed-vs-shipped).
Pass --libdir ${libdir} explicitly so cargo-cinstall installs the files
into the correct directory.
Jose Quaresma [Fri, 10 Jul 2026 16:02:38 +0000 (17:02 +0100)]
lib/oe/spdx30_tasks: fix image deploy dir
IMGDEPLOYDIR is not populated when the artifacts comes from sstate-cache.
Instead of the task input, we should use the output because the input is
not guaranteed to remain in the file system. For example, `rm_work`
also deletes the IMGDEPLOYDIR file.
Signed-off-by: Jose Quaresma <jose.quaresma@oss.qualcomm.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Adds an exception to GPL-3.0-or-later licenses to allow them if they
have the GCC-exception-3.1. This is required because the license uses a
WITH expression, instead of being a bespoke license that combines the
license and exception.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The code to create relationships was designed to handle `None` in from
or to, but the `to_list()` function did not propagate the value for that
to work and instead raised a TypeError
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>