Compare commits
169 Commits
scarthgap-
...
yocto-5.0.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d54d1c473 | ||
|
|
99047ec235 | ||
|
|
5eddd0f7fc | ||
|
|
4f4691984a | ||
|
|
d02f35223e | ||
|
|
c7084e7f05 | ||
|
|
7ba5e4b416 | ||
|
|
9628ed0111 | ||
|
|
af8b964e9b | ||
|
|
b617f833e5 | ||
|
|
b8600b66e4 | ||
|
|
463172affb | ||
|
|
028444d608 | ||
|
|
a2c9f142ed | ||
|
|
54e7eb5951 | ||
|
|
534b2c966a | ||
|
|
8d61eb390a | ||
|
|
bd21ac68d0 | ||
|
|
57126cdaa7 | ||
|
|
35fca9ec35 | ||
|
|
308c5dd2c9 | ||
|
|
005e0f6daf | ||
|
|
f824456616 | ||
|
|
2541663fd1 | ||
|
|
53dbc9c218 | ||
|
|
236069b7e0 | ||
|
|
46fdae1b0f | ||
|
|
cc5e0688c0 | ||
|
|
68f03e2a9f | ||
|
|
be8cc4137c | ||
|
|
c0ba29bb80 | ||
|
|
727b18ba30 | ||
|
|
8c8141abd8 | ||
|
|
5cd6c94c3f | ||
|
|
476bdedb21 | ||
|
|
ceb46cce4b | ||
|
|
5e1f0f620d | ||
|
|
0ad5299bcd | ||
|
|
10ce846e13 | ||
|
|
917f8442ab | ||
|
|
23abcf73f7 | ||
|
|
2d42466d9d | ||
|
|
6ab741ee86 | ||
|
|
bd4027365a | ||
|
|
a9615a2335 | ||
|
|
aadcf56af2 | ||
|
|
3056341eb5 | ||
|
|
d38081ece2 | ||
|
|
3534914790 | ||
|
|
fb693aab03 | ||
|
|
3bcac51eb2 | ||
|
|
bf7d623729 | ||
|
|
e380eea705 | ||
|
|
e6cbef9080 | ||
|
|
80593d0ce1 | ||
|
|
4581b795c6 | ||
|
|
41c8c7c5c5 | ||
|
|
ea774774ef | ||
|
|
7a394819a8 | ||
|
|
b6ea3460e5 | ||
|
|
8df07c5662 | ||
|
|
bfe84d74fe | ||
|
|
5941c9425f | ||
|
|
38071ff688 | ||
|
|
6b53fa118e | ||
|
|
6e462f0df2 | ||
|
|
d77b73fd3f | ||
|
|
47124f2fda | ||
|
|
6152ee6778 | ||
|
|
2104407814 | ||
|
|
5ae239f8ea | ||
|
|
8c2c3b114e | ||
|
|
f82d22f0ca | ||
|
|
c8e301569e | ||
|
|
0cd11a8cd4 | ||
|
|
0da3cd0ae6 | ||
|
|
41ab4d1168 | ||
|
|
71615e330c | ||
|
|
9b6d0d6e5a | ||
|
|
495e1c2ed0 | ||
|
|
d4eb015d2b | ||
|
|
f6f1819f02 | ||
|
|
a87dd6bce4 | ||
|
|
f4ef261ff1 | ||
|
|
47d5eff3e1 | ||
|
|
8c85aee61c | ||
|
|
2935492192 | ||
|
|
72983ac391 | ||
|
|
828c9d09b4 | ||
|
|
795103a538 | ||
|
|
d3c87dc830 | ||
|
|
a5cecb013b | ||
|
|
a4841fb5a2 | ||
|
|
17a65b334d | ||
|
|
52ba7ab020 | ||
|
|
d792f1a83e | ||
|
|
1df6f0ae91 | ||
|
|
12a7475659 | ||
|
|
707dce4f01 | ||
|
|
6d222750d5 | ||
|
|
f327b4da74 | ||
|
|
4faff2acb8 | ||
|
|
fee180d783 | ||
|
|
d27f4a8879 | ||
|
|
a247883e38 | ||
|
|
c65b128458 | ||
|
|
de3a6b0d24 | ||
|
|
b9843e68be | ||
|
|
67ac024a29 | ||
|
|
997f8de24c | ||
|
|
85e5f0fa1e | ||
|
|
15a18fae40 | ||
|
|
553530a8ac | ||
|
|
719a5fe1e3 | ||
|
|
76d0c749da | ||
|
|
f0d2110a32 | ||
|
|
cc239ca412 | ||
|
|
0549c04c9f | ||
|
|
8bddd959ff | ||
|
|
9497778a4d | ||
|
|
295e960b85 | ||
|
|
ea30165e8b | ||
|
|
eed16ae613 | ||
|
|
b0b3210686 | ||
|
|
792947d444 | ||
|
|
adc9e377c8 | ||
|
|
e6bfeed8f3 | ||
|
|
842fd60ebb | ||
|
|
03c1257cfd | ||
|
|
35a6ffc2db | ||
|
|
86f11fe94f | ||
|
|
d1f8b0c6dd | ||
|
|
cf3b1a7e6d | ||
|
|
976648aa60 | ||
|
|
91ba7b5d66 | ||
|
|
d71d81814a | ||
|
|
e54c87a8b5 | ||
|
|
dfa0c8dc8b | ||
|
|
00d09f8fd4 | ||
|
|
1b8b7802d1 | ||
|
|
bfa2803f8e | ||
|
|
a6b0e3d404 | ||
|
|
6906c4236f | ||
|
|
938b1ad77a | ||
|
|
e1453702a5 | ||
|
|
d6fd50a616 | ||
|
|
9e6d5e0849 | ||
|
|
dbf5ddbdb5 | ||
|
|
fb988ddb65 | ||
|
|
2ab61fcf7d | ||
|
|
f5c5d1dd6c | ||
|
|
72fd157b91 | ||
|
|
6ba417e775 | ||
|
|
48b9d014e9 | ||
|
|
7b9540b6b5 | ||
|
|
6707dcecb2 | ||
|
|
cac0ff2d90 | ||
|
|
d4a084d920 | ||
|
|
4af1396e46 | ||
|
|
ee521bb17c | ||
|
|
681244152c | ||
|
|
027ce2d723 | ||
|
|
7f12b64980 | ||
|
|
33231bec7b | ||
|
|
db7f586822 | ||
|
|
a78985ed94 | ||
|
|
49e4da8b0a | ||
|
|
e77289e9a4 | ||
|
|
c06e4e6e60 |
@@ -131,7 +131,7 @@ class TerminalFilter(object):
|
||||
def getTerminalColumns(self):
|
||||
def ioctl_GWINSZ(fd):
|
||||
try:
|
||||
cr = struct.unpack('hh', fcntl.ioctl(fd, self.termios.TIOCGWINSZ, '1234'))
|
||||
cr = struct.unpack('hhhh', fcntl.ioctl(fd, self.termios.TIOCGWINSZ, b'12345678'))[0:2]
|
||||
except:
|
||||
return None
|
||||
return cr
|
||||
@@ -145,7 +145,7 @@ class TerminalFilter(object):
|
||||
pass
|
||||
if not cr:
|
||||
try:
|
||||
cr = (os.environ['LINES'], os.environ['COLUMNS'])
|
||||
cr = (int(os.environ['LINES']), int(os.environ['COLUMNS']))
|
||||
except:
|
||||
cr = (25, 80)
|
||||
return cr
|
||||
|
||||
@@ -43,11 +43,11 @@ PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard $(SOURCED
|
||||
|
||||
# Pattern rule for converting SVG to PDF
|
||||
%.pdf : %.svg
|
||||
$(SVG2PDF) --format=Pdf --output=$@ $<
|
||||
$(SVG2PDF) --format=pdf --output=$@ $<
|
||||
|
||||
# Pattern rule for converting SVG to PNG
|
||||
%.png : %.svg
|
||||
$(SVG2PNG) --format=Png --output=$@ $<
|
||||
$(SVG2PNG) --format=png --output=$@ $<
|
||||
|
||||
clean:
|
||||
@rm -rf $(BUILDDIR) $(PNGs) $(PDFs) poky.yaml sphinx-static/switchers.js releases.rst
|
||||
|
||||
@@ -221,6 +221,20 @@ Recipes need to define both the :term:`LICENSE` and
|
||||
``meta/files/common-licenses/`` or the :term:`SPDXLICENSEMAP` flag names
|
||||
defined in ``meta/conf/licenses.conf``.
|
||||
|
||||
.. note::
|
||||
|
||||
Setting a :term:`LICENSE` in a recipe applies to the software to be built
|
||||
by this recipe, not to the recipe file itself. The license of recipes,
|
||||
configuration files and scripts should also be clearly specified, for
|
||||
example via comments or via a license found in the :term:`layer` that
|
||||
holds these files. These license files are usually found at the root of
|
||||
the layer. Exceptions should be clearly stated in the layer README or
|
||||
LICENSE file.
|
||||
|
||||
For example, the :term:`OpenEmbedded-Core (OE-Core)` layer provides both
|
||||
the GPL-2.0-only and MIT license files, and a "LICENSE" file to explain
|
||||
how these two licenses are attributed to files found in the layer.
|
||||
|
||||
- :term:`LIC_FILES_CHKSUM`: The OpenEmbedded build system uses this
|
||||
variable to make sure the license text has not changed. If it has,
|
||||
the build produces an error and it affords you the chance to figure
|
||||
|
||||
@@ -329,10 +329,10 @@ Validating Patches with Patchtest
|
||||
|
||||
``patchtest`` is available in ``openembedded-core`` as a tool for making
|
||||
sure that your patches are well-formatted and contain important info for
|
||||
maintenance purposes, such as ``Signed-off-by`` and ``Upstream-Status``
|
||||
tags. Note that no functional testing of the changes will be performed by ``patchtest``.
|
||||
Currently, it only supports testing patches for ``openembedded-core`` branches.
|
||||
To setup, perform the following::
|
||||
maintenance purposes, such as the ``Signed-off-by`` presence. Note that no
|
||||
functional testing of the changes will be performed by ``patchtest``. Currently,
|
||||
it only supports testing patches for ``openembedded-core`` branches. To setup,
|
||||
perform the following::
|
||||
|
||||
pip install -r meta/lib/patchtest/requirements.txt
|
||||
source oe-init-build-env
|
||||
@@ -697,8 +697,8 @@ backported to a stable branch unless the bug in question does not affect the
|
||||
master branch or the fix on the master branch is unsuitable for backporting.
|
||||
|
||||
The list of stable branches along with the status and maintainer for each
|
||||
branch can be obtained from the
|
||||
:yocto_wiki:`Releases wiki page </Releases>`.
|
||||
branch can be obtained from the :yocto_home:`Releases </development/releases/>`
|
||||
page.
|
||||
|
||||
.. note::
|
||||
|
||||
|
||||
@@ -111,17 +111,17 @@ occurred in your project. Perhaps an attempt to :ref:`modify a variable
|
||||
<bitbake-user-manual/bitbake-user-manual-metadata:modifying existing
|
||||
variables>` did not work out as expected.
|
||||
|
||||
BitBake's ``-e`` option is used to display variable values after
|
||||
parsing. The following command displays the variable values after the
|
||||
configuration files (i.e. ``local.conf``, ``bblayers.conf``,
|
||||
BitBake's ``bitbake-getvar`` command is used to display variable values after
|
||||
parsing. The following command displays the variable value for :term:`OVERRIDES`
|
||||
after the configuration files (i.e. ``local.conf``, ``bblayers.conf``,
|
||||
``bitbake.conf`` and so forth) have been parsed::
|
||||
|
||||
$ bitbake -e
|
||||
$ bitbake-getvar OVERRIDES
|
||||
|
||||
The following command displays variable values after a specific recipe has
|
||||
been parsed. The variables include those from the configuration as well::
|
||||
The following command displays the value of :term:`PV` after a specific recipe
|
||||
has been parsed::
|
||||
|
||||
$ bitbake -e recipename
|
||||
$ bitbake-getvar -r recipename PV
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -135,19 +135,25 @@ been parsed. The variables include those from the configuration as well::
|
||||
the recipe datastore, which means that variables set within one task
|
||||
will not be visible to other tasks.
|
||||
|
||||
In the output of ``bitbake -e``, each variable is preceded by a
|
||||
description of how the variable got its value, including temporary
|
||||
values that were later overridden. This description also includes
|
||||
variable flags (varflags) set on the variable. The output can be very
|
||||
In the output of ``bitbake-getvar``, the line containing the value of the
|
||||
variable is preceded by a description of how the variable got its value,
|
||||
including temporary values that were later overridden. This description also
|
||||
includes variable flags (varflags) set on the variable. The output can be very
|
||||
helpful during debugging.
|
||||
|
||||
Variables that are exported to the environment are preceded by
|
||||
``export`` in the output of ``bitbake -e``. See the following example::
|
||||
``export`` in the output of ``bitbake-getvar``. See the following example::
|
||||
|
||||
export CC="i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/ulf/poky/build/tmp/sysroots/qemux86"
|
||||
|
||||
In addition to variable values, the output of the ``bitbake -e`` and
|
||||
``bitbake -e`` recipe commands includes the following information:
|
||||
Shell functions and tasks can also be inspected with the same mechanism::
|
||||
|
||||
$ bitbake-getvar -r recipename do_install
|
||||
|
||||
For Python functions and tasks, ``bitbake -e recipename`` can be used instead.
|
||||
|
||||
Moreover, the output of the ``bitbake -e`` and ``bitbake -e`` recipe commands
|
||||
includes the following information:
|
||||
|
||||
- The output starts with a tree listing all configuration files and
|
||||
classes included globally, recursively listing the files they include
|
||||
|
||||
@@ -41,7 +41,6 @@ Yocto Project Development Tasks Manual
|
||||
build-quality
|
||||
debugging
|
||||
licenses
|
||||
security-subjects
|
||||
vulnerabilities
|
||||
sbom
|
||||
error-reporting-tool
|
||||
|
||||
@@ -123,10 +123,9 @@ Follow these general steps to create your layer without using tools:
|
||||
Lists all layers on which this layer depends (if any).
|
||||
|
||||
- :term:`LAYERSERIES_COMPAT`:
|
||||
Lists the :yocto_wiki:`Yocto Project </Releases>`
|
||||
releases for which the current version is compatible. This
|
||||
variable is a good way to indicate if your particular layer is
|
||||
current.
|
||||
Lists the :yocto_home:`Yocto Project releases </development/releases/>`
|
||||
for which the current version is compatible. This variable is a good
|
||||
way to indicate if your particular layer is current.
|
||||
|
||||
|
||||
.. note::
|
||||
@@ -832,6 +831,8 @@ The following list describes the available commands:
|
||||
can replicate the directory structure and revisions of the layers in a current build.
|
||||
For more information, see ":ref:`dev-manual/layers:saving and restoring the layers setup`".
|
||||
|
||||
- ``show-machines``: Lists the machines available in the currently configured layers.
|
||||
|
||||
Creating a General Layer Using the ``bitbake-layers`` Script
|
||||
============================================================
|
||||
|
||||
|
||||
@@ -83,19 +83,20 @@ command::
|
||||
OpenEmbedded recipe tool
|
||||
|
||||
options:
|
||||
-d, --debug Enable debug output
|
||||
-q, --quiet Print only errors
|
||||
--color COLOR Colorize output (where COLOR is auto, always, never)
|
||||
-h, --help show this help message and exit
|
||||
-d, --debug Enable debug output
|
||||
-q, --quiet Print only errors
|
||||
--color COLOR Colorize output (where COLOR is auto, always, never)
|
||||
-h, --help show this help message and exit
|
||||
|
||||
subcommands:
|
||||
create Create a new recipe
|
||||
newappend Create a bbappend for the specified target in the specified
|
||||
layer
|
||||
setvar Set a variable within a recipe
|
||||
appendfile Create/update a bbappend to replace a target file
|
||||
appendsrcfiles Create/update a bbappend to add or replace source files
|
||||
appendsrcfile Create/update a bbappend to add or replace a source file
|
||||
newappend Create a bbappend for the specified target in the specified layer
|
||||
create Create a new recipe
|
||||
setvar Set a variable within a recipe
|
||||
appendfile Create/update a bbappend to replace a target file
|
||||
appendsrcfiles Create/update a bbappend to add or replace source files
|
||||
appendsrcfile Create/update a bbappend to add or replace a source file
|
||||
edit Edit the recipe and appends for the specified target. This obeys $VISUAL if set,
|
||||
otherwise $EDITOR, otherwise vi.
|
||||
Use recipetool <subcommand> --help to get help on a specific command
|
||||
|
||||
Running ``recipetool create -o OUTFILE`` creates the base recipe and
|
||||
@@ -218,9 +219,9 @@ compilation and packaging files, and so forth.
|
||||
|
||||
The path to the per-recipe temporary work directory depends on the
|
||||
context in which it is being built. The quickest way to find this path
|
||||
is to have BitBake return it by running the following::
|
||||
is to use the ``bitbake-getvar`` utility::
|
||||
|
||||
$ bitbake -e basename | grep ^WORKDIR=
|
||||
$ bitbake-getvar -r basename WORKDIR
|
||||
|
||||
As an example, assume a Source Directory
|
||||
top-level folder named ``poky``, a default :term:`Build Directory` at
|
||||
@@ -438,7 +439,7 @@ Licensing
|
||||
=========
|
||||
|
||||
Your recipe needs to define variables related to the license
|
||||
under whith the software is distributed. See the
|
||||
under which the software is distributed. See the
|
||||
:ref:`contributor-guide/recipe-style-guide:recipe license fields`
|
||||
section in the Contributor Guide for details.
|
||||
|
||||
|
||||
@@ -274,8 +274,23 @@ with a number. The number used depends on the state of the PR Service:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
|
||||
hello-world-git_0.0+git1+dd2f5c3565-r0.0_armv7a-neon.ipk
|
||||
hello-world-git_1.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
|
||||
hello-world-git_1.0+git1+dd2f5c3565-r0.1_armv7a-neon.ipk
|
||||
|
||||
Two numbers got incremented here:
|
||||
|
||||
- ``gitX`` changed from ``git0`` to ``git1``. This is because there was a
|
||||
change in the source code (``SRCREV``).
|
||||
|
||||
- ``r0.X`` changed from ``r0.0`` to ``r0.1``. This is because the hash of
|
||||
the :ref:`ref-tasks-package` task changed.
|
||||
|
||||
The reason for this change can be many. To understand why the hash of the
|
||||
:ref:`ref-tasks-package` task changed, you can run the following command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ bitbake-diffsigs -t hello-world package
|
||||
|
||||
- If PR Service is not enabled, the build system replaces the
|
||||
``AUTOINC`` placeholder with zero (i.e. "0"). This results in
|
||||
@@ -285,8 +300,8 @@ with a number. The number used depends on the state of the PR Service:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
hello-world-git_0.0+git0+b6558dd387-r0.0_armv7a-neon.ipk
|
||||
hello-world-git_0.0+git0+dd2f5c3565-r0.0_armv7a-neon.ipk
|
||||
hello-world-git_1.0+git0+b6558dd387-r0_armv7a-neon.ipk
|
||||
hello-world-git_1.0+git0+dd2f5c3565-r0_armv7a-neon.ipk
|
||||
|
||||
In summary, the OpenEmbedded build system does not track the history of
|
||||
binary package versions for this purpose. ``AUTOINC``, in this case, is
|
||||
|
||||
@@ -24,11 +24,12 @@ users can read in standardized format.
|
||||
:term:`SBOM` information is also critical to performing vulnerability exposure
|
||||
assessments, as all the components used in the Software Supply Chain are listed.
|
||||
|
||||
The OpenEmbedded build system doesn't generate such information by default.
|
||||
To make this happen, you must inherit the
|
||||
:ref:`ref-classes-create-spdx` class from a configuration file::
|
||||
The OpenEmbedded build system generates such information by default (by
|
||||
inheriting the :ref:`ref-classes-create-spdx` class in :term:`INHERIT_DISTRO`).
|
||||
|
||||
INHERIT += "create-spdx"
|
||||
If needed, it can be disabled from a :term:`configuration file`::
|
||||
|
||||
INHERIT_DISTRO:remove = "create-spdx"
|
||||
|
||||
Upon building an image, you will then get the compressed archive
|
||||
``IMAGE-MACHINE.spdx.tar.zst`` contains the index and the files for the single
|
||||
|
||||
@@ -1,194 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Dealing with Vulnerability Reports
|
||||
**********************************
|
||||
|
||||
The Yocto Project and OpenEmbedded are open-source, community-based projects
|
||||
used in numerous products. They assemble multiple other open-source projects,
|
||||
and need to handle security issues and practices both internal (in the code
|
||||
maintained by both projects), and external (maintained by other projects and
|
||||
organizations).
|
||||
|
||||
This manual assembles security-related information concerning the whole
|
||||
ecosystem. It includes information on reporting a potential security issue,
|
||||
the operation of the YP Security team and how to contribute in the
|
||||
related code. It is written to be useful for both security researchers and
|
||||
YP developers.
|
||||
|
||||
How to report a potential security vulnerability?
|
||||
=================================================
|
||||
|
||||
If you would like to report a public issue (for example, one with a released
|
||||
CVE number), please report it using the
|
||||
:yocto_bugs:`Security Bugzilla </enter_bug.cgi?product=Security>`.
|
||||
|
||||
If you are dealing with a not-yet-released issue, or an urgent one, please send
|
||||
a message to security AT yoctoproject DOT org, including as many details as
|
||||
possible: the layer or software module affected, the recipe and its version,
|
||||
and any example code, if available. This mailing list is monitored by the
|
||||
Yocto Project Security team.
|
||||
|
||||
For each layer, you might also look for specific instructions (if any) for
|
||||
reporting potential security issues in the specific ``SECURITY.md`` file at the
|
||||
root of the repository. Instructions on how and where submit a patch are
|
||||
usually available in ``README.md``. If this is your first patch to the
|
||||
Yocto Project/OpenEmbedded, you might want to have a look into the
|
||||
Contributor's Manual section
|
||||
":ref:`contributor-guide/submit-changes:preparing changes for submission`".
|
||||
|
||||
Branches maintained with security fixes
|
||||
---------------------------------------
|
||||
|
||||
See the
|
||||
:ref:`Release process <ref-manual/release-process:Stable Release Process>`
|
||||
documentation for details regarding the policies and maintenance of stable
|
||||
branches.
|
||||
|
||||
The :yocto_wiki:`Releases page </Releases>` contains a list
|
||||
of all releases of the Yocto Project. Versions in gray are no longer actively
|
||||
maintained with security patches, but well-tested patches may still be accepted
|
||||
for them for significant issues.
|
||||
|
||||
Security-related discussions at the Yocto Project
|
||||
-------------------------------------------------
|
||||
|
||||
We have set up two security-related emails/mailing lists:
|
||||
|
||||
- Public Mailing List: yocto [dash] security [at] yoctoproject[dot] org
|
||||
|
||||
This is a public mailing list for anyone to subscribe to. This list is an
|
||||
open list to discuss public security issues/patches and security-related
|
||||
initiatives. For more information, including subscription information,
|
||||
please see the :yocto_lists:`yocto-security mailing list info page
|
||||
</g/yocto-security>`.
|
||||
|
||||
This list requires moderator approval for new topics to be posted, to avoid
|
||||
private security reports to be posted by mistake.
|
||||
|
||||
- Yocto Project Security Team: security [at] yoctoproject [dot] org
|
||||
|
||||
This is an email for reporting non-published potential vulnerabilities.
|
||||
Emails sent to this address are forwarded to the Yocto Project Security
|
||||
Team members.
|
||||
|
||||
|
||||
What you should do if you find a security vulnerability
|
||||
-------------------------------------------------------
|
||||
|
||||
If you find a security flaw: a crash, an information leakage, or anything that
|
||||
can have a security impact if exploited in any Open Source software built or
|
||||
used by the Yocto Project, please report this to the Yocto Project Security
|
||||
Team. If you prefer to contact the upstream project directly, please send a
|
||||
copy to the security team at the Yocto Project as well. If you believe this is
|
||||
highly sensitive information, please report the vulnerability in a secure way,
|
||||
i.e. encrypt the email and send it to the private list. This ensures that
|
||||
the exploit is not leaked and exploited before a response/fix has been generated.
|
||||
|
||||
Security team
|
||||
=============
|
||||
|
||||
The Yocto Project/OpenEmbedded security team coordinates the work on security
|
||||
subjects in the project. All general discussion takes place publicly. The
|
||||
Security Team only uses confidential communication tools to deal with private
|
||||
vulnerability reports before they are released.
|
||||
|
||||
Security team appointment
|
||||
-------------------------
|
||||
|
||||
The Yocto Project Security Team consists of at least three members. When new
|
||||
members are needed, the Yocto Project Technical Steering Committee (YP TSC)
|
||||
asks for nominations by public channels including a nomination deadline.
|
||||
Self-nominations are possible. When the limit time is
|
||||
reached, the YP TSC posts the list of candidates for the comments of project
|
||||
participants and developers. Comments may be sent publicly or privately to the
|
||||
YP and OE TSCs. The candidates are approved by both YP TSC and OpenEmbedded
|
||||
Technical Steering Committee (OE TSC) and the final list of the team members
|
||||
is announced publicly. The aim is to have people representing technical
|
||||
leadership, security knowledge and infrastructure present with enough people
|
||||
to provide backup/coverage but keep the notification list small enough to
|
||||
minimize information risk and maintain trust.
|
||||
|
||||
YP Security Team members may resign at any time.
|
||||
|
||||
Security Team Operations
|
||||
------------------------
|
||||
|
||||
The work of the Security Team might require high confidentiality. Team members
|
||||
are individuals selected by merit and do not represent the companies they work
|
||||
for. They do not share information about confidential issues outside of the team
|
||||
and do not hint about ongoing embargoes.
|
||||
|
||||
Team members can bring in domain experts as needed. Those people should be
|
||||
added to individual issues only and adhere to the same standards as the YP
|
||||
Security Team.
|
||||
|
||||
The YP security team organizes its meetings and communication as needed.
|
||||
|
||||
When the YP Security team receives a report about a potential security
|
||||
vulnerability, they quickly analyze and notify the reporter of the result.
|
||||
They might also request more information.
|
||||
|
||||
If the issue is confirmed and affects the code maintained by the YP, they
|
||||
confidentially notify maintainers of that code and work with them to prepare
|
||||
a fix.
|
||||
|
||||
If the issue is confirmed and affects an upstream project, the YP security team
|
||||
notifies the project. Usually, the upstream project analyzes the problem again.
|
||||
If they deem it a real security problem in their software, they develop and
|
||||
release a fix following their security policy. They may want to include the
|
||||
original reporter in the loop. There is also sometimes some coordination for
|
||||
handling patches, backporting patches etc, or just understanding the problem
|
||||
or what caused it.
|
||||
|
||||
When the fix is publicly available, the YP security team member or the
|
||||
package maintainer sends patches against the YP code base, following usual
|
||||
procedures, including public code review.
|
||||
|
||||
What Yocto Security Team does when it receives a security vulnerability
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
The YP Security Team team performs a quick analysis and would usually report
|
||||
the flaw to the upstream project. Normally the upstream project analyzes the
|
||||
problem. If they deem it a real security problem in their software, they
|
||||
develop and release a fix following their own security policy. They may want
|
||||
to include the original reporter in the loop. There is also sometimes some
|
||||
coordination for handling patches, backporting patches etc, or just
|
||||
understanding the problem or what caused it.
|
||||
|
||||
The security policy of the upstream project might include a notification to
|
||||
Linux distributions or other important downstream projects in advance to
|
||||
discuss coordinated disclosure. These mailing lists are normally non-public.
|
||||
|
||||
When the upstream project releases a version with the fix, they are responsible
|
||||
for contacting `Mitre <https://www.cve.org/>`__ to get a CVE number assigned and
|
||||
the CVE record published.
|
||||
|
||||
If an upstream project does not respond quickly
|
||||
-----------------------------------------------
|
||||
|
||||
If an upstream project does not fix the problem in a reasonable time,
|
||||
the Yocto's Security Team will contact other interested parties (usually
|
||||
other distributions) in the community and together try to solve the
|
||||
vulnerability as quickly as possible.
|
||||
|
||||
The Yocto Project Security team adheres to the 90 days disclosure policy
|
||||
by default. An increase of the embargo time is possible when necessary.
|
||||
|
||||
Current Security Team members
|
||||
-----------------------------
|
||||
|
||||
For secure communications, please send your messages encrypted using the GPG
|
||||
keys. Remember, message headers are not encrypted so do not include sensitive
|
||||
information in the subject line.
|
||||
|
||||
- Ross Burton: <ross@burtonini.com> `Public key <https://keys.openpgp.org/search?q=ross%40burtonini.com>`__
|
||||
|
||||
- Michael Halstead: <mhalstead [at] linuxfoundation [dot] org>
|
||||
`Public key <https://pgp.mit.edu/pks/lookup?op=vindex&search=0x3373170601861969>`__
|
||||
or `Public key <https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xd1f2407285e571ed12a407a73373170601861969>`__
|
||||
|
||||
- Richard Purdie: <richard.purdie@linuxfoundation.org> `Public key <https://keys.openpgp.org/search?q=richard.purdie%40linuxfoundation.org>`__
|
||||
|
||||
- Marta Rybczynska: <marta DOT rybczynska [at] syslinbit [dot] com> `Public key <https://keys.openpgp.org/search?q=marta.rybczynska@syslinbit.com>`__
|
||||
|
||||
- Steve Sakoman: <steve [at] sakoman [dot] com> `Public key <https://keys.openpgp.org/search?q=steve%40sakoman.com>`__
|
||||
@@ -651,7 +651,7 @@ described in the ":ref:`dev-manual/start:accessing source archives`" section.
|
||||
.. note::
|
||||
|
||||
For a "map" of Yocto Project releases to version numbers, see the
|
||||
:yocto_wiki:`Releases </Releases>` wiki page.
|
||||
:yocto_home:`Releases </development/releases/>` page.
|
||||
|
||||
You can use the "RELEASE ARCHIVE" link to reveal a menu of all Yocto
|
||||
Project releases.
|
||||
|
||||
@@ -36,11 +36,11 @@ The path to the work directory for the recipe
|
||||
(:term:`WORKDIR`) is defined as
|
||||
follows::
|
||||
|
||||
${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
|
||||
${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${PV}
|
||||
|
||||
The actual directory depends on several things:
|
||||
|
||||
- :term:`TMPDIR`: The top-level build
|
||||
- :term:`BASE_WORKDIR`: The top-level build
|
||||
output directory.
|
||||
|
||||
- :term:`MULTIMACH_TARGET_SYS`:
|
||||
@@ -48,19 +48,13 @@ The actual directory depends on several things:
|
||||
|
||||
- :term:`PN`: The recipe name.
|
||||
|
||||
- :term:`EXTENDPE`: The epoch --- if
|
||||
:term:`PE` is not specified, which is
|
||||
usually the case for most recipes, then :term:`EXTENDPE` is blank.
|
||||
|
||||
- :term:`PV`: The recipe version.
|
||||
|
||||
- :term:`PR`: The recipe revision.
|
||||
|
||||
As an example, assume a Source Directory top-level folder named
|
||||
``poky``, a default :term:`Build Directory` at ``poky/build``, and a
|
||||
``project``, a default :term:`Build Directory` at ``project/build``, and a
|
||||
``qemux86-poky-linux`` machine target system. Furthermore, suppose your
|
||||
recipe is named ``foo_1.3.0.bb``. In this case, the work directory the
|
||||
build system uses to build the package would be as follows::
|
||||
|
||||
poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
|
||||
project/build/tmp/work/qemux86-poky-linux/foo/1.3.0
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ Welcome to the Yocto Project Documentation
|
||||
Yocto Project Software Overview <https://www.yoctoproject.org/software-overview/>
|
||||
Tips and Tricks Wiki <https://wiki.yoctoproject.org/wiki/TipsAndTricks>
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Manuals
|
||||
@@ -37,6 +36,12 @@ Welcome to the Yocto Project Documentation
|
||||
Test Environment Manual <test-manual/index>
|
||||
bitbake
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Security
|
||||
|
||||
Yocto Project Security Reference <security-reference/index>
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
:caption: Release Manuals
|
||||
|
||||
@@ -1191,10 +1191,12 @@ appear in the ``.config`` file, which is in the :term:`Build Directory`.
|
||||
|
||||
It is simple to create a configuration fragment. One method is to use
|
||||
shell commands. For example, issuing the following from the shell
|
||||
creates a configuration fragment file named ``my_smp.cfg`` that enables
|
||||
multi-processor support within the kernel::
|
||||
creates a configuration fragment file named ``my_changes.cfg`` that enables
|
||||
multi-processor support within the kernel and disables the FPGA
|
||||
Configuration Framework::
|
||||
|
||||
$ echo "CONFIG_SMP=y" >> my_smp.cfg
|
||||
$ echo "CONFIG_SMP=y" >> my_changes.cfg
|
||||
$ echo "# CONFIG_FPGA is not set" >> my_changes.cfg
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -1431,15 +1433,13 @@ Expanding Variables
|
||||
===================
|
||||
|
||||
Sometimes it is helpful to determine what a variable expands to during a
|
||||
build. You can examine the values of variables by examining the
|
||||
output of the ``bitbake -e`` command. The output is long and is more
|
||||
easily managed in a text file, which allows for easy searches::
|
||||
build. You can examine the value of a variable by running the ``bitbake-getvar``
|
||||
command::
|
||||
|
||||
$ bitbake -e virtual/kernel > some_text_file
|
||||
$ bitbake-getvar -r virtual/kernel VARIABLE
|
||||
|
||||
Within the text file, you can see
|
||||
exactly how each variable is expanded and used by the OpenEmbedded build
|
||||
system.
|
||||
The output of the command explains exactly how the variable is expanded and used
|
||||
by the :term:`OpenEmbedded Build System`.
|
||||
|
||||
Working with a "Dirty" Kernel Version String
|
||||
============================================
|
||||
|
||||
@@ -37,3 +37,5 @@ Release 4.0 (kirkstone)
|
||||
release-notes-4.0.28
|
||||
release-notes-4.0.29
|
||||
release-notes-4.0.30
|
||||
release-notes-4.0.31
|
||||
release-notes-4.0.32
|
||||
|
||||
@@ -19,3 +19,6 @@ Release 5.0 (scarthgap)
|
||||
release-notes-5.0.10
|
||||
release-notes-5.0.11
|
||||
release-notes-5.0.12
|
||||
release-notes-5.0.13
|
||||
release-notes-5.0.14
|
||||
release-notes-5.0.15
|
||||
|
||||
210
documentation/migration-guides/release-notes-4.0.31.rst
Normal file
@@ -0,0 +1,210 @@
|
||||
Release notes for Yocto-4.0.31 (Kirkstone)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-4.0.31
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: Fix :cve_nist:`2025-8225`, :cve_nist:`2025-11081`, :cve_nist:`2025-11082` and
|
||||
:cve_nist:`2025-11083`
|
||||
- busybox: Fix :cve_nist:`2025-46394`
|
||||
- cmake: Fix :cve_nist:`2025-9301`
|
||||
- curl: Fix :cve_nist:`2025-9086`
|
||||
- ffmpeg: Ignore :cve_nist:`2023-6603`
|
||||
- ffmpeg: mark :cve_nist:`2023-6601` as Fixed
|
||||
- ghostscript: Fix :cve_nist:`2025-59798`, :cve_nist:`2025-59799` and :cve_nist:`2025-59800`
|
||||
- git: Fix :cve_nist:`2025-48386`
|
||||
- glib-networking: Fix :cve_nist:`2025-60018` and :cve_nist:`2025-60019`
|
||||
- go: Fix :cve_nist:`2025-47906` and :cve_nist:`2025-47907`
|
||||
- grub2: Fix :cve_nist:`2024-56738`
|
||||
- grub: Ignore :cve_nist:`2024-2312`
|
||||
- gstreamer1.0-plugins-bad: Fix :cve_nist:`2025-3887`
|
||||
- gstreamer1.0: Ignore :cve_nist:`2025-2759`, :cve_nist:`2025-3887`, :cve_nist:`2025-47183`,
|
||||
:cve_nist:`2025-47219`, :cve_nist:`2025-47806`, :cve_nist:`2025-47807` and :cve_nist:`2025-47808`
|
||||
- python3-jinja2: Fix :cve_nist:`2024-56201`, :cve_nist:`2024-56326` and :cve_nist:`2025-27516`
|
||||
- libxml2: Fix :cve_nist:`2025-9714`
|
||||
- libxslt: Fix :cve_nist:`2025-7424`
|
||||
- lz4: Fix :cve_nist:`2025-62813`
|
||||
- openssl: Fix :cve_nist:`2025-9230` and :cve_nist:`2025-9232`
|
||||
- pulseaudio: Ignore :cve_nist:`2024-11586`
|
||||
- python3: Fix :cve_nist:`2024-6345`, :cve_nist:`2025-47273` and :cve_nist:`2025-59375`
|
||||
- qemu: Fix :cve_nist:`2024-8354`
|
||||
- tiff: Fix :cve_nist:`2025-8961`, :cve_nist:`2025-9165` and :cve_nist:`2025-9900`
|
||||
- vim: Fix :cve_nist:`2025-9389`
|
||||
|
||||
|
||||
Fixes in Yocto-4.0.31
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- build-appliance-image: Update to kirkstone head revision
|
||||
- poky.conf: bump version for 4.0.31
|
||||
- ref-manual/classes.rst: document the relative_symlinks class
|
||||
- ref-manual/classes.rst: gettext: extend the documentation of the class
|
||||
- ref-manual/variables.rst: document the CCACHE_DISABLE, UNINATIVE_CHECKSUM, UNINATIVE_URL, USE_NLS,
|
||||
REQUIRED_COMBINED_FEATURES, REQUIRED_IMAGE_FEATURES, :term:`REQUIRED_MACHINE_FEATURES` variable
|
||||
- ref-manual/variables.rst: fix :term:`LAYERDEPENDS` description
|
||||
- dev-manual, test-manual: Update autobuilder output links
|
||||
- ref-manual/classes.rst: extend the uninative class documentation
|
||||
- python3: upgrade to 3.10.19
|
||||
- linux-yocto/5.15: update to v5.15.194
|
||||
- glibc: : PTHREAD_COND_INITIALIZER compatibility with pre-2.41 versions (bug 32786)
|
||||
- glibc: nptl Use all of g1_start and g_signals
|
||||
- glibc: nptl rename __condvar_quiesce_and_switch_g1
|
||||
- glibc: nptl Fix indentation
|
||||
- glibc: nptl Use a single loop in pthread_cond_wait instaed of a nested loop
|
||||
- glibc: Remove g_refs from condition variables
|
||||
- glibc: nptl Remove unnecessary quadruple check in pthread_cond_wait
|
||||
- glibc: nptl Remove unnecessary catch-all-wake in condvar group switch
|
||||
- glibc: nptl Update comments and indentation for new condvar implementation
|
||||
- glibc: pthreads NPTL lost wakeup fix 2
|
||||
- glibc: Remove partial BZ#25847 backport patches
|
||||
- vulnerabilities: update nvdcve file name
|
||||
- migration-guides: add release notes for 4.0.30
|
||||
- oeqa/sdk/cases/buildcpio.py: use gnu mirror instead of main server
|
||||
- selftest/cases/meta_ide.py: use use gnu mirror instead of main server
|
||||
- conf/bitbake.conf: use gnu mirror instead of main server
|
||||
- p11-kit: backport fix for handle :term:`USE_NLS` from master
|
||||
- systemd: backport fix for handle :term:`USE_NLS` from master
|
||||
- glibc: stable 2.35 branch updates
|
||||
- openssl: upgrade to 3.0.18
|
||||
- scripts/install-buildtools: Update to 4.0.30
|
||||
- ref-manual/variables.rst: fix the description of :term:`STAGING_DIR`
|
||||
- ref-manual/structure: document the auto.conf file
|
||||
- dev-manual/building.rst: add note about externalsrc variables absolute paths
|
||||
- ref-manual/variables.rst: fix the description of :term:`KBUILD_DEFCONFIG`
|
||||
- kernel-dev/common.rst: fix the in-tree defconfig description
|
||||
- test-manual/yocto-project-compatible.rst: fix a typo
|
||||
- contributor-guide: submit-changes: make "Crediting contributors" part of "Commit your changes"
|
||||
- contributor-guide: submit-changes: number instruction list in commit your changes
|
||||
- contributor-guide: submit-changes: reword commit message instructions
|
||||
- contributor-guide: submit-changes: make the Cc tag follow kernel guidelines
|
||||
- contributor-guide: submit-changes: align :term:`CC` tag description
|
||||
- contributor-guide: submit-changes: clarify example with Yocto bug ID
|
||||
- contributor-guide: submit-changes: fix improper bold string
|
||||
- libhandy: update git branch name
|
||||
- python3-jinja2: upgrade to 3.1.6
|
||||
- vim: upgrade to 9.1.1683
|
||||
|
||||
|
||||
Known Issues in Yocto-4.0.31
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
|
||||
Contributors to Yocto-4.0.31
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Adam Blank
|
||||
- Aleksandar Nikolic
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- AshishKumar Mishra
|
||||
- Bruce Ashfield
|
||||
- Deepesh Varatharajan
|
||||
- Divya Chellam
|
||||
- Gyorgy Sarvari
|
||||
- Hitendra Prajapati
|
||||
- João Marcos Costa
|
||||
- Lee Chee Yang
|
||||
- Paul Barker
|
||||
- Peter Marko
|
||||
- Praveen Kumar
|
||||
- Quentin Schulz
|
||||
- Rajeshkumar Ramasamy
|
||||
- Saravanan
|
||||
- Soumya Sambu
|
||||
- Steve Sakoman
|
||||
- Sunil Dora
|
||||
- Talel BELHAJ SALEM
|
||||
- Theo GAIGE
|
||||
- Vijay Anusuri
|
||||
- Yash Shinde
|
||||
- Yogita Urade
|
||||
|
||||
Repositories / Downloads for Yocto-4.0.31
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`kirkstone </yocto-docs/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.31 </yocto-docs/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :yocto_git:`073f3bca4c374b03398317e7f445d2440a287741 </yocto-docs/commit/?id=073f3bca4c374b03398317e7f445d2440a287741>`
|
||||
- Release Artefact: yocto-docs-073f3bca4c374b03398317e7f445d2440a287741
|
||||
- sha: 3bfde9b6ad310dd42817509b67f61cd69552f74b2bc5011bd20788fe96d6823b
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/yocto-docs-073f3bca4c374b03398317e7f445d2440a287741.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/yocto-docs-073f3bca4c374b03398317e7f445d2440a287741.tar.bz2
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`kirkstone </poky/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.31 </poky/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :yocto_git:`04b39e5b7eb19498215d85c88a5fffb460fea1eb </poky/commit/?id=04b39e5b7eb19498215d85c88a5fffb460fea1eb>`
|
||||
- Release Artefact: poky-04b39e5b7eb19498215d85c88a5fffb460fea1eb
|
||||
- sha: 0ca18ab1ed25c0d77412ba30dbb03d74811756c7c2fe2401940f848a5e734930
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/poky-04b39e5b7eb19498215d85c88a5fffb460fea1eb.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/poky-04b39e5b7eb19498215d85c88a5fffb460fea1eb.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`kirkstone </openembedded-core/log/?h=kirkstone>`
|
||||
- Tag: :oe_git:`yocto-4.0.31 </openembedded-core/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :oe_git:`99204008786f659ab03538cd2ae2fd23ed4164c5 </openembedded-core/commit/?id=99204008786f659ab03538cd2ae2fd23ed4164c5>`
|
||||
- Release Artefact: oecore-99204008786f659ab03538cd2ae2fd23ed4164c5
|
||||
- sha: aa97bf826ad217b3a5278b4ad60bef4d194f0f1ff617677cf2323d3cc4897687
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/oecore-99204008786f659ab03538cd2ae2fd23ed4164c5.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/oecore-99204008786f659ab03538cd2ae2fd23ed4164c5.tar.bz2
|
||||
|
||||
meta-yocto
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-yocto`
|
||||
- Branch: :yocto_git:`kirkstone </meta-yocto/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.31 </meta-yocto/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :yocto_git:`3b2df00345b46479237fe0218675a818249f891c </meta-yocto/commit/?id=3b2df00345b46479237fe0218675a818249f891c>`
|
||||
- Release Artefact: meta-yocto-3b2df00345b46479237fe0218675a818249f891c
|
||||
- sha: 630e99e0f515bab8a316b2e32aff1352b4404f15aa087e8821b84093596a08ce
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/meta-yocto-3b2df00345b46479237fe0218675a818249f891c.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/meta-yocto-3b2df00345b46479237fe0218675a818249f891c.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`kirkstone </meta-mingw/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.31 </meta-mingw/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :yocto_git:`87c22abb1f11be430caf4372e6b833dc7d77564e </meta-mingw/commit/?id=87c22abb1f11be430caf4372e6b833dc7d77564e>`
|
||||
- Release Artefact: meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e
|
||||
- sha: f0bc4873e2e0319fb9d6d6ab9b98eb3f89664d4339a167d2db6a787dd12bc1a8
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
|
||||
meta-gplv2
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-gplv2`
|
||||
- Branch: :yocto_git:`kirkstone </meta-gplv2/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.31 </meta-gplv2/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :yocto_git:`d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a </meta-gplv2/commit/?id=d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a>`
|
||||
- Release Artefact: meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a
|
||||
- sha: c386f59f8a672747dc3d0be1d4234b6039273d0e57933eb87caa20f56b9cca6d
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.0 </bitbake/log/?h=2.0>`
|
||||
- Tag: :oe_git:`yocto-4.0.31 </bitbake/log/?h=yocto-4.0.31>`
|
||||
- Git Revision: :oe_git:`8e2d1f8de055549b2101614d85454fcd1d0f94b2 </bitbake/commit/?id=8e2d1f8de055549b2101614d85454fcd1d0f94b2>`
|
||||
- Release Artefact: bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2
|
||||
- sha: fad4e7699bae62082118e89785324b031b0af0743064caee87c91ba28549afb0
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.31/bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2.tar.bz2
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.31/bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2.tar.bz2
|
||||
|
||||
194
documentation/migration-guides/release-notes-4.0.32.rst
Normal file
@@ -0,0 +1,194 @@
|
||||
Release notes for Yocto-4.0.32 (Kirkstone)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-4.0.32
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- bind: Fix :cve_nist:`2025-8677`, :cve_nist:`2025-40778` and :cve_nist:`2025-40780`
|
||||
- binutils: Fix :cve_nist:`2025-11412` and :cve_nist:`2025-11413`
|
||||
- curl: Ignore :cve_nist:`2025-10966`
|
||||
- elfutils: Fix :cve_nist:`2025-1376` and :cve_nist:`2025-1377`
|
||||
- gnutls: Fix :cve_nist:`2025-9820`
|
||||
- go: Fix :cve_nist:`2024-24783`, :cve_nist:`2025-58187`, :cve_nist:`2025-58189`,
|
||||
:cve_nist:`2025-61723` and :cve_nist:`2025-61724`
|
||||
- libarchive: Fix :cve_nist:`2025-60753`
|
||||
- libarchive: Fix 2 security issue (https://github.com/libarchive/libarchive/pull/2753 and
|
||||
https://github.com/libarchive/libarchive/pull/2768)
|
||||
- libpng: Fix :cve_nist:`2025-64505`, :cve_nist:`2025-64506`, :cve_nist:`2025-64720`,
|
||||
:cve_nist:`2025-65018` and :cve_nist:`2025-66293`
|
||||
- libxml2: Fix :cve_nist:`2025-7425`
|
||||
- musl: Fix :cve_nist:`2025-26519`
|
||||
- openssh: Fix :cve_nist:`2025-61984` and :cve_nist:`2025-61985`
|
||||
- python3-idna: Fix :cve_nist:`2024-3651`
|
||||
- python3-urllib3: Fix :cve_nist:`2024-37891`
|
||||
- python3: fix :cve_nist:`2025-6075`
|
||||
- ruby: Fix :cve_nist:`2024-35176`, :cve_nist:`2024-39908` and :cve_nist:`2024-41123`
|
||||
- rust-cross-canadian: Ignore :cve_nist:`2024-43402`
|
||||
- u-boot: Fix :cve_nist:`2024-42040`
|
||||
- wpa-supplicant: Fix :cve_nist:`2025-24912`
|
||||
- xserver-xorg: Fix :cve_nist:`2025-62229`, :cve_nist:`2025-62230` and :cve_nist:`2025-62231`
|
||||
- xwayland: Fix :cve_nist:`2025-62229`, :cve_nist:`2025-62230` and :cve_nist:`2025-62231`
|
||||
|
||||
|
||||
Fixes in Yocto-4.0.32
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- babeltrace2: fetch with https protocol
|
||||
- bind: upgrade to 9.18.41
|
||||
- build-appliance-image: Update to kirkstone head revision
|
||||
- dev-manual/layers.rst: document "bitbake-layers show-machines"
|
||||
- dev-manual/new-recipe.rst: replace 'bitbake -e' with 'bitbake-getvar'
|
||||
- dev-manual/new-recipe.rst: typo, "whith" -> "which"
|
||||
- dev-manual/new-recipe.rst: update "recipetool -h" output
|
||||
- dev-manual: debugging: use bitbake-getvar in Viewing Variable Values section
|
||||
- documentation: link to the Releases page on yoctoproject.org instead of wiki
|
||||
- efibootmgr: update :term:`SRC_URI` branch
|
||||
- flac: patch seeking bug
|
||||
- goarch.bbclass: do not leak :term:`TUNE_FEATURES` into crosssdk task signatures
|
||||
- kernel-dev: add disable config example
|
||||
- kernel-dev: common: migrate bitbake -e to bitbake-getvar
|
||||
- libmicrohttpd: disable experimental code by default
|
||||
- migration-guides: add release notes for 4.0.31
|
||||
- oe-build-perf-report: relax metadata matching rules
|
||||
- overview-manual: migrate to SVG + fix typo
|
||||
- poky.conf: bump version for 4.0.32
|
||||
- python3-urllib3: upgrade to 1.26.20
|
||||
- recipes: Don't use ftp.gnome.org
|
||||
- ref-manual: variables: migrate the :term:`OVERRIDES` note to bitbake-getvar
|
||||
- systemd-bootchart: update :term:`SRC_URI` branch
|
||||
- xf86-video-intel: correct :term:`SRC_URI` as freedesktop anongit is down
|
||||
|
||||
|
||||
Known Issues in Yocto-4.0.32
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
|
||||
Contributors to Yocto-4.0.32
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
|
||||
- Alexander Kanavin
|
||||
- Archana Polampalli
|
||||
- Divya Chellam
|
||||
- Gyorgy Sarvari
|
||||
- Hitendra Prajapati
|
||||
- Hongxu Jia
|
||||
- Jason Schonberg
|
||||
- Lee Chee Yang
|
||||
- Peter Marko
|
||||
- Praveen Kumar
|
||||
- Quentin Schulz
|
||||
- Richard Purdie
|
||||
- Robert P. J. Day
|
||||
- Ross Burton
|
||||
- Saquib Iltaf
|
||||
- Soumya Sambu
|
||||
- Steve Sakoman
|
||||
- Vijay Anusuri
|
||||
- Walter Werner SCHNEIDER
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-4.0.32
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`kirkstone </yocto-docs/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.32 </yocto-docs/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :yocto_git:`4b9df539fa06fb19ed8b51ef2d46e5c56779de81 </yocto-docs/commit/?id=4b9df539fa06fb19ed8b51ef2d46e5c56779de81>`
|
||||
- Release Artefact: yocto-docs-4b9df539fa06fb19ed8b51ef2d46e5c56779de81
|
||||
- sha: 70ee2caf576683c5f31ac5a592cde1c0650ece25cfcd5ff3cc7eedf531575611
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/yocto-docs-4b9df539fa06fb19ed8b51ef2d46e5c56779de81.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/yocto-docs-4b9df539fa06fb19ed8b51ef2d46e5c56779de81.tar.bz2
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`kirkstone </poky/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.32 </poky/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :yocto_git:`2c05660b21c7cc1082aeac8b75d8a2d82e249f63 </poky/commit/?id=2c05660b21c7cc1082aeac8b75d8a2d82e249f63>`
|
||||
- Release Artefact: poky-2c05660b21c7cc1082aeac8b75d8a2d82e249f63
|
||||
- sha: d7a55a18a597a7b140a81586b7ca6379c208ebbb3285de36c48fde10882947d8
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/poky-2c05660b21c7cc1082aeac8b75d8a2d82e249f63.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/poky-2c05660b21c7cc1082aeac8b75d8a2d82e249f63.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`kirkstone </openembedded-core/log/?h=kirkstone>`
|
||||
- Tag: :oe_git:`yocto-4.0.32 </openembedded-core/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :oe_git:`2ed3f8b938579dbbb804e04c45a968cc57761db7 </openembedded-core/commit/?id=2ed3f8b938579dbbb804e04c45a968cc57761db7>`
|
||||
- Release Artefact: oecore-2ed3f8b938579dbbb804e04c45a968cc57761db7
|
||||
- sha: 11b9632586dfbf3f0ef69eca2014a8002f25ca8d53cfe9424e27361ba3a20831
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/oecore-2ed3f8b938579dbbb804e04c45a968cc57761db7.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/oecore-2ed3f8b938579dbbb804e04c45a968cc57761db7.tar.bz2
|
||||
|
||||
meta-yocto
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-yocto`
|
||||
- Branch: :yocto_git:`kirkstone </meta-yocto/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.32 </meta-yocto/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :yocto_git:`77b40877c179ea3ce5c37c7ba1831e9c0e289266 </meta-yocto/commit/?id=77b40877c179ea3ce5c37c7ba1831e9c0e289266>`
|
||||
- Release Artefact: meta-yocto-77b40877c179ea3ce5c37c7ba1831e9c0e289266
|
||||
- sha: e908d42690881cd6e07b9ca18a21eb8761a0ec72d940b12905622e75ba913974
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/meta-yocto-77b40877c179ea3ce5c37c7ba1831e9c0e289266.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/meta-yocto-77b40877c179ea3ce5c37c7ba1831e9c0e289266.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`kirkstone </meta-mingw/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.32 </meta-mingw/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :yocto_git:`87c22abb1f11be430caf4372e6b833dc7d77564e </meta-mingw/commit/?id=87c22abb1f11be430caf4372e6b833dc7d77564e>`
|
||||
- Release Artefact: meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e
|
||||
- sha: f0bc4873e2e0319fb9d6d6ab9b98eb3f89664d4339a167d2db6a787dd12bc1a8
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
|
||||
meta-gplv2
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-gplv2`
|
||||
- Branch: :yocto_git:`kirkstone </meta-gplv2/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.32 </meta-gplv2/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :yocto_git:`d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a </meta-gplv2/commit/?id=d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a>`
|
||||
- Release Artefact: meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a
|
||||
- sha: c386f59f8a672747dc3d0be1d4234b6039273d0e57933eb87caa20f56b9cca6d
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.0 </bitbake/log/?h=2.0>`
|
||||
- Tag: :oe_git:`yocto-4.0.32 </bitbake/log/?h=yocto-4.0.32>`
|
||||
- Git Revision: :oe_git:`8e2d1f8de055549b2101614d85454fcd1d0f94b2 </bitbake/commit/?id=8e2d1f8de055549b2101614d85454fcd1d0f94b2>`
|
||||
- Release Artefact: bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2
|
||||
- sha: fad4e7699bae62082118e89785324b031b0af0743064caee87c91ba28549afb0
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.32/bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2.tar.bz2
|
||||
|
||||
https://mirrors.edge.kernel.org/yocto/yocto/yocto-4.0.32/bitbake-8e2d1f8de055549b2101614d85454fcd1d0f94b2.tar.bz2
|
||||
|
||||
@@ -274,7 +274,7 @@ New Features / Enhancements in 4.3
|
||||
|
||||
- New :doc:`../contributor-guide/index` document.
|
||||
|
||||
- New :doc:`../dev-manual/security-subjects` chapter in the Development
|
||||
- New "Dealing with Vulnerability Reports" chapter in the Development
|
||||
Tasks Manual.
|
||||
|
||||
- Long overdue documentation for the :ref:`ref-classes-devicetree` class.
|
||||
|
||||
241
documentation/migration-guides/release-notes-5.0.13.rst
Normal file
@@ -0,0 +1,241 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Release notes for Yocto-5.0.13 (Scarthgap)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-5.0.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- busybox: Fix :cve_nist:`2025-46394`
|
||||
- cups: Fix :cve_nist:`2025-58060` and :cve_nist:`2025-58364`
|
||||
- curl: Fix :cve_nist:`2025-9086`
|
||||
- dpkg: Fix :cve_nist:`2025-6297`
|
||||
- expat: follow-up Fix :cve_nist:`2024-8176`
|
||||
- ffmpeg: Fix :cve_nist:`2025-1594`
|
||||
- ffmpeg: Ignore :cve_nist:`2023-49502`, :cve_nist:`2023-50007`, :cve_nist:`2023-50008`,
|
||||
:cve_nist:`2023-50009`, :cve_nist:`2023-50010`, :cve_nist:`2024-31578`, :cve_nist:`2024-31582`
|
||||
and :cve_nist:`2024-31585`
|
||||
- ghostscript: Fix :cve_nist:`2025-59798`, :cve_nist:`2025-59799` and :cve_nist:`2025-59800`
|
||||
- glib-2.0: Fix :cve_nist:`2025-6052` and :cve_nist:`2025-7039`
|
||||
- go-binary-native: Ignore :cve_nist:`2025-0913`
|
||||
- go: Fix :cve_nist:`2025-4674`, :cve_nist:`2025-47906` and :cve_nist:`2025-47907`
|
||||
- grub2: Fix :cve_nist:`2024-56738`
|
||||
- grub2: Ignore :cve_nist:`2024-2312`
|
||||
- gstreamer1.0-plugins-bad: Fix :cve_nist:`2025-3887`
|
||||
- gstreamer1.0-plugins-base: Fix :cve_nist:`2025-47807`
|
||||
- gstreamer1.0-plugins-base: Ignore :cve_nist:`2025-47806` and :cve_nist:`2025-47808`
|
||||
- gstreamer1.0-plugins-good: Ignore :cve_nist:`2025-47183` and :cve_nist:`2025-47219`
|
||||
- gstreamer1.0: Ignore :cve_nist:`2025-2759`
|
||||
- libpam: Fix :cve_nist:`2024-10963`
|
||||
- libxslt: Fix :cve_nist:`2025-7424`
|
||||
- openssl: Fix :cve_nist:`2025-9230`, :cve_nist:`2025-9231` and :cve_nist:`2025-9232`
|
||||
- pulseaudio: Ignore :cve_nist:`2024-11586`
|
||||
- qemu: Ignore :cve_nist:`2024-7730`
|
||||
- tiff: Fix :cve_nist:`2025-9900`
|
||||
- tiff: Ignore :cve_nist:`2024-13978`, :cve_nist:`2025-8176`, :cve_nist:`2025-8177`,
|
||||
:cve_nist:`2025-8534` and :cve_nist:`2025-8851`
|
||||
- vim: Fix :cve_nist:`2025-9389`
|
||||
- wpa-supplicant: Fix :cve_nist:`2022-37660`
|
||||
|
||||
|
||||
Fixes in Yocto-5.0.13
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: fix build with gcc-15
|
||||
- bitbake: Use a "fork" multiprocessing context
|
||||
- bitbake: bitbake: Bump version to 2.8.1
|
||||
- build-appliance-image: Update to scarthgap head revision
|
||||
- buildtools-tarball: fix unbound variable issues under 'set -u'
|
||||
- cmake: fix build with gcc-15 on host
|
||||
- conf/bitbake.conf: use gnu mirror instead of main server
|
||||
- contributor-guide: submit-changes: align :term:`CC` tag description
|
||||
- contributor-guide: submit-changes: clarify example with Yocto bug ID
|
||||
- contributor-guide: submit-changes: fix improper bold string
|
||||
- contributor-guide: submit-changes: make "Crediting contributors" part of "Commit your changes"
|
||||
- contributor-guide: submit-changes: make the Cc tag follow kernel guidelines
|
||||
- contributor-guide: submit-changes: number instruction list in commit your changes
|
||||
- contributor-guide: submit-changes: reword commit message instructions
|
||||
- cpio: Pin to use C17 std
|
||||
- cups: upgrade to 2.4.11
|
||||
- curl: update :term:`CVE_STATUS` for :cve_nist:`2025-5025`
|
||||
- dbus-glib: fix build with gcc-15
|
||||
- default-distrovars.inc: Fix CONNECTIVITY_CHECK_URIS redirect issue
|
||||
- dev-manual/building.rst: add note about externalsrc variables absolute paths
|
||||
- dev-manual/security-subjects.rst: update mailing lists
|
||||
- elfutils: fix build with gcc-15
|
||||
- examples: genl: fix wrong attribute size
|
||||
- expect: Fix build with GCC 15
|
||||
- expect: Revert "expect-native: fix do_compile failure with gcc-14"
|
||||
- expect: cleanup do_install
|
||||
- expect: don't run aclocal in do_configure
|
||||
- expect: fix native build with GCC 15
|
||||
- expect: update code for Tcl channel implementation
|
||||
- ffmpeg: upgrade to 6.1.3
|
||||
- gdbm: Use C11 standard
|
||||
- git: fix build with gcc-15 on host
|
||||
- gmp: Fix build with GCC15/C23
|
||||
- gmp: Fix build with older gcc versions
|
||||
- kernel-dev/common.rst: fix the in-tree defconfig description
|
||||
- lib/oe/utils: use multiprocessing from bb
|
||||
- libarchive: patch regression of patch for :cve_nist:`2025-5918`
|
||||
- libgpg-error: fix build with gcc-15
|
||||
- libtirpc: Fix build with gcc-15/C23
|
||||
- license.py: avoid deprecated ast.Str
|
||||
- llvm: fix build with gcc-15
|
||||
- llvm: update to 18.1.8
|
||||
- m4: Stick to C17 standard
|
||||
- migration-guides: add release notes for 4.0.29 5.0.12
|
||||
- ncurses: Pin to C17 standard
|
||||
- oeqa/sdk/cases/buildcpio.py: use gnu mirror instead of main server
|
||||
- openssl: upgrade to 3.2.6
|
||||
- p11-kit: backport fix for handle :term:`USE_NLS` from master
|
||||
- pkgconfig: fix build with gcc-15
|
||||
- poky.conf: bump version for 5.0.13
|
||||
- pulseaudio: Add audio group explicitly
|
||||
- ref-manual/structure: document the auto.conf file
|
||||
- ref-manual/variables.rst: expand :term:`IMAGE_OVERHEAD_FACTOR` glossary entry
|
||||
- ref-manual/variables.rst: fix the description of :term:`KBUILD_DEFCONFIG` :term:`STAGING_DIR`
|
||||
- rpm: keep leading "/" from sed operation
|
||||
- ruby-ptest: some ptest fixes
|
||||
- runqemu: fix special characters bug
|
||||
- rust-llvm: fix build with gcc-15
|
||||
- sanity.conf: Update minimum bitbake version to 2.8.1
|
||||
- scripts/install-buildtools: Update to 5.0.12
|
||||
- sdk: The main in the C example should return an int
|
||||
- selftest/cases/meta_ide.py: use use gnu mirror instead of main server
|
||||
- shared-mime-info: Handle :term:`USE_NLS`
|
||||
- sudo: remove devtool FIXME comment
|
||||
- systemd: backport fix for handle :term:`USE_NLS` from master
|
||||
- systemtap: Fix task_work_cancel build
|
||||
- test-manual/yocto-project-compatible.rst: fix a typo
|
||||
- test-manual: update runtime-testing Exporting Tests section
|
||||
- unifdef: Don't use C23 constexpr keyword
|
||||
- unzip: Fix build with GCC-15
|
||||
- util-linux: use ${B} instead of ${WORKDIR}/build, to fix building under devtool
|
||||
- vim: upgrade to 9.1.1683
|
||||
- yocto-uninative: Update to 4.9 for glibc 2.42 GCC 15.1
|
||||
|
||||
|
||||
Known Issues in Yocto-5.0.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
Contributors to Yocto-5.0.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
- Adam Blank
|
||||
- Adrian Freihofer
|
||||
- Aleksandar Nikolic
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- AshishKumar Mishra
|
||||
- Barne Carstensen
|
||||
- Chris Laplante
|
||||
- Deepak Rathore
|
||||
- Divya Chellam
|
||||
- Gyorgy Sarvari
|
||||
- Haixiao Yan
|
||||
- Hitendra Prajapati
|
||||
- Hongxu Jia
|
||||
- Jan Vermaete
|
||||
- Jiaying Song
|
||||
- Jinfeng Wang
|
||||
- Joao Marcos Costa
|
||||
- Joshua Watt
|
||||
- Khem Raj
|
||||
- Kyungjik Min
|
||||
- Lee Chee Yang
|
||||
- Libo Chen
|
||||
- Martin Jansa
|
||||
- Michael Halstead
|
||||
- Nitin Wankhade
|
||||
- Peter Marko
|
||||
- Philip Lorenz
|
||||
- Praveen Kumar
|
||||
- Quentin Schulz
|
||||
- Ross Burton
|
||||
- Stanislav Vovk
|
||||
- Steve Sakoman
|
||||
- Talel BELHAJ SALEM
|
||||
- Vijay Anusuri
|
||||
- Vrushti Dabhi
|
||||
- Yogita Urade
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-5.0.13
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`scarthgap </yocto-docs/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.13 </yocto-docs/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :yocto_git:`6f086fd3d9dbbb0c80f6c3e89b8df4fed422e79a </yocto-docs/commit/?id=6f086fd3d9dbbb0c80f6c3e89b8df4fed422e79a>`
|
||||
- Release Artefact: yocto-docs-6f086fd3d9dbbb0c80f6c3e89b8df4fed422e79a
|
||||
- sha: 454601d8b6034268212f74ca689ed360b08f7a4c7de5df726aa3706586ca4351
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/yocto-docs-6f086fd3d9dbbb0c80f6c3e89b8df4fed422e79a.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/yocto-docs-6f086fd3d9dbbb0c80f6c3e89b8df4fed422e79a.tar.bz2
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`scarthgap </poky/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.13 </poky/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :yocto_git:`f16cffd030d21d12dd57bb95cfc310bda41f8a1f </poky/commit/?id=f16cffd030d21d12dd57bb95cfc310bda41f8a1f>`
|
||||
- Release Artefact: poky-f16cffd030d21d12dd57bb95cfc310bda41f8a1f
|
||||
- sha: 1367e43907f5ffa725f3afb019cd7ca07de21f13e5e73a1f5d1808989ae6ed2a
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/poky-f16cffd030d21d12dd57bb95cfc310bda41f8a1f.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/poky-f16cffd030d21d12dd57bb95cfc310bda41f8a1f.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`scarthgap </openembedded-core/log/?h=scarthgap>`
|
||||
- Tag: :oe_git:`yocto-5.0.13 </openembedded-core/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :oe_git:`7af6b75221d5703ba5bf43c7cd9f1e7a2e0ed20b </openembedded-core/commit/?id=7af6b75221d5703ba5bf43c7cd9f1e7a2e0ed20b>`
|
||||
- Release Artefact: oecore-7af6b75221d5703ba5bf43c7cd9f1e7a2e0ed20b
|
||||
- sha: 4dcf636ec4a7b38b47a24e9cb3345b385bc126bb19620bf6af773bf292fef6b2
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/oecore-7af6b75221d5703ba5bf43c7cd9f1e7a2e0ed20b.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/oecore-7af6b75221d5703ba5bf43c7cd9f1e7a2e0ed20b.tar.bz2
|
||||
|
||||
meta-yocto
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-yocto`
|
||||
- Branch: :yocto_git:`scarthgap </meta-yocto/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.13 </meta-yocto/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :yocto_git:`3ff7ca786732390cd56ae92ff4a43aba46a1bf2e </meta-yocto/commit/?id=3ff7ca786732390cd56ae92ff4a43aba46a1bf2e>`
|
||||
- Release Artefact: meta-yocto-3ff7ca786732390cd56ae92ff4a43aba46a1bf2e
|
||||
- sha: 8efbaeab49dc3e1c4b67ff8d5801df1b05204c2255d18cff9a6857769ae33b23
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/meta-yocto-3ff7ca786732390cd56ae92ff4a43aba46a1bf2e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/meta-yocto-3ff7ca786732390cd56ae92ff4a43aba46a1bf2e.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`scarthgap </meta-mingw/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.13 </meta-mingw/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :yocto_git:`bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f </meta-mingw/commit/?id=bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f>`
|
||||
- Release Artefact: meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f
|
||||
- sha: ab073def6487f237ac125d239b3739bf02415270959546b6b287778664f0ae65
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.8 </bitbake/log/?h=2.8>`
|
||||
- Tag: :oe_git:`yocto-5.0.13 </bitbake/log/?h=yocto-5.0.13>`
|
||||
- Git Revision: :oe_git:`1c9ec1ffde75809de34c10d3ec2b40d84d258cb4 </bitbake/commit/?id=1c9ec1ffde75809de34c10d3ec2b40d84d258cb4>`
|
||||
- Release Artefact: bitbake-1c9ec1ffde75809de34c10d3ec2b40d84d258cb4
|
||||
- sha: 98bf54fa3abe237b73a93b1e33842a429209371fca6e409c258a441987879d16
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.13/bitbake-1c9ec1ffde75809de34c10d3ec2b40d84d258cb4.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.13/bitbake-1c9ec1ffde75809de34c10d3ec2b40d84d258cb4.tar.bz2
|
||||
|
||||
211
documentation/migration-guides/release-notes-5.0.14.rst
Normal file
@@ -0,0 +1,211 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Release notes for Yocto-5.0.14 (Scarthgap)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-5.0.14
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- bind: Fix :cve_nist:`2025-8677`, :cve_nist:`2025-40778` and :cve_nist:`2025-40780`
|
||||
- binutils: Fix :cve_nist:`2025-8225`, :cve_nist:`2025-11081`, :cve_nist:`2025-11082`,
|
||||
:cve_nist:`2025-11083`, :cve_nist:`2025-11412`, :cve_nist:`2025-11413` and :cve_nist:`2025-11414`
|
||||
- cmake: fix :cve_nist:`2025-9301`
|
||||
- curl: Ignore :cve_nist:`2025-10966`
|
||||
- elfutils: Fix :cve_nist:`2025-1376` and :cve_nist:`2025-1377`
|
||||
- expat: Fix :cve_nist:`2025-59375`
|
||||
- glib-networking: Fix :cve_nist:`2025-60018` and :cve_nist:`2025-60019`
|
||||
- gnupg: Ignore :cve_nist:`2025-30258`
|
||||
- go: Fix :cve_nist:`2025-47912`, :cve_nist:`2025-58185`, :cve_nist:`2025-58187`,
|
||||
:cve_nist:`2025-58188`, :cve_nist:`2025-58189`, :cve_nist:`2025-61723` and :cve_nist:`2025-61724`
|
||||
- libpam: Ignore :cve_nist:`2025-6018`
|
||||
- lz4: Fix :cve_nist:`2025-62813`
|
||||
- openssh: Fix :cve_nist:`2025-61984` and :cve_nist:`2025-61985`
|
||||
- python3: Fix :cve_nist:`2025-59375`
|
||||
- python3-xmltodict: Fix :cve_nist:`2025-9375`
|
||||
- qemu: Fix :cve_nist:`2024-8354`
|
||||
- tiff: Ignore :cve_nist:`2025-8961`
|
||||
- u-boot: Fix :cve_nist:`2024-42040`
|
||||
- wpa-supplicant: Fix :cve_nist:`2025-24912`
|
||||
|
||||
|
||||
Fixes in Yocto-5.0.14
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- bind: upgrade to 9.18.41
|
||||
- bitbake: bb/fetch2/__init__.py: remove a DeprecationWarning in uri_replace()
|
||||
- bitbake: fetch2/wget: Keep query parameters in URL during checkstatus
|
||||
- build-appliance-image: Update to scarthgap head revision
|
||||
- ca-certificates: Add comment for provenance of :term:`SRCREV`
|
||||
- ca-certificates: fix on-target postinstall script
|
||||
- ca-certificates: get sources from debian tarballs
|
||||
- ca-certificates: submit sysroot patch upstream, drop default-sysroot.patch
|
||||
- ca-certificates: upgrade to 20250419
|
||||
- classes/create-spdx-2.2: align DEPLOY_DIR_SPDX with SPDX_VERSION layout
|
||||
- classes/create-spdx-2.2: Handle empty packages
|
||||
- classes-global/license: Move functions to library code
|
||||
- classes-global/staging: Exclude do_create_spdx from automatic sysroot extension
|
||||
- classes-recipe/baremetal-image: Add image file manifest
|
||||
- classes-recipe/image: Add image file manifest
|
||||
- curl: only set CA bundle in target build
|
||||
- dev-manual, test-manual: Update autobuilder output links
|
||||
- flex: fix build with gcc-15 on host
|
||||
- glibc: stable 2.39 branch updates
|
||||
- gstreamer1.0-plugins-bad: fix buffer allocation fail for v4l2codecs
|
||||
- icu: Backport patch to fix build issues with long paths (>512 chars)
|
||||
- iptables: remove /etc/ethertypes
|
||||
- lib/license: Move package license skip to library
|
||||
- lib: oe: license: Add missing import
|
||||
- lib: oeqa: spdx: Add tests for extra options
|
||||
- linux-yocto/6.6: update to v6.6.111
|
||||
- meta: backport :term:`SPDX` 3.0 fixes and tasks from upstream version Walnascar
|
||||
- migration-guides: add release notes for 4.0.30
|
||||
- oe-build-perf-report: relax metadata matching rules
|
||||
- oe-core: Remove empty file
|
||||
- oeqa/runtime/ping: don't bother trying to ping localhost
|
||||
- oeqa/selftest: Add :term:`SPDX` 3.0 include source case for work-share
|
||||
- oeqa/selftest/devtool: Update after upstream repo changes
|
||||
- oeqa: spdx: Add tar test for :term:`SPDX` 2.2
|
||||
- overview-manual/yp-intro.rst: update on-target packaging info
|
||||
- perf: add arm64 source files for unistd_64.h
|
||||
- poky.conf: bump version for 5.0.14
|
||||
- python3: upgrade to 3.12.12
|
||||
- ref-manual/classes.rst: document the relative_symlinks class
|
||||
- ref-manual/classes.rst: extend the uninative class documentation
|
||||
- ref-manual/classes.rst: gettext: extend the documentation of the class
|
||||
- ref-manual/variables.rst: document :term:`CCACHE_DISABLE` CHECKSUM :term:`UNINATIVE_URL`
|
||||
:term:`REQUIRED_COMBINED_FEATURES` :term:`REQUIRED_IMAGE_FEATURES`
|
||||
:term:`REQUIRED_MACHINE_FEATURES` :term:`USE_NLS` variable
|
||||
- ref-manual/variables.rst: fix :term:`LAYERDEPENDS` description
|
||||
- selftest: spdx: Add :term:`SPDX` 3.0 test cases
|
||||
- selftest/spdx: Fix for SPDX_VERSION addition
|
||||
- spdx 3.0: Rework how :term:`SPDX` aliases are linked
|
||||
- spdx30_tasks: adapt CVE handling to new cve-check API
|
||||
- spdx30_tasks: fix FetchData attribute in add_download_files
|
||||
- util-linux: fix pointer usage in hwclock param handling
|
||||
- vulnerabilities: update nvdcve file name
|
||||
- webkitgtk: upgrade to 2.44.4
|
||||
- wireless-regdb: upgrade to 2025.10.07
|
||||
- xf86-video-intel: correct :term:`SRC_URI` as freedesktop anongit is down
|
||||
|
||||
|
||||
Known Issues in Yocto-5.0.14
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
Contributors to Yocto-5.0.14
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
- Alexander Kanavin
|
||||
- Anders Heimer
|
||||
- Ankur Tyagi
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- Bastian Krause
|
||||
- Bin Lan
|
||||
- Bruce Ashfield
|
||||
- Carlos Alberto Lopez Perez
|
||||
- Daniel Semkowicz
|
||||
- David Nyström
|
||||
- Deepesh Varatharajan
|
||||
- Gyorgy Sarvari
|
||||
- Hongxu Jia
|
||||
- Joshua Watt
|
||||
- João Marcos Costa
|
||||
- Kamel Bouhara (Schneider Electric)
|
||||
- Lee Chee Yang
|
||||
- Martin Jansa
|
||||
- Matthias Schiffer
|
||||
- Michael Haener
|
||||
- Paul Barker
|
||||
- Peter Marko
|
||||
- Philippe-Alexandre Mathieu
|
||||
- Praveen Kumar
|
||||
- Rajeshkumar Ramasamy
|
||||
- Rasmus Villemoes
|
||||
- Richard Purdie
|
||||
- Robert P. J. Day
|
||||
- Saravanan
|
||||
- Soumya Sambu
|
||||
- Steve Sakoman
|
||||
- Theodore A. Roth
|
||||
- Wang Mingyu
|
||||
- Yannic Moog
|
||||
- Yash Shinde
|
||||
- Yogita Urade
|
||||
|
||||
Repositories / Downloads for Yocto-5.0.14
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`scarthgap </yocto-docs/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.14 </yocto-docs/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :yocto_git:`a8687e4bb2e822670b6ad110613a12fa02943d3d </yocto-docs/commit/?id=a8687e4bb2e822670b6ad110613a12fa02943d3d>`
|
||||
- Release Artefact: yocto-docs-a8687e4bb2e822670b6ad110613a12fa02943d3d
|
||||
- sha: 72a51b6049a59f773720d9b0aa94f090222a41aeb22d65c5f4211c78418fb6fa
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/yocto-docs-a8687e4bb2e822670b6ad110613a12fa02943d3d.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/yocto-docs-a8687e4bb2e822670b6ad110613a12fa02943d3d.tar.bz2
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`scarthgap </poky/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.14 </poky/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :yocto_git:`7e8674996b0164b07e56bc066d0fba790e627061 </poky/commit/?id=7e8674996b0164b07e56bc066d0fba790e627061>`
|
||||
- Release Artefact: poky-7e8674996b0164b07e56bc066d0fba790e627061
|
||||
- sha: 071e189ebccfad99d4d79ea9021475296fa642611828249f0963b019f842a021
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/poky-7e8674996b0164b07e56bc066d0fba790e627061.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/poky-7e8674996b0164b07e56bc066d0fba790e627061.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`scarthgap </openembedded-core/log/?h=scarthgap>`
|
||||
- Tag: :oe_git:`yocto-5.0.14 </openembedded-core/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :oe_git:`471adaa5f77fa3b974eab60a2ded48e360042828 </openembedded-core/commit/?id=471adaa5f77fa3b974eab60a2ded48e360042828>`
|
||||
- Release Artefact: oecore-471adaa5f77fa3b974eab60a2ded48e360042828
|
||||
- sha: 4dfad047a68aea2293845cdb4a86911bb3b1b0444a63f51b4e5a2448018d6a5e
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/oecore-471adaa5f77fa3b974eab60a2ded48e360042828.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/oecore-471adaa5f77fa3b974eab60a2ded48e360042828.tar.bz2
|
||||
|
||||
meta-yocto
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-yocto`
|
||||
- Branch: :yocto_git:`scarthgap </meta-yocto/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.14 </meta-yocto/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :yocto_git:`bf6aea52c4009e08f26565c33ce432eec7cfb090 </meta-yocto/commit/?id=bf6aea52c4009e08f26565c33ce432eec7cfb090>`
|
||||
- Release Artefact: meta-yocto-bf6aea52c4009e08f26565c33ce432eec7cfb090
|
||||
- sha: 92c9da1027efaf945d80bcd44984d5f8e7606c7ded485b57c0c8f47c9fa1302d
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/meta-yocto-bf6aea52c4009e08f26565c33ce432eec7cfb090.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/meta-yocto-bf6aea52c4009e08f26565c33ce432eec7cfb090.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`scarthgap </meta-mingw/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.14 </meta-mingw/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :yocto_git:`bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f </meta-mingw/commit/?id=bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f>`
|
||||
- Release Artefact: meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f
|
||||
- sha: ab073def6487f237ac125d239b3739bf02415270959546b6b287778664f0ae65
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.8 </bitbake/log/?h=2.8>`
|
||||
- Tag: :oe_git:`yocto-5.0.14 </bitbake/log/?h=yocto-5.0.14>`
|
||||
- Git Revision: :oe_git:`8dcf084522b9c66a6639b5f117f554fde9b6b45a </bitbake/commit/?id=8dcf084522b9c66a6639b5f117f554fde9b6b45a>`
|
||||
- Release Artefact: bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a
|
||||
- sha: 766eda21f2a914276d2723b1d8248be11507f954aef8fc5bb1767f3cb65688dd
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.14/bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.14/bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a.tar.bz2
|
||||
219
documentation/migration-guides/release-notes-5.0.15.rst
Normal file
@@ -0,0 +1,219 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Release notes for Yocto-5.0.15 (Scarthgap)
|
||||
------------------------------------------
|
||||
|
||||
Users of Alma 9, Rocky 9 and Centos Stream 9 rolling releases have seen obtuse failures in the execution of tar in various tasks after recent host distro updates. These newer versions of tar contain a CVE fix which uses a new glibc call/syscall (openat2). The fix is to update to a newer pseudo version which handles this syscall. This is not included in this stable release but we aim to include it in the next one.
|
||||
|
||||
Security Fixes in Yocto-5.0.15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: Fix :cve_nist:`2025-11494`, :cve_nist:`2025-11839` and :cve_nist:`2025-11840`
|
||||
- cmake-native: Fix :cve_nist:`2025-9301`
|
||||
- cups: Fix :cve_nist:`2025-58436` and :cve_nist:`2025-61915`
|
||||
- gnutls: Fix CVE-2025-9820
|
||||
- go: Fix :cve_nist:`2025-61727` and :cve_nist:`2025-61729`
|
||||
- go: Update :cve_nist:`2025-58187` patches
|
||||
- grub: Fix :cve_nist:`2025-54770`, :cve_nist:`2025-61661`, :cve_nist:`2025-61662`,
|
||||
:cve_nist:`2025-61663` and :cve_nist:`2025-61664`
|
||||
- libarchive: Fix :cve_nist:`2025-60753`
|
||||
- libarchive: Fix 2 security issue (https://github.com/libarchive/libarchive/pull/2753 and
|
||||
https://github.com/libarchive/libarchive/pull/2768)
|
||||
- libmicrohttpd: Ignore :cve_nist:`2025-59777` and :cve_nist:`2025-62689`
|
||||
- libpng: Fix :cve_nist:`2025-64505`, :cve_nist:`2025-64506`, :cve_nist:`2025-64720`,
|
||||
:cve_nist:`2025-65018` and :cve_nist:`2025-66293`
|
||||
- libsoup: Fix :cve_nist:`2025-12105`
|
||||
- libssh2: Fix :cve_nist:`2023-48795`
|
||||
- libxml2: Fix :cve_nist:`2025-7425`
|
||||
- libxslt: Fix :cve_nist:`2025-11731`
|
||||
- musl: Fix :cve_nist:`2025-26519`
|
||||
- python3-urllib3: Fix :cve_nist:`2025-66418` and :cve_nist:`2025-66471`
|
||||
- python3: Fix :cve_nist:`2025-6075`
|
||||
- qemu: Fix :cve_nist:`2025-12464`
|
||||
- rsync: Fix :cve_nist:`2025-10158`
|
||||
- ruby: Fix :cve_nist:`2025-24294`, :cve_nist:`2025-25186` and :cve_nist:`2025-61594`
|
||||
- sqlite3: Fix :cve_nist:`2025-7709`
|
||||
- xserver-xorg: Fix :cve_nist:`2025-62229`, :cve_nist:`2025-62230` and :cve_nist:`2025-62231`
|
||||
- xwayland: Fix :cve_nist:`2025-62229`, :cve_nist:`2025-62230` and :cve_nist:`2025-62231`
|
||||
|
||||
|
||||
Fixes and Feature Changes in Yocto-5.0.15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- build-appliance-image: Update to scarthgap head revision
|
||||
- classes/create-spdx-2.2: Define SPDX_VERSION to 2.2
|
||||
- cml1.bbclass: use consistent make flags for menuconfig
|
||||
- cross.bbclass: Propagate dependencies to outhash
|
||||
- curl: Ensure 'CURL_CA_BUNDLE' from host env is indeed respected
|
||||
- curl: Use host CA bundle by default for native(sdk) builds
|
||||
- cve-check: extract extending :term:`CVE_STATUS` to library function
|
||||
- dev-manual/layers.rst: document "bitbake-layers show-machines"
|
||||
- dev-manual/new-recipe.rst: replace 'bitbake -e' with 'bitbake-getvar'
|
||||
- dev-manual/new-recipe.rst: typo, "whith" -> "which"
|
||||
- dev-manual/new-recipe.rst: update "recipetool -h" output
|
||||
- dev-manual/sbom.rst: reflect that create-spdx is enabled by default
|
||||
- dev-manual: debugging: use bitbake-getvar in Viewing Variable Values section
|
||||
- documentation: link to the Releases page on yoctoproject.org instead of wiki
|
||||
- glslang: fix compiling with gcc15
|
||||
- go: add sdk test
|
||||
- go: extend runtime test
|
||||
- go: remove duplicate arch map in sdk test
|
||||
- goarch.bbclass: do not leak :term:`TUNE_FEATURES` into crosssdk task signatures
|
||||
- kernel-dev: add disable config example
|
||||
- kernel-dev: common: migrate bitbake -e to bitbake-getvar
|
||||
- kernel.bbclass: Add task to export kernel configuration to :term:`SPDX`
|
||||
- libssh2: fix regression in KEX method validation (GH-1553)
|
||||
- libssh2: upgrade to 1.11.1
|
||||
- migration-guides: add release notes for 4.0.31 and 5.0.13
|
||||
- oe/sdk: fix empty SDK manifests
|
||||
- oeqa/sdk/buildepoxy: skip test in eSDK
|
||||
- oeqa/selftest: oe-selftest: Add :term:`SPDX` tests for kernel config and :term:`PACKAGECONFIG`
|
||||
- oeqa: drop unnecessary dependency from go runtime tests
|
||||
- oeqa: fix package detection in go sdk tests
|
||||
- overview-manual: migrate to SVG + fix typo
|
||||
- poky.conf: bump version for 5.0.15
|
||||
- ref-manual: variables: migrate the :term:`OVERRIDES` note to bitbake-getvar
|
||||
- ruby: Upgrade to 3.3.10
|
||||
- rust-target-config: fix nativesdk-libstd-rs build with baremetal
|
||||
- scripts/install-buildtools: Update to 5.0.14
|
||||
- spdx30: Provide software_packageUrl field in :term:`SPDX` 3.0 SBOM
|
||||
- spdx30: fix cve status for patch files in VEX
|
||||
- spdx30: provide all CVE_STATUS, not only Patched status
|
||||
- spdx30_tasks: Add support for exporting :term:`PACKAGECONFIG` to :term:`SPDX`
|
||||
- spdx: Revert "spdx: Update for bitbake changes"
|
||||
- spdx: extend :term:`CVE_STATUS` variables
|
||||
- testsdk: allow user to specify which tests to run
|
||||
- vex.bbclass: add a new class
|
||||
- vex: fix rootfs manifest
|
||||
- xserver-xorg: remove redundant patch
|
||||
|
||||
|
||||
Known Issues in Yocto-5.0.15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
Contributors to Yocto-5.0.15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
|
||||
- Adarsh Jagadish Kamini
|
||||
- Aleksandar Nikolic
|
||||
- Alexander Kanavin
|
||||
- Benjamin Robin (Schneider Electric)
|
||||
- Changqing Li
|
||||
- Daniel Turull
|
||||
- Deepak Rathore
|
||||
- Deepesh Varatharajan
|
||||
- Enrico Jörns
|
||||
- Gyorgy Sarvari
|
||||
- Hitendra Prajapati
|
||||
- Hongxu Jia
|
||||
- Hugo SIMELIERE
|
||||
- Jiaying Song
|
||||
- Kai Kang
|
||||
- Kamel Bouhara (Schneider Electric)
|
||||
- Lee Chee Yang
|
||||
- Martin Jansa
|
||||
- Mingli Yu
|
||||
- Moritz Haase
|
||||
- Osama Abdelkader
|
||||
- Ovidiu Panait
|
||||
- Peter Marko
|
||||
- Praveen Kumar
|
||||
- Quentin Schulz
|
||||
- Robert P. J. Day
|
||||
- Ross Burton
|
||||
- Steve Sakoman
|
||||
- Vijay Anusuri
|
||||
- Walter Werner SCHNEIDER
|
||||
- Yash Shinde
|
||||
- Yogita Urade
|
||||
|
||||
Repositories / Downloads for Yocto-5.0.15
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`scarthgap </yocto-docs/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.15 </yocto-docs/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :yocto_git:`b0f5cc276639916df197435780b3e94accd4af41 </yocto-docs/commit/?id=b0f5cc276639916df197435780b3e94accd4af41>`
|
||||
- Release Artefact: yocto-docs-b0f5cc276639916df197435780b3e94accd4af41
|
||||
- sha: 28ebedfa6471e4ed7583aca0925cd31f4429af3d27ffc0a7e250f7b75404edd7
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/yocto-docs-b0f5cc276639916df197435780b3e94accd4af41.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/yocto-docs-b0f5cc276639916df197435780b3e94accd4af41.tar.bz2
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`scarthgap </poky/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.15 </poky/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :yocto_git:`72983ac391008ebceb45edc7a8f0f6d5f4fe715c </poky/commit/?id=72983ac391008ebceb45edc7a8f0f6d5f4fe715c>`
|
||||
- Release Artefact: poky-72983ac391008ebceb45edc7a8f0f6d5f4fe715c
|
||||
- sha: d5336d1ef1dd48b88cb92748c669360901004d458b7786ddc1918da12fef4edd
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/poky-72983ac391008ebceb45edc7a8f0f6d5f4fe715c.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/poky-72983ac391008ebceb45edc7a8f0f6d5f4fe715c.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`scarthgap </openembedded-core/log/?h=scarthgap>`
|
||||
- Tag: :oe_git:`yocto-5.0.15 </openembedded-core/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :oe_git:`6988157ad983978ffd6b12bcefedd4deaffdbbd1 </openembedded-core/commit/?id=6988157ad983978ffd6b12bcefedd4deaffdbbd1>`
|
||||
- Release Artefact: oecore-6988157ad983978ffd6b12bcefedd4deaffdbbd1
|
||||
- sha: 98a691ce87f9aba57007e91b56bbe0af6d6c8f62aacb68820026478ff8e1f819
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/oecore-6988157ad983978ffd6b12bcefedd4deaffdbbd1.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/oecore-6988157ad983978ffd6b12bcefedd4deaffdbbd1.tar.bz2
|
||||
|
||||
meta-yocto
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-yocto`
|
||||
- Branch: :yocto_git:`scarthgap </meta-yocto/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.15 </meta-yocto/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :yocto_git:`9bb6e6e8b016a0c9dfe290369a6ed91ef4020535 </meta-yocto/commit/?id=9bb6e6e8b016a0c9dfe290369a6ed91ef4020535>`
|
||||
- Release Artefact: meta-yocto-9bb6e6e8b016a0c9dfe290369a6ed91ef4020535
|
||||
- sha: 01778c43673ef11ec5d0fb76bd7c600031f5fc9bcfd9bfa586d5fb6b6babff95
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/meta-yocto-9bb6e6e8b016a0c9dfe290369a6ed91ef4020535.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/meta-yocto-9bb6e6e8b016a0c9dfe290369a6ed91ef4020535.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`scarthgap </meta-mingw/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.15 </meta-mingw/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :yocto_git:`bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f </meta-mingw/commit/?id=bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f>`
|
||||
- Release Artefact: meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f
|
||||
- sha: ab073def6487f237ac125d239b3739bf02415270959546b6b287778664f0ae65
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.8 </bitbake/log/?h=2.8>`
|
||||
- Tag: :oe_git:`yocto-5.0.15 </bitbake/log/?h=yocto-5.0.15>`
|
||||
- Git Revision: :oe_git:`8dcf084522b9c66a6639b5f117f554fde9b6b45a </bitbake/commit/?id=8dcf084522b9c66a6639b5f117f554fde9b6b45a>`
|
||||
- Release Artefact: bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a
|
||||
- sha: 766eda21f2a914276d2723b1d8248be11507f954aef8fc5bb1767f3cb65688dd
|
||||
- Download Locations:
|
||||
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.15/bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a.tar.bz2
|
||||
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.15/bitbake-8dcf084522b9c66a6639b5f117f554fde9b6b45a.tar.bz2
|
||||
@@ -162,7 +162,7 @@ The following diagram represents the high-level workflow of a build. The
|
||||
remainder of this section expands on the fundamental input, output,
|
||||
process, and metadata logical blocks that make up the workflow.
|
||||
|
||||
.. image:: figures/YP-flow-diagram.png
|
||||
.. image:: svg/yp-flow-diagram.*
|
||||
:width: 100%
|
||||
|
||||
In general, the build's workflow consists of several functional areas:
|
||||
|
||||
|
Before Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 20 KiB |
172
documentation/overview-manual/svg/key-dev-elements.svg
Normal file
@@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="164.765mm"
|
||||
height="72.988113mm"
|
||||
viewBox="0 0 164.765 72.988114"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
sodipodi:docname="key-dev-elements.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="341.5"
|
||||
inkscape:cy="-31.5"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1440"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer2"
|
||||
showborder="false"
|
||||
borderlayer="false"
|
||||
inkscape:antialias-rendering="true"
|
||||
showguides="true" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Layer "
|
||||
style="display:inline"
|
||||
transform="translate(-20.664242,-129.6793)"><rect
|
||||
style="display:inline;fill:#f1e9cc;fill-opacity:1;stroke:#6d8eb4;stroke-width:0.653;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
id="rect1"
|
||||
width="164.112"
|
||||
height="54.273098"
|
||||
x="20.990742"
|
||||
y="130.0058"
|
||||
ry="0"
|
||||
inkscape:label="yp-rect" /><rect
|
||||
style="display:inline;fill:#f3d770;fill-opacity:1;stroke:#6d8eb4;stroke-width:0.653;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
id="rect2"
|
||||
width="101.45864"
|
||||
height="41.151588"
|
||||
x="28.1292"
|
||||
y="137.10953"
|
||||
inkscape:label="poky-rect" /><rect
|
||||
style="display:inline;fill:#c0ebf5;fill-opacity:1;stroke:#6d8eb4;stroke-width:0.653;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
id="rect3"
|
||||
width="50.652737"
|
||||
height="53.04562"
|
||||
x="35.516178"
|
||||
y="149.29529"
|
||||
inkscape:label="oe-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:46.7487;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="text3"
|
||||
inkscape:label="poky-title"
|
||||
transform="matrix(0.90889596,0,0,0.81399719,-26.072941,39.399474)"><tspan
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="tspan2">Poky</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:46.7487;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="text3-8"
|
||||
inkscape:label="oe-title"
|
||||
transform="matrix(0.90889596,0,0,0.81399719,-78.327995,83.175189)"><tspan
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="tspan4">OpenEmbedded</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;white-space:pre;inline-size:46.7487;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="text3-0"
|
||||
inkscape:label="yp-title"
|
||||
transform="matrix(0.8469291,0,0,0.81399719,21.497595,28.033837)"><tspan
|
||||
x="136.38763"
|
||||
y="137.69727"
|
||||
id="tspan5">YOCTO PROJECT (YP)</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="137.19444"
|
||||
y="150.50006"
|
||||
id="text4"
|
||||
transform="scale(1.0050579,0.9949676)"
|
||||
inkscape:label="yp-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="137.19444"
|
||||
y="150.50006">Umbrella Open Source Project</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="137.19444"
|
||||
y="154.2294"
|
||||
id="tspan6">that Builds and Maintains</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="137.19444"
|
||||
y="157.95874"
|
||||
id="tspan7">Validated Open Source Tools and</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="137.19444"
|
||||
y="161.68808"
|
||||
id="tspan8">Components Associated with</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.98347px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="137.19444"
|
||||
y="165.4174"
|
||||
id="tspan9">Embedded Linux</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.97078px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="90.582634"
|
||||
y="159.10139"
|
||||
id="text10"
|
||||
transform="scale(1.0018079,0.9981954)"
|
||||
inkscape:label="poky-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.97078px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="90.582634"
|
||||
y="159.10139">Yocto Project Open</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.97078px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="90.582634"
|
||||
y="162.81487"
|
||||
id="tspan11">Source Reference</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.97078px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="90.582634"
|
||||
y="166.52835"
|
||||
id="tspan12">Embedded Distribution</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.01677px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:7.4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
|
||||
x="40.36692"
|
||||
y="160.98824"
|
||||
id="text13"
|
||||
transform="scale(0.99784993,1.0021547)"
|
||||
inkscape:label="oe-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan13"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.01677px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="40.36692"
|
||||
y="160.98824">Open Source Build Engine</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.01677px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="40.36692"
|
||||
y="164.7592"
|
||||
id="tspan14">and YP-Compatible Metadata</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.01677px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0"
|
||||
x="40.36692"
|
||||
y="168.53017"
|
||||
id="tspan15">for Embedded Linux</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
950
documentation/overview-manual/svg/yp-flow-diagram.svg
Normal file
@@ -0,0 +1,950 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="760.50098"
|
||||
height="352.582"
|
||||
viewBox="0 0 760.50095 352.582"
|
||||
enable-background="new 0 0 758.189 424.276"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="yp-flow-diagram.svg"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs86">
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview86"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="296.80807"
|
||||
inkscape:cy="212.83914"
|
||||
inkscape:window-width="1906"
|
||||
inkscape:window-height="934"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" />
|
||||
<g
|
||||
id="g17"
|
||||
transform="matrix(1,0,0,1.0035497,-2.0824824,-11.037238)"><rect
|
||||
style="opacity:1;fill:#00b6de;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11"
|
||||
width="484.25"
|
||||
height="249"
|
||||
x="90"
|
||||
y="112.5" /><rect
|
||||
style="fill:#00b6de;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-8"
|
||||
width="12"
|
||||
height="12"
|
||||
x="507.56818"
|
||||
y="-301.10004"
|
||||
ry="0"
|
||||
transform="rotate(44.313856)" /><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-8-1"
|
||||
width="12"
|
||||
height="12"
|
||||
x="361.46231"
|
||||
y="-89.463524"
|
||||
ry="0"
|
||||
transform="rotate(44.313856)" /><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-8-1-1"
|
||||
width="12"
|
||||
height="12"
|
||||
x="389.40585"
|
||||
y="-60.842598"
|
||||
ry="0"
|
||||
transform="rotate(44.313856)" /><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-8-1-1-0"
|
||||
width="12"
|
||||
height="12"
|
||||
x="416.47607"
|
||||
y="-33.116081"
|
||||
ry="0"
|
||||
transform="rotate(44.313856)" /></g><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-9"
|
||||
width="87"
|
||||
height="216"
|
||||
x="193.91776"
|
||||
y="119.24599" /><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-8-1-4"
|
||||
width="12"
|
||||
height="12"
|
||||
x="487.27533"
|
||||
y="-296.15897"
|
||||
ry="0"
|
||||
transform="rotate(44.313856)" /><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-9-3"
|
||||
width="85.75"
|
||||
height="219.75"
|
||||
x="470.16751"
|
||||
y="119.49599" /><g
|
||||
id="g2"
|
||||
transform="translate(2.3119996,-71.694)">
|
||||
<g
|
||||
id="g1">
|
||||
<polygon
|
||||
fill="#00b6de"
|
||||
points="703.77,340.194 712.852,349.277 721.934,340.194 758.189,340.194 758.189,256.861 723.582,256.861 713.171,267.274 702.758,256.861 628.582,256.861 618.171,267.274 607.758,256.861 561.523,256.861 561.523,340.194 609.104,340.194 618.186,349.277 627.268,340.194 "
|
||||
id="polygon1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g4"
|
||||
transform="translate(2.3119996,-71.694)">
|
||||
<g
|
||||
id="g3">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="712.837,278.274 707.221,272.658 676.557,272.658 676.557,333.657 706.983,333.657 713.055,339.729 719.128,333.657 751.557,333.657 751.557,272.658 718.452,272.658 "
|
||||
id="polygon2" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g6"
|
||||
transform="translate(2.3119996,-71.694)">
|
||||
<g
|
||||
id="g5">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="618.171,278.274 611.555,271.658 581.558,271.658 581.558,332.657 611.983,332.657 618.056,338.729 624.128,332.657 656.558,332.657 656.558,271.658 624.786,271.658 "
|
||||
id="polygon4" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g8"
|
||||
transform="translate(2.3119996,-71.694)"
|
||||
style="fill:#000080">
|
||||
<g
|
||||
id="g7"
|
||||
style="fill:#000080">
|
||||
<polygon
|
||||
fill="#ed1849"
|
||||
points="722.166,349.277 712.504,358.941 702.84,349.277 670.523,349.277 670.523,424.276 757.523,424.276 757.523,349.277 "
|
||||
id="polygon6"
|
||||
style="fill:#000080" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g10"
|
||||
transform="translate(2.3119996,-71.694)"
|
||||
style="fill:#000080">
|
||||
<g
|
||||
id="g9"
|
||||
style="fill:#000080">
|
||||
<polygon
|
||||
fill="#ed1849"
|
||||
points="628.371,348.611 618.043,358.941 607.713,348.611 575.523,348.611 575.523,423.61 662.523,423.61 662.523,348.611 "
|
||||
id="polygon8"
|
||||
style="fill:#000080" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g
|
||||
id="g14"
|
||||
transform="translate(2.3119996,-71.694)">
|
||||
<g
|
||||
id="g13">
|
||||
<polygon
|
||||
fill="#c1d82f"
|
||||
points="575.428,217.35 575.428,250.526 610.09,250.526 618.171,258.607 626.251,250.526 705.09,250.526 713.171,258.607 721.251,250.526 757.427,250.526 757.427,173.527 575.428,173.527 575.428,199.703 584.252,208.525 "
|
||||
id="polygon12" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g
|
||||
id="g26"
|
||||
transform="translate(0.4155534,-73.944)">
|
||||
<g
|
||||
id="g25">
|
||||
<polygon
|
||||
fill="#4a4a30"
|
||||
points="177.974,133.944 125.111,133.944 118.043,141.013 110.974,133.944 86.834,133.944 86.834,166.944 178.263,166.944 184.834,173.514 191.403,166.944 281.833,166.944 281.833,133.944 258.611,133.944 251.543,141.013 244.474,133.944 192.111,133.944 185.043,141.013 "
|
||||
id="polygon24" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g28"
|
||||
transform="matrix(0.93986241,0,0,1,-22.331287,-17.694)">
|
||||
<g
|
||||
id="g27">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="330.188,290.202 330.188,296.444 511.188,296.444 511.188,289.015 517.259,282.942 511.188,276.87 511.188,268.444 330.188,268.444 330.188,277.683 336.447,283.942 "
|
||||
id="polygon26" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g30"
|
||||
transform="matrix(0.93986241,0,0,1,-22.331287,-17.694)">
|
||||
<g
|
||||
id="g29">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="330.188,251.536 330.188,257.944 511.188,257.944 511.188,250.515 517.259,244.442 511.188,238.37 511.188,229.944 330.188,229.944 330.188,239.016 336.447,245.276 "
|
||||
id="polygon28" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g32"
|
||||
transform="matrix(0.93986241,0,0,1,-22.331287,-17.694)">
|
||||
<g
|
||||
id="g31">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="330.188,211.18 330.188,218.444 511.188,218.444 511.188,211.015 517.259,204.942 511.188,198.87 511.188,190.444 330.188,190.444 330.188,199.372 336.092,205.276 "
|
||||
id="polygon30" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g34"
|
||||
transform="translate(-40.188,-71.694)">
|
||||
<g
|
||||
id="g33">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="144.188,342.944 144.188,406.944 225.188,406.944 225.188,381.515 231.259,375.442 225.188,369.37 225.188,342.944 190.445,342.944 184.043,349.348 177.639,342.944 "
|
||||
id="polygon32" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g36"
|
||||
transform="translate(-40.188,-71.694)">
|
||||
<g
|
||||
id="g35">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="177.618,330.944 184.188,337.514 190.757,330.944 225.188,330.944 225.188,266.944 190.778,266.944 183.71,274.014 176.64,266.944 144.188,266.944 144.188,330.944 "
|
||||
id="polygon34" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g38"
|
||||
transform="translate(-40.188,-71.694)">
|
||||
<g
|
||||
id="g37">
|
||||
<polygon
|
||||
fill="#e6e6e6"
|
||||
points="177.118,254.944 183.688,261.514 190.257,254.944 224.688,254.944 224.688,190.944 191.445,190.944 184.376,198.014 177.306,190.944 143.688,190.944 143.688,254.944 "
|
||||
id="polygon36" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g40"
|
||||
transform="matrix(1,0,0,0.86327911,0.062,-77.645148)">
|
||||
<g
|
||||
id="g39">
|
||||
<polygon
|
||||
fill="#4a4a30"
|
||||
points="81.188,221.611 0.188,221.611 0.188,285.61 81.188,285.61 81.188,260.181 87.259,254.109 81.188,248.037 "
|
||||
id="polygon38" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g40-0"
|
||||
transform="matrix(1,0,0,0.86327911,0.312,-18.368819)">
|
||||
<g
|
||||
id="g39-6">
|
||||
<polygon
|
||||
fill="#4a4a30"
|
||||
points="87.259,254.109 81.188,248.037 81.188,221.611 0.188,221.611 0.188,285.61 81.188,285.61 81.188,260.181 "
|
||||
id="polygon38-4" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g40-0-2"
|
||||
transform="matrix(1,0,0,0.86327911,0.062,40.907511)">
|
||||
<g
|
||||
id="g39-6-5">
|
||||
<polygon
|
||||
fill="#4a4a30"
|
||||
points="87.259,254.109 81.188,248.037 81.188,221.611 0.188,221.611 0.188,285.61 81.188,285.61 81.188,260.181 "
|
||||
id="polygon38-4-8" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g40-0-28"
|
||||
transform="matrix(1,0,0,0.86327911,-0.188,100.18384)">
|
||||
<g
|
||||
id="g39-6-4">
|
||||
<polygon
|
||||
fill="#4a4a30"
|
||||
points="81.188,285.61 81.188,260.181 87.259,254.109 81.188,248.037 81.188,221.611 0.188,221.611 0.188,285.61 "
|
||||
id="polygon38-4-7" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g42"
|
||||
transform="translate(0.062,-71.944)"
|
||||
style="fill:#ff7f2a">
|
||||
<g
|
||||
id="g41"
|
||||
style="fill:#ff7f2a">
|
||||
<polygon
|
||||
fill="#7e8082"
|
||||
points="178.618,123.944 185.188,130.514 191.757,123.944 215.188,123.944 215.188,71.944 154.188,71.944 154.188,123.944 "
|
||||
id="polygon40"
|
||||
style="fill:#ff7f2a" />
|
||||
</g>
|
||||
</g>
|
||||
<rect
|
||||
x="126.062"
|
||||
y="75.334"
|
||||
fill="none"
|
||||
width="116.666"
|
||||
height="21.333"
|
||||
id="rect42" />
|
||||
<text
|
||||
fill="#ffffff"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text42"
|
||||
x="139.47949"
|
||||
y="82.440079"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Source Materials</text>
|
||||
<rect
|
||||
x="155.41699"
|
||||
y="10.834001"
|
||||
fill="none"
|
||||
width="58.666"
|
||||
height="40.667"
|
||||
id="rect43" />
|
||||
<text
|
||||
id="text44"
|
||||
x="190.00726"
|
||||
y="29.10741"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:49.6985"
|
||||
transform="translate(-5.5244746,-7.8775879)"
|
||||
xml:space="preserve"><tspan
|
||||
x="190.00726"
|
||||
y="29.10741"
|
||||
id="tspan1">Local<tspan
|
||||
y="29.10741"
|
||||
id="tspan2"> </tspan></tspan><tspan
|
||||
x="190.00726"
|
||||
y="42.440787"
|
||||
id="tspan3">Projects</tspan></text>
|
||||
<g
|
||||
id="g45"
|
||||
transform="translate(0.062,-71.944)"
|
||||
style="fill:#ff7f2a">
|
||||
<g
|
||||
id="g44"
|
||||
style="fill:#ff7f2a">
|
||||
<polygon
|
||||
fill="#7e8082"
|
||||
points="245.118,123.944 251.688,130.514 258.257,123.944 281.688,123.944 281.688,71.944 220.688,71.944 220.688,123.944 "
|
||||
id="polygon44"
|
||||
style="fill:#ff7f2a" />
|
||||
</g>
|
||||
</g>
|
||||
<rect
|
||||
x="221.91699"
|
||||
y="7.8340006"
|
||||
fill="none"
|
||||
width="58.666"
|
||||
height="40.667"
|
||||
id="rect45" />
|
||||
<text
|
||||
id="text47"
|
||||
x="258.17291"
|
||||
y="26.10741"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:56.5275;fill:#000000"
|
||||
transform="translate(-6.4360358,-3.6326896)"
|
||||
xml:space="preserve"><tspan
|
||||
x="258.17291"
|
||||
y="26.10741"
|
||||
id="tspan4">SCMs<tspan
|
||||
y="26.10741"
|
||||
id="tspan5"> </tspan></tspan><tspan
|
||||
x="258.17291"
|
||||
y="39.440787"
|
||||
id="tspan6">(optional)</tspan></text>
|
||||
<g
|
||||
id="g48"
|
||||
transform="translate(0.062,-71.944)"
|
||||
style="fill:#ff7f2a">
|
||||
<g
|
||||
id="g47"
|
||||
style="fill:#ff7f2a">
|
||||
<polygon
|
||||
fill="#7e8082"
|
||||
points="111.618,123.944 118.188,130.514 124.757,123.944 148.188,123.944 148.188,71.944 87.188,71.944 87.188,123.944 "
|
||||
id="polygon47"
|
||||
style="fill:#ff7f2a" />
|
||||
</g>
|
||||
</g>
|
||||
<rect
|
||||
x="88.417007"
|
||||
y="10.834001"
|
||||
fill="none"
|
||||
width="58.666"
|
||||
height="40.667"
|
||||
id="rect48" />
|
||||
<text
|
||||
id="text49"
|
||||
x="125.51399"
|
||||
y="29.10741"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:64.823"
|
||||
transform="translate(-8.2169997,-13.75401)"
|
||||
xml:space="preserve"><tspan
|
||||
x="125.51399"
|
||||
y="29.10741"
|
||||
id="tspan7">Upstream<tspan
|
||||
y="29.10741"
|
||||
id="tspan8"> </tspan></tspan><tspan
|
||||
x="125.51399"
|
||||
y="42.440787"
|
||||
id="tspan9">Project<tspan
|
||||
y="42.440787"
|
||||
id="tspan10"> </tspan></tspan><tspan
|
||||
x="125.51399"
|
||||
y="55.774165"
|
||||
id="tspan11">Releases</tspan></text>
|
||||
<rect
|
||||
x="115.167"
|
||||
y="137.084"
|
||||
fill="none"
|
||||
width="58.666"
|
||||
height="40.667"
|
||||
id="rect49" />
|
||||
<text
|
||||
id="text51"
|
||||
x="128.34723"
|
||||
y="147.37112"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"><tspan
|
||||
x="128.34723"
|
||||
y="147.37112"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan50"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Source </tspan><tspan
|
||||
x="123.54125"
|
||||
y="161.77113"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan51"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Fetching</tspan></text>
|
||||
<rect
|
||||
x="115.167"
|
||||
y="215.08401"
|
||||
fill="none"
|
||||
width="58.666"
|
||||
height="40.666"
|
||||
id="rect51" />
|
||||
<text
|
||||
id="text53"
|
||||
x="131.82678"
|
||||
y="224.31099"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"><tspan
|
||||
x="131.82678"
|
||||
y="224.31099"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan52"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Patch </tspan><tspan
|
||||
x="117.00081"
|
||||
y="238.70999"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan53"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Application</tspan></text>
|
||||
<rect
|
||||
x="107.167"
|
||||
y="279.08401"
|
||||
fill="none"
|
||||
width="74.166"
|
||||
height="69.237"
|
||||
id="rect53" />
|
||||
<text
|
||||
id="text57"
|
||||
x="149.00055"
|
||||
y="297.35791"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:74.8743"
|
||||
transform="translate(-3.496696,4.953096)"
|
||||
xml:space="preserve"><tspan
|
||||
x="149.00055"
|
||||
y="297.35791"
|
||||
id="tspan12">Configuration /<tspan
|
||||
y="297.35791"
|
||||
id="tspan13"> </tspan></tspan><tspan
|
||||
x="149.00055"
|
||||
y="310.69127"
|
||||
id="tspan14">Compile</tspan></text>
|
||||
<rect
|
||||
x="201.16699"
|
||||
y="184.084"
|
||||
fill="none"
|
||||
width="74.166"
|
||||
height="89.237"
|
||||
id="rect57" />
|
||||
<text
|
||||
id="text63"
|
||||
x="221.86859"
|
||||
y="192.60429"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"><tspan
|
||||
x="221.86859"
|
||||
y="192.60429"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan58"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Output </tspan><tspan
|
||||
x="211.42859"
|
||||
y="207.0043"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan59"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Analysis for </tspan><tspan
|
||||
x="218.94058"
|
||||
y="221.4043"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan60"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">package </tspan><tspan
|
||||
x="207.54759"
|
||||
y="235.80429"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan61"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">splitting plus </tspan><tspan
|
||||
x="218.94058"
|
||||
y="250.2043"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan62"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">package </tspan><tspan
|
||||
x="207.81059"
|
||||
y="264.60431"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan63"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">relationships</tspan></text><text
|
||||
id="text63-1"
|
||||
x="555.48315"
|
||||
y="202.90402"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:31.0495"
|
||||
transform="translate(-42.334211,23.629617)"
|
||||
xml:space="preserve"><tspan
|
||||
x="555.48315"
|
||||
y="202.90402"
|
||||
id="tspan15">QA<tspan
|
||||
y="202.90402"
|
||||
id="tspan16"> </tspan></tspan><tspan
|
||||
x="555.48315"
|
||||
y="216.2374"
|
||||
id="tspan18">Tests</tspan></text>
|
||||
<rect
|
||||
x="319.146"
|
||||
y="127.084"
|
||||
fill="none"
|
||||
width="116.666"
|
||||
height="21.333"
|
||||
id="rect63" />
|
||||
<text
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text64"
|
||||
x="335.19238"
|
||||
y="189.60429"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">.rpm generation</text>
|
||||
<rect
|
||||
x="319.146"
|
||||
y="166.584"
|
||||
fill="none"
|
||||
width="116.666"
|
||||
height="21.333"
|
||||
id="rect64" />
|
||||
<text
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text65"
|
||||
x="335.76849"
|
||||
y="229.10429"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">.deb generation</text>
|
||||
<rect
|
||||
x="319.146"
|
||||
y="205.08401"
|
||||
fill="none"
|
||||
width="116.666"
|
||||
height="21.333"
|
||||
id="rect65" />
|
||||
<text
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text66"
|
||||
x="337.9404"
|
||||
y="267.60391"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">.ipk generation</text>
|
||||
<rect
|
||||
x="296.16699"
|
||||
y="307.08401"
|
||||
fill="none"
|
||||
width="77.166"
|
||||
height="30.237"
|
||||
id="rect66" />
|
||||
|
||||
<rect
|
||||
x="299.66699"
|
||||
y="261.08401"
|
||||
fill="none"
|
||||
width="71.853996"
|
||||
height="33.664001"
|
||||
id="rect67" />
|
||||
|
||||
<rect
|
||||
x="395.97998"
|
||||
y="261.08401"
|
||||
fill="none"
|
||||
width="71.853996"
|
||||
height="33.664001"
|
||||
id="rect69" />
|
||||
|
||||
<rect
|
||||
x="390.66699"
|
||||
y="307.08401"
|
||||
fill="none"
|
||||
width="77.166"
|
||||
height="30.237"
|
||||
id="rect71" />
|
||||
|
||||
<rect
|
||||
y="133"
|
||||
fill="none"
|
||||
width="81.666"
|
||||
height="39.334"
|
||||
id="rect73"
|
||||
x="0.061999973" />
|
||||
<text
|
||||
id="text75"
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:66.7773"
|
||||
transform="translate(-23.458902,-49.50401)"
|
||||
xml:space="preserve"><tspan
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
id="tspan20"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan19">User</tspan>
|
||||
</tspan><tspan
|
||||
x="64.610138"
|
||||
y="200.27922"
|
||||
id="tspan22"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan21">Configuration</tspan></tspan></text><text
|
||||
id="text75-4"
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:66.7773"
|
||||
transform="translate(-24.603766,70.32617)"
|
||||
xml:space="preserve"><tspan
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
id="tspan24"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan23">Machine BSP</tspan>
|
||||
</tspan><tspan
|
||||
x="64.610138"
|
||||
y="200.27922"
|
||||
id="tspan26"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan25">Configuration</tspan></tspan></text><text
|
||||
id="text75-4-6"
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:66.7773"
|
||||
transform="translate(-25.353766,128.82617)"
|
||||
xml:space="preserve"><tspan
|
||||
x="64.610138"
|
||||
y="186.94585"
|
||||
id="tspan28"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan27">Policy</tspan>
|
||||
</tspan><tspan
|
||||
x="64.610138"
|
||||
y="200.27922"
|
||||
id="tspan30"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan29">Configuration</tspan></tspan></text>
|
||||
|
||||
<rect
|
||||
y="211.16798"
|
||||
fill="none"
|
||||
width="81.666"
|
||||
height="39.333"
|
||||
id="rect76"
|
||||
x="0.061999973" />
|
||||
<text
|
||||
id="text78"
|
||||
x="70.02713"
|
||||
y="265.4418"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:89.4625"
|
||||
transform="translate(-28.848315,-69.549143)"
|
||||
xml:space="preserve"><tspan
|
||||
x="70.02713"
|
||||
y="265.4418"
|
||||
id="tspan32"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan31">Metadata
|
||||
</tspan></tspan><tspan
|
||||
x="70.02713"
|
||||
y="278.77516"
|
||||
id="tspan34"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan33">(.bb + patches)</tspan></tspan></text>
|
||||
<rect
|
||||
x="612.83502"
|
||||
y="131.418"
|
||||
fill="none"
|
||||
width="112.186"
|
||||
height="20.163"
|
||||
id="rect78" />
|
||||
<text
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text79"
|
||||
x="629.87451"
|
||||
y="142.68779"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Package Feeds</text>
|
||||
<rect
|
||||
x="579.98102"
|
||||
y="306.25101"
|
||||
fill="none"
|
||||
width="81.666"
|
||||
height="39.332001"
|
||||
id="rect79" />
|
||||
<text
|
||||
fill="#ffffff"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text80"
|
||||
x="604.24854"
|
||||
y="319.7699"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Images</text>
|
||||
<rect
|
||||
x="584.14703"
|
||||
y="216.08499"
|
||||
fill="none"
|
||||
width="71.853996"
|
||||
height="33.664001"
|
||||
id="rect80" />
|
||||
<text
|
||||
id="text81"
|
||||
x="606.88434"
|
||||
y="227.1058"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"><tspan
|
||||
x="606.88434"
|
||||
y="227.1058"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan80"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Image </tspan><tspan
|
||||
x="594.48834"
|
||||
y="241.50479"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan81"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Generation</tspan></text>
|
||||
<rect
|
||||
x="678.83301"
|
||||
y="215.08499"
|
||||
fill="none"
|
||||
width="77.166"
|
||||
height="30.237"
|
||||
id="rect81" />
|
||||
<text
|
||||
id="text83"
|
||||
x="708.21045"
|
||||
y="228.6058"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"><tspan
|
||||
x="708.21045"
|
||||
y="228.6058"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan82"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">SDK </tspan><tspan
|
||||
x="690.33142"
|
||||
y="243.00479"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="tspan83"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">Generation</tspan></text>
|
||||
<rect
|
||||
x="379.06299"
|
||||
y="86.834"
|
||||
fill="none"
|
||||
width="199.03999"
|
||||
height="21.164"
|
||||
id="rect83" />
|
||||
<text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84"
|
||||
x="426.28253"
|
||||
y="26.005543"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333">OpenEmbedded Architecture Workflow</text><g
|
||||
id="g18"
|
||||
transform="translate(-10.254525,-9.75401)"><rect
|
||||
style="fill:#00b6de;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17">Build System</tspan></text></g><g
|
||||
id="g18-4"
|
||||
transform="translate(-10.254525,-25.970712)"><rect
|
||||
style="fill:#4a4a30;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5-8"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6-0"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17-4">Metadata/Inputs</tspan></text></g><g
|
||||
id="g18-4-9"
|
||||
transform="translate(-10.254525,-42.187414)"><rect
|
||||
style="fill:#ff7f2a;fill-opacity:1;stroke:#ff631a;stroke-width:0.49911493;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5-8-6"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6-0-1"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17-4-0">Upstream Source</tspan></text></g><g
|
||||
id="g18-4-9-2"
|
||||
transform="translate(101.50803,-40.934366)"><rect
|
||||
style="fill:#c1d82f;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5-8-6-2"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6-0-1-2"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17-4-0-0">Output Packages</tspan></text></g><g
|
||||
id="g18-4-9-2-5"
|
||||
transform="translate(101.50803,-24.709046)"><rect
|
||||
style="fill:#e6e6e6;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5-8-6-2-2"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6-0-1-2-9"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17-4-0-0-0">Process steps (tasks)</tspan></text></g><g
|
||||
id="g18-4-9-2-5-8"
|
||||
transform="translate(101.50803,-8.4837252)"><rect
|
||||
style="fill:#000080;fill-opacity:1;stroke:#ff631a;stroke-width:0;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-dasharray:none"
|
||||
id="rect11-5-8-6-2-2-3"
|
||||
width="10"
|
||||
height="9.9646282"
|
||||
x="442.00568"
|
||||
y="76.711205"
|
||||
transform="matrix(1,0,0,1.0035497,0,-1.2832284)" /><text
|
||||
fill="#333333"
|
||||
font-family="MyriadPro-Regular"
|
||||
font-size="12px"
|
||||
id="text84-6-0-1-2-9-8"
|
||||
x="456.48013"
|
||||
y="84.126945"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#333333"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
|
||||
id="tspan17-4-0-0-0-0">Output Imaga Data</tspan></text></g>
|
||||
|
||||
|
||||
<rect
|
||||
x="675.64801"
|
||||
y="304.91699"
|
||||
fill="none"
|
||||
width="81.666"
|
||||
height="39.332001"
|
||||
id="rect85" />
|
||||
<text
|
||||
id="text86"
|
||||
x="720.58508"
|
||||
y="322.93991"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.6667px;font-family:'Nimbus Sans L';-inkscape-font-specification:'Nimbus Sans L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;white-space:pre;inline-size:65.518"
|
||||
transform="translate(-2.5824824,-12.25401)"
|
||||
xml:space="preserve"><tspan
|
||||
x="720.58508"
|
||||
y="322.93991"
|
||||
id="tspan36"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan35">Application</tspan><tspan
|
||||
y="322.93991"
|
||||
id="tspan37"> </tspan></tspan><tspan
|
||||
x="720.58508"
|
||||
y="336.27327"
|
||||
id="tspan39"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan38">Development</tspan><tspan
|
||||
y="336.27327"
|
||||
id="tspan40"> </tspan></tspan><tspan
|
||||
x="720.58508"
|
||||
y="349.60665"
|
||||
id="tspan42"><tspan
|
||||
style="fill:#ffffff"
|
||||
id="tspan41">SDK</tspan></tspan></text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 38 KiB |
@@ -23,7 +23,7 @@ comes to delivering embedded software stacks. The project allows
|
||||
software customizations and build interchange for multiple hardware
|
||||
platforms as well as software stacks that can be maintained and scaled.
|
||||
|
||||
.. image:: figures/key-dev-elements.png
|
||||
.. image:: svg/key-dev-elements.*
|
||||
:width: 100%
|
||||
|
||||
For further introductory information on the Yocto Project, you might be
|
||||
@@ -44,7 +44,7 @@ Here are features and advantages of the Yocto Project:
|
||||
system, software, and service vendors adopt and support the Yocto
|
||||
Project in their products and services. For a look at the Yocto
|
||||
Project community and the companies involved with the Yocto Project,
|
||||
see the "COMMUNITY" and "ECOSYSTEM" tabs on the
|
||||
see the "COMMUNITY" and "ABOUT" tabs on the
|
||||
:yocto_home:`Yocto Project <>` home page.
|
||||
|
||||
- *Architecture Agnostic:* Yocto Project supports Intel, ARM, MIPS,
|
||||
@@ -60,10 +60,9 @@ Here are features and advantages of the Yocto Project:
|
||||
move between architectures without moving to new development
|
||||
environments. Additionally, if you have used the Yocto Project to
|
||||
create an image or application and you find yourself not able to
|
||||
support it, commercial Linux vendors such as Wind River, Mentor
|
||||
Graphics, Timesys, and ENEA could take it and provide ongoing
|
||||
support. These vendors have offerings that are built using the Yocto
|
||||
Project.
|
||||
support it, commercial Linux vendors listed on :yocto_home:`/members/` and
|
||||
:yocto_home:`/about/participants/` could take it and provide ongoing
|
||||
support.
|
||||
|
||||
- *Flexibility:* Corporations use the Yocto Project many different
|
||||
ways. One example is to create an internal Linux distribution as a
|
||||
@@ -735,7 +734,7 @@ The :term:`OpenEmbedded Build System` uses a "workflow" to
|
||||
accomplish image and SDK generation. The following figure overviews that
|
||||
workflow:
|
||||
|
||||
.. image:: figures/YP-flow-diagram.png
|
||||
.. image:: svg/yp-flow-diagram.*
|
||||
:width: 100%
|
||||
|
||||
Here is a brief summary of the "workflow":
|
||||
@@ -761,7 +760,8 @@ Here is a brief summary of the "workflow":
|
||||
package feed that is used to create the final root file image.
|
||||
|
||||
#. The build system generates the file system image and a customized
|
||||
Extensible SDK (eSDK) for application development in parallel.
|
||||
:doc:`SDK </sdk-manual/index>` (Software Development Kit) for application
|
||||
development in parallel.
|
||||
|
||||
For a very detailed look at this workflow, see the
|
||||
":ref:`overview-manual/concepts:openembedded build system concepts`" section.
|
||||
|
||||
@@ -1248,6 +1248,53 @@ The :ref:`ref-classes-image_types` class also handles conversion and compression
|
||||
:term:`IMAGE_FSTYPES`. This would also be similar for Virtual Box Virtual Disk
|
||||
Image ("vdi") and QEMU Copy On Write Version 2 ("qcow2") images.
|
||||
|
||||
.. _ref-classes-image-container:
|
||||
|
||||
``image-container``
|
||||
===================
|
||||
|
||||
The :ref:`ref-classes-image-container` class is automatically inherited in
|
||||
:doc:`image </ref-manual/images>` recipes that have the ``container`` image type
|
||||
in :term:`IMAGE_FSTYPES`. It provides relevant settings to generate an image
|
||||
ready for use with an :wikipedia:`OCI <Open_Container_Initiative>`-compliant
|
||||
container management tool, such as :wikipedia:`Podman <Podman>` or
|
||||
:wikipedia:`Docker <Docker_(software)>`.
|
||||
|
||||
.. note::
|
||||
|
||||
This class neither builds nor installs container management tools on the
|
||||
target. Those tools are available in the :yocto_git:`meta-virtualization
|
||||
</meta-virtualization>` layer.
|
||||
|
||||
You should set the :term:`PREFERRED_PROVIDER` for the Linux kernel to
|
||||
``linux-dummy`` in a :term:`configuration file`::
|
||||
|
||||
PREFERRED_PROVIDER_virtual/kernel = "linux-dummy"
|
||||
|
||||
Otherwise an error is triggered. If desired, the
|
||||
:term:`IMAGE_CONTAINER_NO_DUMMY` variable can be set to "1" to avoid triggering
|
||||
this error.
|
||||
|
||||
The ``linux-dummy`` recipe acts as a Linux kernel recipe but builds nothing. It
|
||||
is relevant to use as the preferred Linux kernel provider in this case as a
|
||||
container image does not need to include a Linux kernel. Selecting it as the
|
||||
preferred provider for the kernel will also decrease build time.
|
||||
|
||||
Using this class only deploys an additional ``tar.bz2`` archive to
|
||||
:term:`DEPLOY_DIR_IMAGE`. This archive can be used in a container file (a file
|
||||
typically named ``Dockerfile`` or ``Containerfile``). For example, to be used with
|
||||
:wikipedia:`Podman <Podman>` or :wikipedia:`Docker <Docker_(software)>`, the
|
||||
`container file <https://docs.docker.com/reference/dockerfile/>`__ could contain
|
||||
the following instructions:
|
||||
|
||||
.. code-block:: dockerfile
|
||||
|
||||
FROM scratch
|
||||
ADD ./image-container-qemux86-64.rootfs.tar.bz2 /
|
||||
ENTRYPOINT /bin/sh
|
||||
|
||||
This is suitable to build a container using our generated root filesystem image.
|
||||
|
||||
.. _ref-classes-image-live:
|
||||
|
||||
``image-live``
|
||||
|
||||
@@ -45,6 +45,45 @@ release process validates the content of the new branch.
|
||||
Realize that there can be patches merged onto the stable release
|
||||
branches as and when they become available.
|
||||
|
||||
.. _ref-yp-development-cycle:
|
||||
|
||||
Development Cycle
|
||||
=================
|
||||
|
||||
As explained in the previous :ref:`ref-manual/release-process:Major and Minor
|
||||
Release Cadence` section, a new release comes out every six months.
|
||||
|
||||
During this six-months period of time, the Yocto Project releases four
|
||||
"Milestone" releases which represent distinct points of time. The milestone
|
||||
releases are tested through the :ref:`ref-manual/release-process:Testing and
|
||||
Quality Assurance` process and helps spotting issues before the actual release
|
||||
is out.
|
||||
|
||||
The time span between milestone releases can vary, but they are in general
|
||||
evenly spaced out during this six-months period of time.
|
||||
|
||||
These milestone releases are tagged with a capital "M" after the future release
|
||||
tag name. For example, the milestone tags "&DISTRO_RELEASE_SERIES;M1",
|
||||
"&DISTRO_RELEASE_SERIES;M2", and "&DISTRO_RELEASE_SERIES;M3" are released before
|
||||
the actual "&DISTRO_RELEASE_SERIES;" release.
|
||||
|
||||
.. note::
|
||||
|
||||
The fourth milestone (M4) is not actually released and announced, but
|
||||
represents a point of time for the Quality Assurance team to start the
|
||||
:ref:`ref-manual/release-process:Testing and Quality Assurance` process
|
||||
before tagging and delivering the final release.
|
||||
|
||||
After the third milestone release (M3), the Yocto Project enters **Feature
|
||||
Freeze**. This means that the maintainers of :term:`OpenEmbedded-Core
|
||||
(OE-Core)`, :term:`BitBake` and other core repositories stop accepting
|
||||
significant changes on the "master" branch. Changes that may be accepted are
|
||||
minor upgrades to core components and security/bug fixes.
|
||||
|
||||
During feature freeze, a new branch is created and maintained separately to
|
||||
test new features and enhancements received from contributors, but these changes
|
||||
will only make it to the master branch after the release is out.
|
||||
|
||||
Major Release Codenames
|
||||
=======================
|
||||
|
||||
@@ -62,7 +101,8 @@ codename are likely to be compatible and thus work together.
|
||||
|
||||
Releases are given a nominal release version as well but the codename is
|
||||
used in repositories for this reason. You can find information on Yocto
|
||||
Project releases and codenames at :yocto_wiki:`/Releases`.
|
||||
Project releases and codenames in the :yocto_home:`Releases page
|
||||
</development/releases/>`.
|
||||
|
||||
Our :doc:`/migration-guides/index` detail how to migrate from one release of
|
||||
the Yocto Project to the next.
|
||||
|
||||
@@ -608,7 +608,7 @@
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4">4.2</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-6"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
@@ -632,7 +632,7 @@
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6">5.1</tspan></text>
|
||||
<rect
|
||||
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1;opacity:0.5"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-6-2"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
@@ -656,26 +656,26 @@
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-9">5.2</tspan></text>
|
||||
<rect
|
||||
style="opacity:0.75;fill:#251f32;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-67"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
x="1163.6425"
|
||||
x="1223.8723"
|
||||
y="-382.27469"
|
||||
ry="2.2558987" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="1214.9716"
|
||||
x="1275.2014"
|
||||
y="-363.89413"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-53"><tspan
|
||||
sodipodi:role="line"
|
||||
x="1214.9716"
|
||||
x="1275.2014"
|
||||
y="-363.89413"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan957-2-8-6-3-9-7-4-2-0-5-5">Whinlatter</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="1214.9716"
|
||||
x="1275.2014"
|
||||
y="-345.89746"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-6">5.3</tspan></text>
|
||||
@@ -1847,7 +1847,7 @@
|
||||
x="2128.7158"
|
||||
y="-7.6722765"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7">Current (Apr. 25)</tspan></text>
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7">Current (Dec. 25)</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
|
||||
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
@@ -1463,6 +1463,12 @@ system and gives an overview of their function and contents.
|
||||
:term:`CCACHE_DISABLE` variable can be set to "1" in a recipe to disable
|
||||
`Ccache` support. This is useful when the recipe is known to not support it.
|
||||
|
||||
:term:`CCACHE_TOP_DIR`
|
||||
When inheriting the :ref:`ref-classes-ccache` class, the
|
||||
:term:`CCACHE_TOP_DIR` variable can be set to the location of where
|
||||
`Ccache` stores its cache files. This directory can be shared between
|
||||
builds.
|
||||
|
||||
:term:`CCLD`
|
||||
The minimal command and arguments used to run the linker when the C
|
||||
compiler is being used as the linker.
|
||||
@@ -3837,6 +3843,24 @@ system and gives an overview of their function and contents.
|
||||
variable, see the :ref:`ref-classes-image_types`
|
||||
class file, which is ``meta/classes-recipe/image_types.bbclass``.
|
||||
|
||||
:term:`IMAGE_CONTAINER_NO_DUMMY`
|
||||
When an image recipe has the ``container`` image type in
|
||||
:term:`IMAGE_FSTYPES`, it expects the :term:`PREFERRED_PROVIDER` for
|
||||
the Linux kernel (``virtual/kernel``) to be set to ``linux-dummy`` from a
|
||||
:term:`configuration file`. Otherwise, an error is triggered.
|
||||
|
||||
When set to "1", the :term:`IMAGE_CONTAINER_NO_DUMMY` variable allows the
|
||||
:term:`PREFERRED_PROVIDER` variable to be set to another value, thus
|
||||
skipping the check and not triggering the build error. Any other value
|
||||
will keep the check.
|
||||
|
||||
This variable should be set from the image recipe using the ``container``
|
||||
image type.
|
||||
|
||||
See the documentation of the :ref:`ref-classes-image-container` class for
|
||||
more information on why setting the :term:`PREFERRED_PROVIDER` to
|
||||
``linux-dummy`` is advised with this class.
|
||||
|
||||
:term:`IMAGE_DEVICE_TABLES`
|
||||
Specifies one or more files that contain custom device tables that
|
||||
are passed to the ``makedevs`` command as part of creating an image.
|
||||
@@ -6172,8 +6196,8 @@ system and gives an overview of their function and contents.
|
||||
|
||||
.. note::
|
||||
|
||||
An easy way to see what overrides apply is to search for :term:`OVERRIDES`
|
||||
in the output of the ``bitbake -e`` command. See the
|
||||
An easy way to see what overrides apply is to run the command
|
||||
``bitbake-getvar -r myrecipe OVERRIDES``. See the
|
||||
":ref:`dev-manual/debugging:viewing variable values`" section in the Yocto
|
||||
Project Development Tasks Manual for more information.
|
||||
|
||||
|
||||
@@ -147,7 +147,9 @@ from the :term:`DISTRO` variable.
|
||||
The
|
||||
:ref:`populate_sdk_base <ref-classes-populate-sdk-*>`
|
||||
class defines the default value of the :term:`SDK_TITLE` variable as
|
||||
follows::
|
||||
follows:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDK_TITLE ??= "${@d.getVar('DISTRO_NAME') or d.getVar('DISTRO')} SDK"
|
||||
|
||||
@@ -159,7 +161,9 @@ an example, assume you have your own layer for your distribution named
|
||||
does the default "poky" distribution. If so, you could update the
|
||||
:term:`SDK_TITLE` variable in the
|
||||
``~/meta-mydistro/conf/distro/mydistro.conf`` file using the following
|
||||
form::
|
||||
form:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDK_TITLE = "your_title"
|
||||
|
||||
@@ -189,7 +193,9 @@ the installed SDKs to update the installed SDKs by using the
|
||||
#. Build the extensible SDK normally (i.e., use the
|
||||
``bitbake -c populate_sdk_ext`` imagename command).
|
||||
|
||||
#. Publish the SDK using the following command::
|
||||
#. Publish the SDK using the following command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ oe-publish-sdk some_path/sdk-installer.sh path_to_shared_http_directory
|
||||
|
||||
@@ -212,7 +218,9 @@ installation directory for the SDK is based on the
|
||||
:term:`SDKEXTPATH` variables from
|
||||
within the
|
||||
:ref:`populate_sdk_base <ref-classes-populate-sdk-*>`
|
||||
class as follows::
|
||||
class as follows:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDKEXTPATH ??= "~/${@d.getVar('DISTRO')}_sdk"
|
||||
|
||||
@@ -229,7 +237,9 @@ assume you have your own layer for your distribution named
|
||||
does the default "poky" distribution. If so, you could update the
|
||||
:term:`SDKEXTPATH` variable in the
|
||||
``~/meta-mydistro/conf/distro/mydistro.conf`` file using the following
|
||||
form::
|
||||
form:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDKEXTPATH = "some_path_for_your_installed_sdk"
|
||||
|
||||
@@ -263,7 +273,9 @@ source, you need to do a number of things:
|
||||
|
||||
#. Set the appropriate configuration so that the produced SDK knows how
|
||||
to find the configuration. The variable you need to set is
|
||||
:term:`SSTATE_MIRRORS`::
|
||||
:term:`SSTATE_MIRRORS`:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SSTATE_MIRRORS = "file://.* https://example.com/some_path/sstate-cache/PATH"
|
||||
|
||||
@@ -276,7 +288,9 @@ source, you need to do a number of things:
|
||||
side, and its contents will not interfere with the build), then
|
||||
you can set the variable in your ``local.conf`` or custom distro
|
||||
configuration file. You can then pass the variable to the SDK by
|
||||
adding the following::
|
||||
adding the following:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
ESDK_LOCALCONF_ALLOW = "SSTATE_MIRRORS"
|
||||
|
||||
@@ -299,7 +313,9 @@ everything needed to reconstruct the image for which the SDK was built.
|
||||
This bundling can lead to an SDK installer file that is a Gigabyte or
|
||||
more in size. If the size of this file causes a problem, you can build
|
||||
an SDK that has just enough in it to install and provide access to the
|
||||
``devtool command`` by setting the following in your configuration::
|
||||
``devtool command`` by setting the following in your configuration:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDK_EXT_TYPE = "minimal"
|
||||
|
||||
@@ -321,7 +337,9 @@ information enables the ``devtool search`` command to return useful
|
||||
results.
|
||||
|
||||
To facilitate this wider range of information, you would need to set the
|
||||
following::
|
||||
following:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
SDK_INCLUDE_PKGDATA = "1"
|
||||
|
||||
|
||||
@@ -40,15 +40,20 @@ Follow these steps to locate and hand-install the toolchain:
|
||||
hardware, and image type.
|
||||
|
||||
The installer files (``*.sh``) follow this naming convention:
|
||||
``poky-glibc-host_system-core-image-type-arch-toolchain[-ext]-release.sh``:
|
||||
|
||||
- ``host_system``: string representing your development system: ``i686`` or ``x86_64``
|
||||
.. parsed-literal::
|
||||
|
||||
- ``type``: string representing the image: ``sato`` or ``minimal``
|
||||
poky-glibc-*host_system*-core-image-*type*-*arch*-toolchain[-ext]-*release*.sh
|
||||
|
||||
- ``arch``: string representing the target architecture such as ``cortexa57-qemuarm64``
|
||||
With:
|
||||
|
||||
- ``release``: version of the Yocto Project.
|
||||
- *host_system*: string representing your development system: ``i686`` or ``x86_64``
|
||||
|
||||
- *type*: string representing the image: ``sato`` or ``minimal``
|
||||
|
||||
- *arch*: string representing the target architecture such as ``cortexa57-qemuarm64``
|
||||
|
||||
- *release*: version of the Yocto Project.
|
||||
|
||||
.. note::
|
||||
The standard SDK installer does not have the ``-ext`` string as
|
||||
@@ -61,13 +66,17 @@ Follow these steps to locate and hand-install the toolchain:
|
||||
|
||||
For example, if your build host is a 64-bit x86 system and you need
|
||||
an extended SDK for a 64-bit core2 QEMU target, go into the ``x86_64``
|
||||
folder and download the following installer::
|
||||
folder and download the following installer:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
poky-glibc-x86_64-core-image-sato-core2-64-qemux86-64-toolchain-&DISTRO;.sh
|
||||
|
||||
#. *Run the Installer:* Be sure you have execution privileges and run
|
||||
the installer. Here is an example from the ``Downloads``
|
||||
directory::
|
||||
directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-qemux86-64-toolchain-&DISTRO;.sh
|
||||
|
||||
@@ -104,7 +113,9 @@ build the SDK installer. Follow these steps:
|
||||
the Source Directory (i.e. ``poky``), run the
|
||||
:ref:`structure-core-script` environment
|
||||
setup script to define the OpenEmbedded build environment on your
|
||||
build host::
|
||||
build host:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source oe-init-build-env
|
||||
|
||||
@@ -130,7 +141,9 @@ build the SDK installer. Follow these steps:
|
||||
:term:`SDKMACHINE` value must be set for the architecture of the
|
||||
machine you are using to build the installer. If :term:`SDKMACHINE`
|
||||
is not set appropriately, the build fails and provides an error
|
||||
message similar to the following::
|
||||
message similar to the following:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
The extensible SDK can currently only be built for the same
|
||||
architecture as the machine being built on - SDK_ARCH
|
||||
@@ -141,11 +154,15 @@ build the SDK installer. Follow these steps:
|
||||
|
||||
#. *Build the SDK Installer:* To build the SDK installer for a standard
|
||||
SDK and populate the SDK image, use the following command form. Be
|
||||
sure to replace ``image`` with an image (e.g. "core-image-sato")::
|
||||
sure to replace ``image`` with an image (e.g. "core-image-sato"):
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ bitbake image -c populate_sdk
|
||||
|
||||
You can do the same for the extensible SDK using this command form::
|
||||
You can do the same for the extensible SDK using this command form:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ bitbake image -c populate_sdk_ext
|
||||
|
||||
@@ -170,7 +187,9 @@ build the SDK installer. Follow these steps:
|
||||
libc-staticdev"
|
||||
|
||||
#. *Run the Installer:* You can now run the SDK installer from
|
||||
``tmp/deploy/sdk`` in the :term:`Build Directory`. Here is an example::
|
||||
``tmp/deploy/sdk`` in the :term:`Build Directory`. Here is an example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd poky/build/tmp/deploy/sdk
|
||||
$ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
|
||||
@@ -209,14 +228,19 @@ Follow these steps to extract the root filesystem:
|
||||
also contain flattened root filesystem image files (``*.ext4``),
|
||||
which you can use with QEMU directly.
|
||||
|
||||
The pre-built root filesystem image files follow the
|
||||
``core-image-profile-machine.tar.bz2`` naming convention:
|
||||
The pre-built root filesystem image files follow this naming convention:
|
||||
|
||||
- ``profile``: filesystem image's profile, such as ``minimal``,
|
||||
.. parsed-literal::
|
||||
|
||||
core-image-*profile*-*machine*.tar.bz2
|
||||
|
||||
With:
|
||||
|
||||
- *profile*: filesystem image's profile, such as ``minimal``,
|
||||
``minimal-dev`` or ``sato``. For information on these types of image
|
||||
profiles, see the "Images" chapter in the Yocto Project Reference Manual.
|
||||
|
||||
- ``machine``: same string as the name of the parent download directory.
|
||||
- *machine*: same string as the name of the parent download directory.
|
||||
|
||||
The root filesystems
|
||||
provided by the Yocto Project are based off of the
|
||||
@@ -224,7 +248,9 @@ Follow these steps to extract the root filesystem:
|
||||
|
||||
For example, if you plan on using a BeagleBone device as your target
|
||||
hardware and your image is a ``core-image-sato-sdk`` image, you can
|
||||
download the following file::
|
||||
download the following file:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
core-image-sato-sdk-beaglebone-yocto.tar.bz2
|
||||
|
||||
@@ -236,7 +262,9 @@ Follow these steps to extract the root filesystem:
|
||||
installed the toolchain (e.g. ``poky_sdk``).
|
||||
|
||||
Here is an example based on the toolchain installed in the
|
||||
":ref:`sdk-manual/appendix-obtain:locating pre-built sdk installers`" section::
|
||||
":ref:`sdk-manual/appendix-obtain:locating pre-built sdk installers`" section:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source poky_sdk/environment-setup-core2-64-poky-linux
|
||||
|
||||
@@ -247,7 +275,9 @@ Follow these steps to extract the root filesystem:
|
||||
from a previously built root filesystem image that was downloaded
|
||||
from the :yocto_dl:`Index of Releases </releases/yocto/&DISTRO_REL_LATEST_TAG;/machines/>`.
|
||||
This command extracts the root filesystem into the ``core2-64-sato``
|
||||
directory::
|
||||
directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato
|
||||
|
||||
@@ -256,24 +286,52 @@ Follow these steps to extract the root filesystem:
|
||||
Installed Standard SDK Directory Structure
|
||||
==========================================
|
||||
|
||||
The following figure shows the resulting directory structure after you
|
||||
install the Standard SDK by running the ``*.sh`` SDK installation
|
||||
script:
|
||||
After you install the Standard SDK by running the ``*.sh`` SDK installation
|
||||
script, the following directory structure should be observed:
|
||||
|
||||
.. image:: figures/sdk-installed-standard-sdk-directory.png
|
||||
:scale: 100%
|
||||
.. parsed-literal::
|
||||
|
||||
*install_dir*/*version*/
|
||||
├── buildinfo
|
||||
├── environment-setup-*target*-poky-linux
|
||||
├── site-config-*target*-poky-linux
|
||||
├── sysroots/
|
||||
│ ├── *target*-poky-linux/
|
||||
│ │ ├── bin/
|
||||
│ │ ├── boot/
|
||||
│ │ ├── etc/
|
||||
│ │ ├── home/
|
||||
│ │ ├── lib/
|
||||
│ │ ├── media/
|
||||
│ │ ├── mnt/
|
||||
│ │ ├── proc/
|
||||
│ │ ├── run/
|
||||
│ │ ├── sbin/
|
||||
│ │ ├── sys/
|
||||
│ │ ├── tmp/
|
||||
│ │ ├── usr/
|
||||
│ │ └── var/
|
||||
│ └── *host*-pokysdk-linux/
|
||||
│ ├── bin/
|
||||
│ ├── environment-setup.d/
|
||||
│ ├── etc/
|
||||
│ ├── lib/
|
||||
│ ├── sbin/
|
||||
│ ├── usr/
|
||||
│ └── var/
|
||||
└── version-*target*-poky-linux
|
||||
|
||||
The installed SDK consists of an environment setup script for the SDK, a
|
||||
configuration file for the target, a version file for the target, and
|
||||
the root filesystem (``sysroots``) needed to develop objects for the
|
||||
target system.
|
||||
|
||||
Within the figure, italicized text is used to indicate replaceable
|
||||
portions of the file or directory name. For example, install_dir/version
|
||||
is the directory where the SDK is installed. By default, this directory
|
||||
is ``/opt/poky/``. And, version represents the specific snapshot of the
|
||||
SDK (e.g. &DISTRO;). Furthermore, target represents the target architecture
|
||||
(e.g. ``i586``) and host represents the development system's
|
||||
In the layout above, italicized text is used to indicate replaceable
|
||||
portions of the file or directory name. For example, *install_dir*/*version*
|
||||
is the directory where the SDK is installed. By default, *install_dir*
|
||||
is ``/opt/poky/``. And, *version* represents the specific snapshot of the
|
||||
SDK (e.g. &DISTRO;). Furthermore, *target* represents the target architecture
|
||||
(e.g. ``i586``) and *host* represents the development system's
|
||||
architecture (e.g. ``x86_64``). Thus, the complete names of the two
|
||||
directories within the ``sysroots`` could be ``i586-poky-linux`` and
|
||||
``x86_64-pokysdk-linux`` for the target and host, respectively.
|
||||
@@ -281,13 +339,29 @@ directories within the ``sysroots`` could be ``i586-poky-linux`` and
|
||||
Installed Extensible SDK Directory Structure
|
||||
============================================
|
||||
|
||||
The following figure shows the resulting directory structure after you
|
||||
install the Extensible SDK by running the ``*.sh`` SDK installation
|
||||
script:
|
||||
After you install the Extensible SDK by running the ``*.sh`` SDK installation
|
||||
script, the following directory structure should be observed:
|
||||
|
||||
.. image:: figures/sdk-installed-extensible-sdk-directory.png
|
||||
:scale: 80%
|
||||
:align: center
|
||||
.. parsed-literal::
|
||||
|
||||
*install_dir*/
|
||||
├── bitbake-cookerdaemon.log
|
||||
├── buildinfo
|
||||
├── buildtools/
|
||||
├── cache/
|
||||
├── conf/
|
||||
├── .devtoolbase
|
||||
├── downloads/
|
||||
├── environment-setup-*target*-poky-linux
|
||||
├── layers/
|
||||
├── oe-time-dd-test.dat
|
||||
├── preparing_system_build.log
|
||||
├── site-config-*target*-poky-linux
|
||||
├── sstate-cache/
|
||||
├── sysroots/
|
||||
├── tmp/
|
||||
├── version-*target*-poky-linux
|
||||
└── workspace/
|
||||
|
||||
The installed directory structure for the extensible SDK is quite
|
||||
different than the installed structure for the standard SDK. The
|
||||
@@ -300,7 +374,7 @@ the SDK, a configuration file for the target, a version file for the
|
||||
target, and log files for the OpenEmbedded build system preparation
|
||||
script run by the installer and BitBake.
|
||||
|
||||
Within the figure, italicized text is used to indicate replaceable
|
||||
portions of the file or directory name. For example, install_dir is the
|
||||
directory where the SDK is installed, which is ``poky_sdk`` by default,
|
||||
and target represents the target architecture (e.g. ``i586``).
|
||||
In the layout above, italicized text is used to indicate replaceable
|
||||
portions of the file or directory name. For example, *install_dir* is the
|
||||
directory where the SDK is installed, which is by default ``poky_sdk`` in your
|
||||
home directory and *target* represents the target architecture (e.g. ``i586``).
|
||||
|
||||
@@ -71,7 +71,9 @@ Setting up the Extensible SDK environment directly in a Yocto build
|
||||
#. Set up all the needed layers and a Yocto :term:`Build Directory`, e.g. a regular Yocto
|
||||
build where ``bitbake`` can be executed.
|
||||
|
||||
#. Run::
|
||||
#. Run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ bitbake meta-ide-support
|
||||
$ bitbake -c populate_sysroot gtk+3
|
||||
@@ -98,30 +100,27 @@ The names of the tarball installer scripts are such that a string
|
||||
representing the host system appears first in the filename and then is
|
||||
immediately followed by a string representing the target architecture.
|
||||
An extensible SDK has the string "-ext" as part of the name. Following
|
||||
is the general form::
|
||||
is the general form:
|
||||
|
||||
poky-glibc-host_system-image_type-arch-toolchain-ext-release_version.sh
|
||||
.. parsed-literal::
|
||||
|
||||
Where:
|
||||
host_system is a string representing your development system:
|
||||
poky-glibc-*host_system*-*image_type*-*arch*-toolchain-ext-*release_version*.sh
|
||||
|
||||
i686 or x86_64.
|
||||
Where:
|
||||
|
||||
image_type is the image for which the SDK was built:
|
||||
- *host_system* is a string representing your development system: ``i686`` or ``x86_64``.
|
||||
|
||||
core-image-sato or core-image-minimal
|
||||
- *image_type* is the image for which the SDK was built: ``core-image-sato`` or ``core-image-minimal``.
|
||||
|
||||
arch is a string representing the tuned target architecture:
|
||||
- *arch* is a string representing the tuned target architecture: ``aarch64``, ``armv5e``, ``core2-64``, ``i586``, ``mips32r2``, ``mips64``, ``ppc7400``, or ``cortexa8hf-neon``.
|
||||
|
||||
aarch64, armv5e, core2-64, i586, mips32r2, mips64, ppc7400, or cortexa8hf-neon
|
||||
|
||||
release_version is a string representing the release number of the Yocto Project:
|
||||
|
||||
&DISTRO;, &DISTRO;+snapshot
|
||||
- *release_version* is a string representing the release number of the Yocto Project: ``&DISTRO;``, ``&DISTRO;+snapshot``.
|
||||
|
||||
For example, the following SDK installer is for a 64-bit
|
||||
development host system and a i586-tuned target architecture based off
|
||||
the SDK for ``core-image-sato`` and using the current &DISTRO; snapshot::
|
||||
the SDK for ``core-image-sato`` and using the current &DISTRO; snapshot:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
poky-glibc-x86_64-core-image-sato-i586-toolchain-ext-&DISTRO;.sh
|
||||
|
||||
@@ -142,7 +141,9 @@ must be writable for whichever users need to use the SDK.
|
||||
The following command shows how to run the installer given a toolchain
|
||||
tarball for a 64-bit x86 development host system and a 64-bit x86 target
|
||||
architecture. The example assumes the SDK installer is located in
|
||||
``~/Downloads/`` and has execution rights::
|
||||
``~/Downloads/`` and has execution rights:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./Downloads/poky-glibc-x86_64-core-image-minimal-core2-64-toolchain-ext-2.5.sh
|
||||
Poky (Yocto Project Reference Distro) Extensible SDK installer version 2.5
|
||||
@@ -192,7 +193,9 @@ begin with the string "``environment-setup``" and include as part of
|
||||
their name the tuned target architecture. As an example, the following
|
||||
commands set the working directory to where the SDK was installed and
|
||||
then source the environment setup script. In this example, the setup
|
||||
script is for an IA-based target machine using i586 tuning::
|
||||
script is for an IA-based target machine using i586 tuning:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /home/scottrif/poky_sdk
|
||||
$ source environment-setup-core2-64-poky-linux
|
||||
@@ -200,7 +203,9 @@ script is for an IA-based target machine using i586 tuning::
|
||||
Run devtool --help for further details.
|
||||
|
||||
When using the environment script directly in a Yocto build, it can
|
||||
be run similarly::
|
||||
be run similarly:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source tmp/deploy/images/qemux86-64/environment-setup-core2-64-poky-linux
|
||||
|
||||
@@ -1585,7 +1590,9 @@ populated on-demand. Sometimes you must explicitly install extra items
|
||||
into the SDK. If you need these extra items, you can first search for
|
||||
the items using the ``devtool search`` command. For example, suppose you
|
||||
need to link to libGL but you are not sure which recipe provides libGL.
|
||||
You can use the following command to find out::
|
||||
You can use the following command to find out:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ devtool search libGL mesa
|
||||
A free implementation of the OpenGL API
|
||||
@@ -1598,7 +1605,9 @@ When using the extensible SDK directly in a Yocto build
|
||||
|
||||
In this scenario, the Yocto build tooling, e.g. ``bitbake``
|
||||
is directly accessible to build additional items, and it
|
||||
can simply be executed directly::
|
||||
can simply be executed directly:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ bitbake curl-native
|
||||
# Add newly built native items to native sysroot
|
||||
@@ -1610,14 +1619,16 @@ can simply be executed directly::
|
||||
When using a standalone installer for the Extensible SDK
|
||||
--------------------------------------------------------
|
||||
|
||||
::
|
||||
.. code-block:: console
|
||||
|
||||
$ devtool sdk-install mesa
|
||||
|
||||
By default, the ``devtool sdk-install`` command assumes
|
||||
the item is available in pre-built form from your SDK provider. If the
|
||||
item is not available and it is acceptable to build the item from
|
||||
source, you can add the "-s" option as follows::
|
||||
source, you can add the "-s" option as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ devtool sdk-install -s mesa
|
||||
|
||||
@@ -1633,7 +1644,9 @@ If you are working with an installed extensible SDK that gets
|
||||
occasionally updated (e.g. a third-party SDK), then you will need to
|
||||
manually "pull down" the updates into the installed SDK.
|
||||
|
||||
To update your installed SDK, use ``devtool`` as follows::
|
||||
To update your installed SDK, use ``devtool`` as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ devtool sdk-update
|
||||
|
||||
@@ -1641,7 +1654,9 @@ The previous command assumes your SDK provider has set the default update URL
|
||||
for you through the :term:`SDK_UPDATE_URL` variable as described in the
|
||||
":ref:`sdk-manual/appendix-customizing:Providing Updates to the Extensible SDK After Installation`"
|
||||
section. If the SDK provider has not set that default URL, you need to
|
||||
specify it yourself in the command as follows::
|
||||
specify it yourself in the command as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ devtool sdk-update path_to_update_directory
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 30 KiB |
@@ -148,7 +148,7 @@ SDK Development Model
|
||||
|
||||
Fundamentally, the SDK fits into the development process as follows:
|
||||
|
||||
.. image:: figures/sdk-environment.png
|
||||
.. image:: svg/sdk-environment.*
|
||||
:width: 100%
|
||||
|
||||
The SDK is installed on any machine and can be used to develop applications,
|
||||
|
||||
463
documentation/sdk-manual/svg/sdk-environment.svg
Normal file
@@ -0,0 +1,463 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="152.07843mm"
|
||||
height="104.79381mm"
|
||||
viewBox="0 0 152.07843 104.79381"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="sdk-environment.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="1.7923962"
|
||||
inkscape:cx="323.86813"
|
||||
inkscape:cy="222.32808"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1440"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="layer2" /><defs
|
||||
id="defs1"><marker
|
||||
style="overflow:visible"
|
||||
id="marker27"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Triangle arrow"
|
||||
markerWidth="1.5"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="none"><path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path27" /></marker><marker
|
||||
style="overflow:visible"
|
||||
id="marker24"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Triangle arrow"
|
||||
markerWidth="1.5"
|
||||
markerHeight="1"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="none"><path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path24" /></marker><marker
|
||||
style="overflow:visible"
|
||||
id="Triangle"
|
||||
refX="-1"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Triangle arrow"
|
||||
markerWidth="0.25"
|
||||
markerHeight="0.44999999"
|
||||
viewBox="0 0 1 1"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="none"
|
||||
markerUnits="strokeWidth"><path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path135" /></marker></defs><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Layer 2"
|
||||
style="display:inline"
|
||||
transform="translate(-15.261151,-139.49913)"><g
|
||||
id="g5"
|
||||
inkscape:label="yp-machine"><rect
|
||||
style="display:inline;fill:#7399cb;fill-opacity:1;stroke:#4d6fad;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1"
|
||||
width="79.70993"
|
||||
height="38.067791"
|
||||
x="15.552484"
|
||||
y="150.90607"
|
||||
inkscape:label="yp-machine-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.153561"
|
||||
y="161.57883"
|
||||
id="text3"
|
||||
inkscape:label="yp-machine-rect-hosts-yp-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3"
|
||||
style="stroke-width:0"
|
||||
x="19.153561"
|
||||
y="161.57883">Hosts Yocto Project</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.240089"
|
||||
y="166.77032"
|
||||
id="text3-0"
|
||||
inkscape:label="yp-machine-rect-host-sdk-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5"
|
||||
style="stroke-width:0"
|
||||
x="19.240089"
|
||||
y="166.77032">Can Host an SDK</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.36305"
|
||||
y="171.6631"
|
||||
id="text3-0-3"
|
||||
inkscape:label="yp-machine-rect-build-sdk-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3"
|
||||
style="stroke-width:0"
|
||||
x="19.36305"
|
||||
y="171.6631">Can Build an SDK</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.291393"
|
||||
y="176.81357"
|
||||
id="text3-0-3-3"
|
||||
inkscape:label="yp-machine-rect-build-img-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3-4"
|
||||
style="stroke-width:0"
|
||||
x="19.291393"
|
||||
y="176.81357">Can Build an Image</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.267235"
|
||||
y="181.81523"
|
||||
id="text3-0-3-3-8"
|
||||
inkscape:label="yp-machine-rect-build-app-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3-4-1"
|
||||
style="stroke-width:0"
|
||||
x="19.267235"
|
||||
y="181.81523">Can Build an Application</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.93636px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#4d6fad;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="15.660255"
|
||||
y="155.1917"
|
||||
id="text2"
|
||||
inkscape:label="yp-machine-text"
|
||||
transform="scale(1.0510998,0.95138443)"><tspan
|
||||
id="tspan2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.93636px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;stroke:#000000;stroke-width:0;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="15.660255"
|
||||
y="155.1917"
|
||||
sodipodi:role="line">Yocto Project Machine</tspan></text></g><g
|
||||
id="g7"
|
||||
inkscape:label="target-hw"><rect
|
||||
style="display:inline;fill:#ff8e98;fill-opacity:1;stroke:#4d6fad;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect5"
|
||||
width="54.540253"
|
||||
height="21.210974"
|
||||
x="15.461151"
|
||||
y="222.88196"
|
||||
inkscape:label="target-hw-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.230175"
|
||||
y="229.96002"
|
||||
id="text3-0-3-3-8-6"
|
||||
inkscape:label="target-hw-rect-boot-run-app-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3-4-1-7"
|
||||
style="stroke-width:0"
|
||||
x="19.230175"
|
||||
y="229.96002">Boots and Runs Images</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.216074"
|
||||
y="235.00998"
|
||||
id="text3-0-3-3-8-6-3"
|
||||
inkscape:label="target-hw-rect-rt-debug-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3-4-1-7-7"
|
||||
style="stroke-width:0"
|
||||
x="19.216074"
|
||||
y="235.00998">Real Time Debugging</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="19.318588"
|
||||
y="239.95505"
|
||||
id="text3-0-3-3-8-6-3-1"
|
||||
inkscape:label="target-hw-rect-run-apps-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3-5-3-4-1-7-7-0"
|
||||
style="stroke-width:0"
|
||||
x="19.318588"
|
||||
y="239.95505">Runs Applications</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.85198px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="15.431406"
|
||||
y="240.36668"
|
||||
id="text5"
|
||||
transform="scale(1.0919034,0.9158319)"
|
||||
inkscape:label="target-hw-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5"
|
||||
style="stroke-width:0"
|
||||
x="15.431406"
|
||||
y="240.36668">Target Hardware</tspan></text></g><g
|
||||
id="g22"
|
||||
inkscape:label="sdk-machine-bot"
|
||||
transform="translate(-0.02339256,71.952437)"
|
||||
style="display:inline"><rect
|
||||
style="display:inline;opacity:1;fill:#bcff75;fill-opacity:1;stroke:#4d6fad;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect18"
|
||||
width="35.780399"
|
||||
height="24.143047"
|
||||
x="131.34613"
|
||||
y="144.82916"
|
||||
inkscape:label="sdk-machine-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.18832"
|
||||
y="163.78954"
|
||||
id="text19"
|
||||
inkscape:label="sdk-machine-rect-host-sdk-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan19"
|
||||
style="stroke-width:0"
|
||||
x="135.18832"
|
||||
y="163.78954">Hosts an SDK</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.28667"
|
||||
y="158.73506"
|
||||
id="text20"
|
||||
inkscape:label="sdk-machine-rect-dbg-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan20"
|
||||
style="stroke-width:0"
|
||||
x="135.28667"
|
||||
y="158.73506">Debug Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.0829"
|
||||
y="153.75328"
|
||||
id="text21"
|
||||
inkscape:label="sdk-machine-rect-compile-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan21"
|
||||
style="stroke-width:0"
|
||||
x="135.0829"
|
||||
y="153.75328">Compile Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.8036px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="123.12138"
|
||||
y="153.16264"
|
||||
id="text22"
|
||||
transform="scale(1.0781897,0.92748058)"
|
||||
inkscape:label="sdk-machine-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan22"
|
||||
style="stroke-width:0"
|
||||
x="123.12138"
|
||||
y="153.16264">SDK Machine</tspan></text></g><g
|
||||
id="g11"
|
||||
inkscape:label="sdk-machine-mid"
|
||||
transform="translate(0.01304739,36.040971)"
|
||||
style="display:inline"><rect
|
||||
style="display:inline;opacity:1;fill:#bcff75;fill-opacity:1;stroke:#4d6fad;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect8"
|
||||
width="35.780399"
|
||||
height="24.143047"
|
||||
x="131.34613"
|
||||
y="144.82916"
|
||||
inkscape:label="sdk-machine-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.18832"
|
||||
y="163.78954"
|
||||
id="text8"
|
||||
inkscape:label="sdk-machine-rect-host-sdk-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8"
|
||||
style="stroke-width:0"
|
||||
x="135.18832"
|
||||
y="163.78954">Hosts an SDK</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.28667"
|
||||
y="158.73506"
|
||||
id="text9"
|
||||
inkscape:label="sdk-machine-rect-dbg-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9"
|
||||
style="stroke-width:0"
|
||||
x="135.28667"
|
||||
y="158.73506">Debug Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.0829"
|
||||
y="153.75328"
|
||||
id="text10"
|
||||
inkscape:label="sdk-machine-rect-compile-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10"
|
||||
style="stroke-width:0"
|
||||
x="135.0829"
|
||||
y="153.75328">Compile Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.8036px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="123.12138"
|
||||
y="153.16264"
|
||||
id="text11"
|
||||
transform="scale(1.0781897,0.92748058)"
|
||||
inkscape:label="sdk-machine-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan11"
|
||||
style="stroke-width:0"
|
||||
x="123.12138"
|
||||
y="153.16264">SDK Machine</tspan></text></g><g
|
||||
id="g18"
|
||||
inkscape:label="sdk-machine-top"
|
||||
style="display:inline"><rect
|
||||
style="display:inline;opacity:1;fill:#bcff75;fill-opacity:1;stroke:#4d6fad;stroke-width:0.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect15"
|
||||
width="35.780399"
|
||||
height="24.143047"
|
||||
x="131.34613"
|
||||
y="144.82916"
|
||||
inkscape:label="sdk-machine-rect" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.18832"
|
||||
y="163.78954"
|
||||
id="text15"
|
||||
inkscape:label="sdk-machine-rect-host-sdk-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan15"
|
||||
style="stroke-width:0"
|
||||
x="135.18832"
|
||||
y="163.78954">Hosts an SDK</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.28667"
|
||||
y="158.73506"
|
||||
id="text16"
|
||||
inkscape:label="sdk-machine-rect-dbg-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan16"
|
||||
style="stroke-width:0"
|
||||
x="135.28667"
|
||||
y="158.73506">Debug Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="135.0829"
|
||||
y="153.75328"
|
||||
id="text17"
|
||||
inkscape:label="sdk-machine-rect-compile-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan17"
|
||||
style="stroke-width:0"
|
||||
x="135.0829"
|
||||
y="153.75328">Compile Code</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.8036px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="123.12138"
|
||||
y="153.16264"
|
||||
id="text18"
|
||||
transform="scale(1.0781897,0.92748058)"
|
||||
inkscape:label="sdk-machine-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan18"
|
||||
style="stroke-width:0"
|
||||
x="123.12138"
|
||||
y="153.16264">SDK Machine</tspan></text></g><g
|
||||
id="g24"
|
||||
inkscape:label="deploy"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="67.689835"
|
||||
y="202.65199"
|
||||
id="text4"
|
||||
inkscape:label="deploy-text"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4"
|
||||
style="stroke-width:0"
|
||||
x="67.689835"
|
||||
y="202.65199">Deploy</tspan></text><path
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle)"
|
||||
d="m 61.112324,191.97241 -0.104376,23.8825"
|
||||
id="path22"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:label="arrow-deploy" /></g><g
|
||||
id="g27"
|
||||
inkscape:label="objects-bot"
|
||||
style="display:inline"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.55315px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="112.58056"
|
||||
y="228.37267"
|
||||
id="text4-0-7-2"
|
||||
inkscape:label="objects-text"
|
||||
transform="scale(1.0071938,0.99285757)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4-7-2-7"
|
||||
style="stroke-width:0"
|
||||
x="112.58056"
|
||||
y="228.37267">Objects</tspan></text><path
|
||||
style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.799999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker27)"
|
||||
d="m 130.78047,228.73371 -20.13864,0.0652 0.10438,-43.68265 -10.933713,-0.10439"
|
||||
id="path26"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="arrow" /></g><g
|
||||
id="g26"
|
||||
style="display:inline"
|
||||
inkscape:label="objects-mid"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.56577px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.3705"
|
||||
y="170.58327"
|
||||
id="text4-0-7"
|
||||
inkscape:label="objects-text"
|
||||
transform="scale(1.0107715,0.98934328)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4-7-2"
|
||||
style="stroke-width:0"
|
||||
x="104.3705"
|
||||
y="170.58327">Objects</tspan></text><path
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.8;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker24)"
|
||||
d="m 130.9339,191.93551 -11.2556,-0.0369 0.18452,-21.88383 -20.038641,0.18453"
|
||||
id="path25"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:label="arrow" /></g><g
|
||||
id="g25"
|
||||
inkscape:label="objects-top"><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.55676px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;writing-mode:lr-tb;direction:ltr;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="104.78993"
|
||||
y="157.1425"
|
||||
id="text4-0"
|
||||
inkscape:label="objects-text"
|
||||
transform="scale(1.0082173,0.99184966)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4-7"
|
||||
style="stroke-width:0"
|
||||
x="104.78993"
|
||||
y="157.1425">Objects</tspan></text><path
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.9;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker24)"
|
||||
d="m 130.91375,157.65432 -30.64596,-0.24975"
|
||||
id="path23"
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:label="arrow" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -52,32 +52,29 @@ libraries appropriate for developing against the corresponding image.
|
||||
|
||||
The names of the tarball installer scripts are such that a string
|
||||
representing the host system appears first in the filename and then is
|
||||
immediately followed by a string representing the target architecture::
|
||||
immediately followed by a string representing the target architecture:
|
||||
|
||||
poky-glibc-host_system-image_type-arch-toolchain-release_version.sh
|
||||
.. parsed-literal::
|
||||
|
||||
Where:
|
||||
host_system is a string representing your development system:
|
||||
poky-glibc-*host_system*-*image_type*-*arch*-toolchain-*release_version*.sh
|
||||
|
||||
i686 or x86_64.
|
||||
Where:
|
||||
|
||||
image_type is the image for which the SDK was built:
|
||||
- *host_system* is a string representing your development system: ``i686`` or ``x86_64``.
|
||||
|
||||
core-image-minimal or core-image-sato.
|
||||
- *image_type* is the image for which the SDK was built: ``core-image-minimal`` or ``core-image-sato``.
|
||||
|
||||
arch is a string representing the tuned target architecture:
|
||||
- *arch* is a string representing the tuned target architecture: ``aarch64``, ``armv5e``, ``core2-64``, ``i586``, ``mips32r2``, ``mips64``, ``ppc7400``, or ``cortexa8hf-neon``.
|
||||
|
||||
aarch64, armv5e, core2-64, i586, mips32r2, mips64, ppc7400, or cortexa8hf-neon.
|
||||
|
||||
release_version is a string representing the release number of the Yocto Project:
|
||||
|
||||
&DISTRO;, &DISTRO;+snapshot
|
||||
- *release_version* is a string representing the release number of the Yocto Project: ``&DISTRO;``, ``&DISTRO;+snapshot``.
|
||||
|
||||
For example, the following SDK installer is for a 64-bit
|
||||
development host system and a i586-tuned target architecture based off
|
||||
the SDK for ``core-image-sato`` and using the current DISTRO snapshot::
|
||||
the SDK for ``core-image-sato`` and the ``&DISTRO;`` release:
|
||||
|
||||
poky-glibc-x86_64-core-image-sato-i586-toolchain-DISTRO.sh
|
||||
.. code-block:: text
|
||||
|
||||
poky-glibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -96,7 +93,9 @@ must be writable for whichever users need to use the SDK.
|
||||
The following command shows how to run the installer given a toolchain
|
||||
tarball for a 64-bit x86 development host system and a 64-bit x86 target
|
||||
architecture. The example assumes the SDK installer is located in
|
||||
``~/Downloads/`` and has execution rights::
|
||||
``~/Downloads/`` and has execution rights:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./Downloads/poky-glibc-x86_64-core-image-sato-i586-toolchain-&DISTRO;.sh
|
||||
Poky (Yocto Project Reference Distro) SDK installer version &DISTRO;
|
||||
@@ -136,7 +135,9 @@ begin with the string "``environment-setup``" and include as part of
|
||||
their name the tuned target architecture. As an example, the following
|
||||
commands set the working directory to where the SDK was installed and
|
||||
then source the environment setup script. In this example, the setup
|
||||
script is for an IA-based target machine using i586 tuning::
|
||||
script is for an IA-based target machine using i586 tuning:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
|
||||
|
||||
|
||||
@@ -33,7 +33,9 @@ project:
|
||||
|
||||
#. *Create a Working Directory and Populate It:* Create a clean
|
||||
directory for your project and then make that directory your working
|
||||
location::
|
||||
location:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mkdir $HOME/helloworld
|
||||
$ cd $HOME/helloworld
|
||||
@@ -45,14 +47,18 @@ project:
|
||||
respectively.
|
||||
|
||||
Use the following command to create an empty README file, which is
|
||||
required by GNU Coding Standards::
|
||||
required by GNU Coding Standards:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ touch README
|
||||
|
||||
Create the remaining
|
||||
three files as follows:
|
||||
|
||||
- ``hello.c``::
|
||||
- ``hello.c``:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -62,7 +68,9 @@ project:
|
||||
return 0;
|
||||
}
|
||||
|
||||
- ``configure.ac``::
|
||||
- ``configure.ac``:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
AC_INIT(hello,0.1)
|
||||
AM_INIT_AUTOMAKE([foreign])
|
||||
@@ -70,7 +78,9 @@ project:
|
||||
AC_CONFIG_FILES(Makefile)
|
||||
AC_OUTPUT
|
||||
|
||||
- ``Makefile.am``::
|
||||
- ``Makefile.am``:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
bin_PROGRAMS = hello
|
||||
hello_SOURCES = hello.c
|
||||
@@ -84,17 +94,23 @@ project:
|
||||
which is followed by the string "poky-linux". For this example, the
|
||||
command sources a script from the default SDK installation directory
|
||||
that uses the 32-bit Intel x86 Architecture and the &DISTRO; Yocto
|
||||
Project release::
|
||||
Project release:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
|
||||
|
||||
Another example is sourcing the environment setup directly in a Yocto
|
||||
build::
|
||||
build:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source tmp/deploy/images/qemux86-64/environment-setup-core2-64-poky-linux
|
||||
|
||||
#. *Create the configure Script:* Use the ``autoreconf`` command to
|
||||
generate the ``configure`` script::
|
||||
generate the ``configure`` script:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ autoreconf
|
||||
|
||||
@@ -113,7 +129,9 @@ project:
|
||||
the cross-compiler. The
|
||||
:term:`CONFIGURE_FLAGS`
|
||||
environment variable provides the minimal arguments for GNU
|
||||
configure::
|
||||
configure:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./configure ${CONFIGURE_FLAGS}
|
||||
|
||||
@@ -126,12 +144,16 @@ project:
|
||||
``armv5te-poky-linux-gnueabi``. You will notice that the name of the
|
||||
script is ``environment-setup-armv5te-poky-linux-gnueabi``. Thus, the
|
||||
following command works to update your project and rebuild it using
|
||||
the appropriate cross-toolchain tools::
|
||||
the appropriate cross-toolchain tools:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./configure --host=armv5te-poky-linux-gnueabi --with-libtool-sysroot=sysroot_dir
|
||||
|
||||
#. *Make and Install the Project:* These two commands generate and
|
||||
install the project into the destination directory::
|
||||
install the project into the destination directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make
|
||||
$ make install DESTDIR=./tmp
|
||||
@@ -146,13 +168,17 @@ project:
|
||||
This next command is a simple way to verify the installation of your
|
||||
project. Running the command prints the architecture on which the
|
||||
binary file can run. This architecture should be the same
|
||||
architecture that the installed cross-toolchain supports::
|
||||
architecture that the installed cross-toolchain supports:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ file ./tmp/usr/local/bin/hello
|
||||
|
||||
#. *Execute Your Project:* To execute the project, you would need to run
|
||||
it on your target hardware. If your target hardware happens to be
|
||||
your build host, you could run the project as follows::
|
||||
your build host, you could run the project as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./tmp/usr/local/bin/hello
|
||||
|
||||
@@ -198,7 +224,9 @@ regarding variable behavior:
|
||||
.. note::
|
||||
|
||||
Regardless of how you set your variables, if you use the "-e" option
|
||||
with ``make``, the variables from the SDK setup script take precedence::
|
||||
with ``make``, the variables from the SDK setup script take precedence:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make -e target
|
||||
|
||||
@@ -209,7 +237,9 @@ demonstrates these variable behaviors.
|
||||
In a new shell environment variables are not established for the SDK
|
||||
until you run the setup script. For example, the following commands show
|
||||
a null value for the compiler variable (i.e.
|
||||
:term:`CC`)::
|
||||
:term:`CC`):
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ echo ${CC}
|
||||
|
||||
@@ -219,7 +249,9 @@ Running the
|
||||
SDK setup script for a 64-bit build host and an i586-tuned target
|
||||
architecture for a ``core-image-sato`` image using the current &DISTRO;
|
||||
Yocto Project release and then echoing that variable shows the value
|
||||
established through the script::
|
||||
established through the script:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
|
||||
$ echo ${CC}
|
||||
@@ -230,7 +262,9 @@ example:
|
||||
|
||||
#. *Create a Working Directory and Populate It:* Create a clean
|
||||
directory for your project and then make that directory your working
|
||||
location::
|
||||
location:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mkdir $HOME/helloworld
|
||||
$ cd $HOME/helloworld
|
||||
@@ -243,7 +277,9 @@ example:
|
||||
|
||||
Create the three files as follows:
|
||||
|
||||
- ``main.c``::
|
||||
- ``main.c``:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include "module.h"
|
||||
void sample_func();
|
||||
@@ -253,12 +289,16 @@ example:
|
||||
return 0;
|
||||
}
|
||||
|
||||
- ``module.h``::
|
||||
- ``module.h``:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <stdio.h>
|
||||
void sample_func();
|
||||
|
||||
- ``module.c``::
|
||||
- ``module.c``:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include "module.h"
|
||||
void sample_func()
|
||||
@@ -276,12 +316,16 @@ example:
|
||||
which is followed by the string "poky-linux". For this example, the
|
||||
command sources a script from the default SDK installation directory
|
||||
that uses the 32-bit Intel x86 Architecture and the &DISTRO_NAME; Yocto
|
||||
Project release::
|
||||
Project release:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source /opt/poky/&DISTRO;/environment-setup-i586-poky-linux
|
||||
|
||||
Another example is sourcing the environment setup directly in a Yocto
|
||||
build::
|
||||
build:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ source tmp/deploy/images/qemux86-64/environment-setup-core2-64-poky-linux
|
||||
|
||||
@@ -289,7 +333,9 @@ example:
|
||||
two lines that can be used to set the :term:`CC` variable. One line is
|
||||
identical to the value that is set when you run the SDK environment
|
||||
setup script, and the other line sets :term:`CC` to "gcc", the default
|
||||
GNU compiler on the build host::
|
||||
GNU compiler on the build host:
|
||||
|
||||
.. code-block:: Makefile
|
||||
|
||||
# CC=i586-poky-linux-gcc -m32 -march=i586 --sysroot=/opt/poky/2.5/sysroots/i586-poky-linux
|
||||
# CC="gcc"
|
||||
@@ -306,7 +352,9 @@ example:
|
||||
#. *Make the Project:* Use the ``make`` command to create the binary
|
||||
output file. Because variables are commented out in the Makefile, the
|
||||
value used for :term:`CC` is the value set when the SDK environment setup
|
||||
file was run::
|
||||
file was run:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make
|
||||
i586-poky-linux-gcc -m32 -march=i586 --sysroot=/opt/poky/2.5/sysroots/i586-poky-linux -I . -c main.c
|
||||
@@ -319,7 +367,9 @@ example:
|
||||
|
||||
You can override the :term:`CC` environment variable with the same
|
||||
variable as set from the Makefile by uncommenting the line in the
|
||||
Makefile and running ``make`` again::
|
||||
Makefile and running ``make`` again:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make clean
|
||||
rm -rf *.o
|
||||
@@ -340,7 +390,9 @@ example:
|
||||
variable as part of the command line. Go into the Makefile and
|
||||
re-insert the comment character so that running ``make`` uses the
|
||||
established SDK compiler. However, when you run ``make``, use a
|
||||
command-line argument to set :term:`CC` to "gcc"::
|
||||
command-line argument to set :term:`CC` to "gcc":
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make clean
|
||||
rm -rf *.o
|
||||
@@ -364,7 +416,9 @@ example:
|
||||
environment variable.
|
||||
|
||||
In this last case, edit Makefile again to use the "gcc" compiler but
|
||||
then use the "-e" option on the ``make`` command line::
|
||||
then use the "-e" option on the ``make`` command line:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ make clean
|
||||
rm -rf *.o
|
||||
@@ -389,7 +443,9 @@ example:
|
||||
Makefile.
|
||||
|
||||
#. *Execute Your Project:* To execute the project (i.e. ``target_bin``),
|
||||
use the following command::
|
||||
use the following command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ ./target_bin
|
||||
Hello World!
|
||||
|
||||
14
documentation/security-reference/index.rst
Normal file
@@ -0,0 +1,14 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
================================
|
||||
Yocto Project Security Reference
|
||||
================================
|
||||
|
||||
.. toctree::
|
||||
:caption: Table of Contents
|
||||
:numbered:
|
||||
|
||||
security-team
|
||||
reporting-vulnerabilities
|
||||
|
||||
.. include:: /boilerplate.rst
|
||||
@@ -0,0 +1,85 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Reporting Vulnerabilities
|
||||
*************************
|
||||
|
||||
The Yocto Project and OpenEmbedded are open-source, community-based projects
|
||||
used in numerous products. They assemble multiple other open-source projects,
|
||||
and need to handle security issues and practices both internal (in the code
|
||||
maintained by both projects), and external (maintained by other projects and
|
||||
organizations).
|
||||
|
||||
This manual assembles security-related information concerning the whole
|
||||
ecosystem. It includes information on reporting a potential security issue,
|
||||
the operation of the YP Security team and how to contribute in the
|
||||
related code. It is written to be useful for both security researchers and
|
||||
YP developers.
|
||||
|
||||
How to report a potential security vulnerability?
|
||||
=================================================
|
||||
|
||||
If you would like to report a public issue (for example, one with a released
|
||||
CVE number), please report it using the
|
||||
:yocto_bugs:`Security Bugzilla </enter_bug.cgi?product=Security>`.
|
||||
|
||||
If you are dealing with a not-yet-released issue, or an urgent one, please send
|
||||
a message to security AT yoctoproject DOT org, including as many details as
|
||||
possible: the layer or software module affected, the recipe and its version,
|
||||
and any example code, if available. This mailing list is monitored by the
|
||||
Yocto Project Security team.
|
||||
|
||||
For each layer, you might also look for specific instructions (if any) for
|
||||
reporting potential security issues in the specific ``SECURITY.md`` file at the
|
||||
root of the repository. Instructions on how and where submit a patch are
|
||||
usually available in ``README.md``. If this is your first patch to the
|
||||
Yocto Project/OpenEmbedded, you might want to have a look into the
|
||||
Contributor's Manual section
|
||||
":ref:`contributor-guide/submit-changes:preparing changes for submission`".
|
||||
|
||||
Branches maintained with security fixes
|
||||
---------------------------------------
|
||||
|
||||
See the
|
||||
:ref:`Release process <ref-manual/release-process:Stable Release Process>`
|
||||
documentation for details regarding the policies and maintenance of stable
|
||||
branches.
|
||||
|
||||
The :yocto_home:`Releases </development/releases/>` page contains a list of all
|
||||
releases of the Yocto Project, grouped into current and previous releases.
|
||||
Previous releases are no longer actively maintained with security patches, but
|
||||
well-tested patches may still be accepted for them for significant issues.
|
||||
|
||||
Security-related discussions at the Yocto Project
|
||||
-------------------------------------------------
|
||||
|
||||
We have set up two security-related emails/mailing lists:
|
||||
|
||||
- Public Mailing List: yocto [dash] security [at] yoctoproject[dot] org
|
||||
|
||||
This is a public mailing list for anyone to subscribe to. This list is an
|
||||
open list to discuss public security issues/patches and security-related
|
||||
initiatives. For more information, including subscription information,
|
||||
please see the :yocto_lists:`yocto-security mailing list info page
|
||||
</g/yocto-security>`.
|
||||
|
||||
This list requires moderator approval for new topics to be posted, to avoid
|
||||
private security reports to be posted by mistake.
|
||||
|
||||
- Yocto Project Security Team: security [at] yoctoproject [dot] org
|
||||
|
||||
This is an email for reporting non-published potential vulnerabilities.
|
||||
Emails sent to this address are forwarded to the Yocto Project Security
|
||||
Team members.
|
||||
|
||||
|
||||
What you should do if you find a security vulnerability
|
||||
-------------------------------------------------------
|
||||
|
||||
If you find a security flaw: a crash, an information leakage, or anything that
|
||||
can have a security impact if exploited in any Open Source software built or
|
||||
used by the Yocto Project, please report this to the Yocto Project Security
|
||||
Team. If you prefer to contact the upstream project directly, please send a
|
||||
copy to the security team at the Yocto Project as well. If you believe this is
|
||||
highly sensitive information, please report the vulnerability in a secure way,
|
||||
i.e. encrypt the email and send it to the private list. This ensures that
|
||||
the exploit is not leaked and exploited before a response/fix has been generated.
|
||||
110
documentation/security-reference/security-team.rst
Normal file
@@ -0,0 +1,110 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Security team
|
||||
*************
|
||||
|
||||
The Yocto Project/OpenEmbedded security team coordinates the work on security
|
||||
subjects in the project. All general discussion takes place publicly. The
|
||||
Security Team only uses confidential communication tools to deal with private
|
||||
vulnerability reports before they are released.
|
||||
|
||||
Security team appointment
|
||||
=========================
|
||||
|
||||
The Yocto Project Security Team consists of at least three members. When new
|
||||
members are needed, the Yocto Project Technical Steering Committee (YP TSC)
|
||||
asks for nominations by public channels including a nomination deadline.
|
||||
Self-nominations are possible. When the limit time is
|
||||
reached, the YP TSC posts the list of candidates for the comments of project
|
||||
participants and developers. Comments may be sent publicly or privately to the
|
||||
YP and OE TSCs. The candidates are approved by both YP TSC and OpenEmbedded
|
||||
Technical Steering Committee (OE TSC) and the final list of the team members
|
||||
is announced publicly. The aim is to have people representing technical
|
||||
leadership, security knowledge and infrastructure present with enough people
|
||||
to provide backup/coverage but keep the notification list small enough to
|
||||
minimize information risk and maintain trust.
|
||||
|
||||
YP Security Team members may resign at any time.
|
||||
|
||||
Security Team Operations
|
||||
========================
|
||||
|
||||
The work of the Security Team might require high confidentiality. Team members
|
||||
are individuals selected by merit and do not represent the companies they work
|
||||
for. They do not share information about confidential issues outside of the team
|
||||
and do not hint about ongoing embargoes.
|
||||
|
||||
Team members can bring in domain experts as needed. Those people should be
|
||||
added to individual issues only and adhere to the same standards as the YP
|
||||
Security Team.
|
||||
|
||||
The YP security team organizes its meetings and communication as needed.
|
||||
|
||||
When the YP Security team receives a report about a potential security
|
||||
vulnerability, they quickly analyze and notify the reporter of the result.
|
||||
They might also request more information.
|
||||
|
||||
If the issue is confirmed and affects the code maintained by the YP, they
|
||||
confidentially notify maintainers of that code and work with them to prepare
|
||||
a fix.
|
||||
|
||||
If the issue is confirmed and affects an upstream project, the YP security team
|
||||
notifies the project. Usually, the upstream project analyzes the problem again.
|
||||
If they deem it a real security problem in their software, they develop and
|
||||
release a fix following their security policy. They may want to include the
|
||||
original reporter in the loop. There is also sometimes some coordination for
|
||||
handling patches, backporting patches etc, or just understanding the problem
|
||||
or what caused it.
|
||||
|
||||
When the fix is publicly available, the YP security team member or the
|
||||
package maintainer sends patches against the YP code base, following usual
|
||||
procedures, including public code review.
|
||||
|
||||
What Yocto Security Team does when it receives a security vulnerability
|
||||
=======================================================================
|
||||
|
||||
The YP Security Team team performs a quick analysis and would usually report
|
||||
the flaw to the upstream project. Normally the upstream project analyzes the
|
||||
problem. If they deem it a real security problem in their software, they
|
||||
develop and release a fix following their own security policy. They may want
|
||||
to include the original reporter in the loop. There is also sometimes some
|
||||
coordination for handling patches, backporting patches etc, or just
|
||||
understanding the problem or what caused it.
|
||||
|
||||
The security policy of the upstream project might include a notification to
|
||||
Linux distributions or other important downstream projects in advance to
|
||||
discuss coordinated disclosure. These mailing lists are normally non-public.
|
||||
|
||||
When the upstream project releases a version with the fix, they are responsible
|
||||
for contacting `Mitre <https://www.cve.org/>`__ to get a CVE number assigned and
|
||||
the CVE record published.
|
||||
|
||||
If an upstream project does not respond quickly
|
||||
===============================================
|
||||
|
||||
If an upstream project does not fix the problem in a reasonable time,
|
||||
the Yocto's Security Team will contact other interested parties (usually
|
||||
other distributions) in the community and together try to solve the
|
||||
vulnerability as quickly as possible.
|
||||
|
||||
The Yocto Project Security team adheres to the 90 days disclosure policy
|
||||
by default. An increase of the embargo time is possible when necessary.
|
||||
|
||||
Security Team Members
|
||||
=====================
|
||||
|
||||
For secure communications, please send your messages encrypted using the GPG
|
||||
keys. Remember, message headers are not encrypted so do not include sensitive
|
||||
information in the subject line.
|
||||
|
||||
- Ross Burton: <ross [at] burtonini [dot] com> `Public key <https://keys.openpgp.org/search?q=ross%40burtonini.com>`__
|
||||
|
||||
- Michael Halstead: <mhalstead [at] linuxfoundation [dot] org>
|
||||
`Public key <https://pgp.mit.edu/pks/lookup?op=vindex&search=0x3373170601861969>`__
|
||||
or `Public key <https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xd1f2407285e571ed12a407a73373170601861969>`__
|
||||
|
||||
- Richard Purdie: <richard.purdie [at] linuxfoundation [dot] org> `Public key <https://keys.openpgp.org/search?q=richard.purdie%40linuxfoundation.org>`__
|
||||
|
||||
- Marta Rybczynska: <marta DOT rybczynska [at] syslinbit [dot] com> `Public key <https://keys.openpgp.org/search?q=marta.rybczynska@syslinbit.com>`__
|
||||
|
||||
- Steve Sakoman: <steve [at] sakoman [dot] com> `Public key <https://keys.openpgp.org/search?q=steve%40sakoman.com>`__
|
||||
@@ -84,6 +84,25 @@ test. Here is what you have to do for each recipe:
|
||||
cd test
|
||||
make -k runtest-TESTS
|
||||
|
||||
- *Return an appropriate exit code*: The ``run-ptest`` script must return 0 on
|
||||
success, 1 on failure. This is needed by ``ptest-runner`` to keep track of
|
||||
the successful and failed tests.
|
||||
|
||||
- *Make sure the test prints at least one test result*: The execution of the
|
||||
``run-ptest`` script must result in at least one test result output on the
|
||||
console, with the following format::
|
||||
|
||||
result: testname
|
||||
|
||||
Where ``result`` can be one of ``PASS``, ``SKIP``, or ``FAIL``. ``testname``
|
||||
can be any name.
|
||||
|
||||
There can be as many test results as desired.
|
||||
|
||||
This information is read by the :ref:`ref-classes-testimage` class and
|
||||
:oe_git:`logparser </openembedded-core/tree/meta/lib/oeqa/utils/logparser.py>`
|
||||
module.
|
||||
|
||||
- *Ensure dependencies are met:* If the test adds build or runtime
|
||||
dependencies that normally do not exist for the package (such as
|
||||
requiring "make" to run the test suite), use the
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
DISTRO = "poky"
|
||||
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
|
||||
DISTRO_VERSION = "5.0.14"
|
||||
DISTRO_VERSION = "5.0.15"
|
||||
DISTRO_CODENAME = "scarthgap"
|
||||
SDK_VENDOR = "-pokysdk"
|
||||
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${METADATA_REVISION}', 'snapshot')}"
|
||||
|
||||
@@ -31,7 +31,7 @@ CROSS_CURSES_LIB = "-lncurses -ltinfo"
|
||||
CROSS_CURSES_INC = '-DCURSES_LOC="<curses.h>"'
|
||||
TERMINFO = "${STAGING_DATADIR_NATIVE}/terminfo"
|
||||
|
||||
KCONFIG_CONFIG_COMMAND ??= "menuconfig"
|
||||
KCONFIG_CONFIG_COMMAND ??= "menuconfig ${EXTRA_OEMAKE}"
|
||||
KCONFIG_CONFIG_ENABLE_MENUCONFIG ??= "true"
|
||||
KCONFIG_CONFIG_ROOTDIR ??= "${B}"
|
||||
python do_menuconfig() {
|
||||
|
||||
@@ -101,3 +101,39 @@ addtask addto_recipe_sysroot after do_populate_sysroot
|
||||
do_addto_recipe_sysroot[deptask] = "do_populate_sysroot"
|
||||
|
||||
PATH:prepend = "${COREBASE}/scripts/cross-intercept:"
|
||||
|
||||
#
|
||||
# Cross task outputs can call native dependencies and even when cross
|
||||
# recipe output doesn't change it might produce different results when
|
||||
# the called native dependency is changed, e.g. clang-cross-${TARGET_ARCH}
|
||||
# contains symlink to clang binary from clang-native, but when clang-native
|
||||
# outhash is changed, clang-cross-${TARGET_ARCH} will still be considered
|
||||
# equivalent and target recipes aren't rebuilt with new clang binary, see
|
||||
# work around in https://github.com/kraj/meta-clang/pull/1140 to make target
|
||||
# recipes to depend directly not only on clang-cross-${TARGET_ARCH} but
|
||||
# clang-native as well.
|
||||
#
|
||||
# This can cause poor interactions with hash equivalence, since this recipes
|
||||
# output-changing dependency is "hidden" and downstream task only see that this
|
||||
# recipe has the same outhash and therefore is equivalent. This can result in
|
||||
# different output in different cases.
|
||||
#
|
||||
# To resolve this, unhide the output-changing dependency by adding its unihash
|
||||
# to this tasks outhash calculation. Unfortunately, don't know specifically
|
||||
# know which dependencies are output-changing, so we have to add all of them.
|
||||
#
|
||||
python cross_add_do_populate_sysroot_deps () {
|
||||
current_task = "do_" + d.getVar("BB_CURRENTTASK")
|
||||
if current_task != "do_populate_sysroot":
|
||||
return
|
||||
|
||||
taskdepdata = d.getVar("BB_TASKDEPDATA", False)
|
||||
pn = d.getVar("PN")
|
||||
deps = {
|
||||
dep[0]:dep[6] for dep in taskdepdata.values() if
|
||||
dep[1] == current_task and dep[0] != pn
|
||||
}
|
||||
|
||||
d.setVar("HASHEQUIV_EXTRA_SIGDATA", "\n".join("%s: %s" % (k, deps[k]) for k in sorted(deps.keys())))
|
||||
}
|
||||
SSTATECREATEFUNCS += "cross_add_do_populate_sysroot_deps"
|
||||
|
||||
@@ -24,6 +24,9 @@ TARGET_GOMIPS = "${@go_map_mips(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES
|
||||
TARGET_GOARM:class-native = "7"
|
||||
TARGET_GO386:class-native = "sse2"
|
||||
TARGET_GOMIPS:class-native = "hardfloat"
|
||||
TARGET_GOARM:class-crosssdk = "7"
|
||||
TARGET_GO386:class-crosssdk = "sse2"
|
||||
TARGET_GOMIPS:class-crosssdk = "hardfloat"
|
||||
TARGET_GOTUPLE = "${TARGET_GOOS}_${TARGET_GOARCH}"
|
||||
GO_BUILD_BINDIR = "${@['bin/${HOST_GOTUPLE}','bin'][d.getVar('BUILD_GOTUPLE') == d.getVar('HOST_GOTUPLE')]}"
|
||||
|
||||
|
||||
@@ -697,9 +697,6 @@ addtask savedefconfig after do_configure
|
||||
|
||||
inherit cml1 pkgconfig
|
||||
|
||||
# Need LD, HOSTLDFLAGS and more for config operations
|
||||
KCONFIG_CONFIG_COMMAND:append = " ${EXTRA_OEMAKE}"
|
||||
|
||||
EXPORT_FUNCTIONS do_compile do_transform_kernel do_transform_bundled_initramfs do_install do_configure
|
||||
|
||||
# kernel-base becomes kernel-${KERNEL_VERSION}
|
||||
@@ -873,5 +870,69 @@ addtask deploy after do_populate_sysroot do_packagedata
|
||||
|
||||
EXPORT_FUNCTIONS do_deploy
|
||||
|
||||
python __anonymous() {
|
||||
inherits = (d.getVar("INHERIT") or "")
|
||||
if "create-spdx" in inherits:
|
||||
bb.build.addtask('do_create_kernel_config_spdx', 'do_populate_lic do_deploy', 'do_create_spdx', d)
|
||||
}
|
||||
|
||||
python do_create_kernel_config_spdx() {
|
||||
if d.getVar("SPDX_INCLUDE_KERNEL_CONFIG", True) == "1":
|
||||
import oe.spdx30
|
||||
import oe.spdx30_tasks
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timezone
|
||||
|
||||
pkg_arch = d.getVar("SSTATE_PKGARCH")
|
||||
deploydir = Path(d.getVar("SPDXDEPLOY"))
|
||||
pn = d.getVar("PN")
|
||||
|
||||
config_path = d.expand("${B}/.config")
|
||||
kernel_params = []
|
||||
if not os.path.exists(config_path):
|
||||
bb.warn(f"SPDX: Kernel config file not found at: {config_path}")
|
||||
return
|
||||
|
||||
try:
|
||||
with open(config_path, 'r') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
if "=" in line:
|
||||
key, value = line.split("=", 1)
|
||||
kernel_params.append(oe.spdx30.DictionaryEntry(
|
||||
key=key,
|
||||
value=value.strip('"')
|
||||
))
|
||||
bb.note(f"Parsed {len(kernel_params)} kernel config entries from {config_path}")
|
||||
except Exception as e:
|
||||
bb.error(f"Failed to parse kernel config file: {e}")
|
||||
|
||||
build, build_objset = oe.sbom30.find_root_obj_in_jsonld(
|
||||
d, "recipes", f"recipe-{pn}", oe.spdx30.build_Build
|
||||
)
|
||||
|
||||
kernel_build = build_objset.add_root(
|
||||
oe.spdx30.build_Build(
|
||||
_id=build_objset.new_spdxid("kernel-config"),
|
||||
creationInfo=build_objset.doc.creationInfo,
|
||||
build_buildType="https://openembedded.org/kernel-configuration",
|
||||
build_parameter=kernel_params
|
||||
)
|
||||
)
|
||||
|
||||
oe.spdx30_tasks.set_timestamp_now(d, kernel_build, "build_buildStartTime")
|
||||
|
||||
build_objset.new_relationship(
|
||||
[build],
|
||||
oe.spdx30.RelationshipType.ancestorOf,
|
||||
[kernel_build]
|
||||
)
|
||||
|
||||
oe.sbom30.write_jsonld_doc(d, build_objset, deploydir / pkg_arch / "recipes" / f"recipe-{pn}.spdx.json")
|
||||
}
|
||||
do_create_kernel_config_spdx[depends] = "virtual/kernel:do_configure"
|
||||
|
||||
# Add using Device Tree support
|
||||
inherit kernel-devicetree
|
||||
|
||||
@@ -329,6 +329,7 @@ def rust_gen_target(d, thing, wd, arch):
|
||||
sys = d.getVar('{}_SYS'.format(thing))
|
||||
prefix = d.getVar('{}_PREFIX'.format(thing))
|
||||
rustsys = d.getVar('RUST_{}_SYS'.format(thing))
|
||||
os = d.getVar('{}_OS'.format(thing))
|
||||
|
||||
abi = None
|
||||
cpu = "generic"
|
||||
@@ -368,7 +369,7 @@ def rust_gen_target(d, thing, wd, arch):
|
||||
tspec['target-c-int-width'] = d.getVarFlag('TARGET_C_INT_WIDTH', arch_abi)
|
||||
tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch_abi)
|
||||
tspec['arch'] = arch_to_rust_target_arch(rust_arch)
|
||||
if "baremetal" in d.getVar('TCLIBC'):
|
||||
if "elf" in os:
|
||||
tspec['os'] = "none"
|
||||
else:
|
||||
tspec['os'] = "linux"
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
#
|
||||
# where "<image-name>" is an image like core-image-sato.
|
||||
|
||||
# List of test modules to run, or run all that can be found if unset
|
||||
TESTSDK_SUITES ?= ""
|
||||
|
||||
TESTSDK_CLASS_NAME ?= "oeqa.sdk.testsdk.TestSDK"
|
||||
TESTSDKEXT_CLASS_NAME ?= "oeqa.sdkext.testsdk.TestSDKExt"
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
|
||||
SPDX_VERSION = "2.2"
|
||||
|
||||
DEPLOY_DIR_SPDX ??= "${DEPLOY_DIR}/spdx/${SPDX_VERSION}"
|
||||
|
||||
# The product name that the CVE database uses. Defaults to BPN, but may need to
|
||||
@@ -708,6 +710,7 @@ python do_create_spdx() {
|
||||
|
||||
oe.sbom.write_doc(d, package_doc, pkg_arch, "packages", indent=get_json_indent(d))
|
||||
}
|
||||
do_create_spdx[vardeps] += "CVE_STATUS"
|
||||
do_create_spdx[vardepsexclude] += "BB_NUMBER_THREADS"
|
||||
# NOTE: depending on do_unpack is a hack that is necessary to get it's dependencies for archive the source
|
||||
addtask do_create_spdx after do_package do_packagedata do_unpack do_collect_spdx_deps before do_populate_sdk do_build do_rm_work
|
||||
|
||||
@@ -50,6 +50,17 @@ SPDX_INCLUDE_TIMESTAMPS[doc] = "Include time stamps in SPDX output. This is \
|
||||
useful if you want to know when artifacts were produced and when builds \
|
||||
occurred, but will result in non-reproducible SPDX output"
|
||||
|
||||
SPDX_INCLUDE_KERNEL_CONFIG ??= "0"
|
||||
SPDX_INCLUDE_KERNEL_CONFIG[doc] = "If set to '1', the .config file for the kernel will be parsed \
|
||||
and each CONFIG_* value will be included in the Build.build_parameter list as DictionaryEntry \
|
||||
items. Set to '0' to disable exporting kernel configuration to improve performance or reduce \
|
||||
SPDX document size."
|
||||
|
||||
SPDX_INCLUDE_PACKAGECONFIG ??= "0"
|
||||
SPDX_INCLUDE_PACKAGECONFIG[doc] = "If set to '1', each PACKAGECONFIG feature is recorded in the \
|
||||
build_Build object's build_parameter list as a DictionaryEntry with key \
|
||||
'PACKAGECONFIG:<feature>' and value 'enabled' or 'disabled'"
|
||||
|
||||
SPDX_IMPORTS ??= ""
|
||||
SPDX_IMPORTS[doc] = "SPDX_IMPORTS is the base variable that describes how to \
|
||||
reference external SPDX ids. Each import is defined as a key in this \
|
||||
@@ -117,6 +128,11 @@ SPDX_PACKAGE_VERSION ??= "${PV}"
|
||||
SPDX_PACKAGE_VERSION[doc] = "The version of a package, software_packageVersion \
|
||||
in software_Package"
|
||||
|
||||
SPDX_PACKAGE_URL ??= ""
|
||||
SPDX_PACKAGE_URL[doc] = "Provides a place for the SPDX data creator to record \
|
||||
the package URL string (in accordance with the Package URL specification) for \
|
||||
a software Package."
|
||||
|
||||
IMAGE_CLASSES:append = " create-spdx-image-3.0"
|
||||
SDK_CLASSES += "create-spdx-sdk-3.0"
|
||||
|
||||
@@ -143,6 +159,8 @@ do_create_spdx[vardeps] += "\
|
||||
SPDX_PROFILES \
|
||||
SPDX_NAMESPACE_PREFIX \
|
||||
SPDX_UUID_NAMESPACE \
|
||||
CVE_STATUS \
|
||||
CVE_CHECK_STATUSMAP \
|
||||
"
|
||||
|
||||
addtask do_create_spdx after \
|
||||
|
||||
@@ -107,21 +107,8 @@ CVE_CHECK_LAYER_INCLUDELIST ??= ""
|
||||
CVE_VERSION_SUFFIX ??= ""
|
||||
|
||||
python () {
|
||||
# Fallback all CVEs from CVE_CHECK_IGNORE to CVE_STATUS
|
||||
cve_check_ignore = d.getVar("CVE_CHECK_IGNORE")
|
||||
if cve_check_ignore:
|
||||
bb.warn("CVE_CHECK_IGNORE is deprecated in favor of CVE_STATUS")
|
||||
for cve in (d.getVar("CVE_CHECK_IGNORE") or "").split():
|
||||
d.setVarFlag("CVE_STATUS", cve, "ignored")
|
||||
|
||||
# Process CVE_STATUS_GROUPS to set multiple statuses and optional detail or description at once
|
||||
for cve_status_group in (d.getVar("CVE_STATUS_GROUPS") or "").split():
|
||||
cve_group = d.getVar(cve_status_group)
|
||||
if cve_group is not None:
|
||||
for cve in cve_group.split():
|
||||
d.setVarFlag("CVE_STATUS", cve, d.getVarFlag(cve_status_group, "status"))
|
||||
else:
|
||||
bb.warn("CVE_STATUS_GROUPS contains undefined variable %s" % cve_status_group)
|
||||
from oe.cve_check import extend_cve_status
|
||||
extend_cve_status(d)
|
||||
}
|
||||
|
||||
def generate_json_report(d, out_path, link_path):
|
||||
@@ -200,6 +187,7 @@ python do_cve_check () {
|
||||
}
|
||||
|
||||
addtask cve_check before do_build
|
||||
do_cve_check[vardeps] += "CVE_STATUS CVE_CHECK_STATUSMAP"
|
||||
do_cve_check[depends] = "cve-update-nvd2-native:do_unpack"
|
||||
do_cve_check[nostamp] = "1"
|
||||
|
||||
|
||||
@@ -37,6 +37,11 @@ SPDX_CUSTOM_ANNOTATION_VARS ??= ""
|
||||
|
||||
SPDX_MULTILIB_SSTATE_ARCHS ??= "${SSTATE_ARCHS}"
|
||||
|
||||
python () {
|
||||
from oe.cve_check import extend_cve_status
|
||||
extend_cve_status(d)
|
||||
}
|
||||
|
||||
def create_spdx_source_deps(d):
|
||||
import oe.spdx_common
|
||||
|
||||
|
||||
320
meta/classes/vex.bbclass
Normal file
@@ -0,0 +1,320 @@
|
||||
#
|
||||
# Copyright OpenEmbedded Contributors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
# This class is used to generate metadata needed by external
|
||||
# tools to check for vulnerabilities, for example CVEs.
|
||||
#
|
||||
# In order to use this class just inherit the class in the
|
||||
# local.conf file and it will add the generate_vex task for
|
||||
# every recipe. If an image is build it will generate a report
|
||||
# in DEPLOY_DIR_IMAGE for all the packages used, it will also
|
||||
# generate a file for all recipes used in the build.
|
||||
#
|
||||
# Variables use CVE_CHECK prefix to keep compatibility with
|
||||
# the cve-check class
|
||||
#
|
||||
# Example:
|
||||
# bitbake -c generate_vex openssl
|
||||
# bitbake core-image-sato
|
||||
# bitbake -k -c generate_vex universe
|
||||
#
|
||||
# The product name that the CVE database uses defaults to BPN, but may need to
|
||||
# be overriden per recipe (for example tiff.bb sets CVE_PRODUCT=libtiff).
|
||||
CVE_PRODUCT ??= "${BPN}"
|
||||
CVE_VERSION ??= "${PV}"
|
||||
|
||||
CVE_CHECK_SUMMARY_DIR ?= "${LOG_DIR}/cve"
|
||||
|
||||
CVE_CHECK_SUMMARY_FILE_NAME_JSON = "cve-summary.json"
|
||||
CVE_CHECK_SUMMARY_INDEX_PATH = "${CVE_CHECK_SUMMARY_DIR}/cve-summary-index.txt"
|
||||
|
||||
CVE_CHECK_DIR ??= "${DEPLOY_DIR}/cve"
|
||||
CVE_CHECK_RECIPE_FILE_JSON ?= "${CVE_CHECK_DIR}/${PN}_cve.json"
|
||||
CVE_CHECK_MANIFEST_JSON ?= "${IMGDEPLOYDIR}/${IMAGE_NAME}.json"
|
||||
|
||||
# Skip CVE Check for packages (PN)
|
||||
CVE_CHECK_SKIP_RECIPE ?= ""
|
||||
|
||||
# Replace NVD DB check status for a given CVE. Each of CVE has to be mentioned
|
||||
# separately with optional detail and description for this status.
|
||||
#
|
||||
# CVE_STATUS[CVE-1234-0001] = "not-applicable-platform: Issue only applies on Windows"
|
||||
# CVE_STATUS[CVE-1234-0002] = "fixed-version: Fixed externally"
|
||||
#
|
||||
# Settings the same status and reason for multiple CVEs is possible
|
||||
# via CVE_STATUS_GROUPS variable.
|
||||
#
|
||||
# CVE_STATUS_GROUPS = "CVE_STATUS_WIN CVE_STATUS_PATCHED"
|
||||
#
|
||||
# CVE_STATUS_WIN = "CVE-1234-0001 CVE-1234-0003"
|
||||
# CVE_STATUS_WIN[status] = "not-applicable-platform: Issue only applies on Windows"
|
||||
# CVE_STATUS_PATCHED = "CVE-1234-0002 CVE-1234-0004"
|
||||
# CVE_STATUS_PATCHED[status] = "fixed-version: Fixed externally"
|
||||
#
|
||||
# All possible CVE statuses could be found in cve-check-map.conf
|
||||
# CVE_CHECK_STATUSMAP[not-applicable-platform] = "Ignored"
|
||||
# CVE_CHECK_STATUSMAP[fixed-version] = "Patched"
|
||||
#
|
||||
# CVE_CHECK_IGNORE is deprecated and CVE_STATUS has to be used instead.
|
||||
# Keep CVE_CHECK_IGNORE until other layers migrate to new variables
|
||||
CVE_CHECK_IGNORE ?= ""
|
||||
|
||||
# Layers to be excluded
|
||||
CVE_CHECK_LAYER_EXCLUDELIST ??= ""
|
||||
|
||||
# Layers to be included
|
||||
CVE_CHECK_LAYER_INCLUDELIST ??= ""
|
||||
|
||||
|
||||
# set to "alphabetical" for version using single alphabetical character as increment release
|
||||
CVE_VERSION_SUFFIX ??= ""
|
||||
|
||||
python () {
|
||||
if bb.data.inherits_class("cve-check", d):
|
||||
raise bb.parse.SkipRecipe("Skipping recipe: found incompatible combination of cve-check and vex enabled at the same time.")
|
||||
|
||||
from oe.cve_check import extend_cve_status
|
||||
extend_cve_status(d)
|
||||
}
|
||||
|
||||
def generate_json_report(d, out_path, link_path):
|
||||
if os.path.exists(d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")):
|
||||
import json
|
||||
from oe.cve_check import cve_check_merge_jsons, update_symlinks
|
||||
|
||||
bb.note("Generating JSON CVE summary")
|
||||
index_file = d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")
|
||||
summary = {"version":"1", "package": []}
|
||||
with open(index_file) as f:
|
||||
filename = f.readline()
|
||||
while filename:
|
||||
with open(filename.rstrip()) as j:
|
||||
data = json.load(j)
|
||||
cve_check_merge_jsons(summary, data)
|
||||
filename = f.readline()
|
||||
|
||||
summary["package"].sort(key=lambda d: d['name'])
|
||||
|
||||
with open(out_path, "w") as f:
|
||||
json.dump(summary, f, indent=2)
|
||||
|
||||
update_symlinks(out_path, link_path)
|
||||
|
||||
python vex_save_summary_handler () {
|
||||
import shutil
|
||||
import datetime
|
||||
from oe.cve_check import update_symlinks
|
||||
|
||||
cvelogpath = d.getVar("CVE_CHECK_SUMMARY_DIR")
|
||||
|
||||
bb.utils.mkdirhier(cvelogpath)
|
||||
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
||||
|
||||
json_summary_link_name = os.path.join(cvelogpath, d.getVar("CVE_CHECK_SUMMARY_FILE_NAME_JSON"))
|
||||
json_summary_name = os.path.join(cvelogpath, "cve-summary-%s.json" % (timestamp))
|
||||
generate_json_report(d, json_summary_name, json_summary_link_name)
|
||||
bb.plain("Complete CVE JSON report summary created at: %s" % json_summary_link_name)
|
||||
}
|
||||
|
||||
addhandler vex_save_summary_handler
|
||||
vex_save_summary_handler[eventmask] = "bb.event.BuildCompleted"
|
||||
|
||||
python do_generate_vex () {
|
||||
"""
|
||||
Generate metadata needed for vulnerability checking for
|
||||
the current recipe
|
||||
"""
|
||||
from oe.cve_check import get_patched_cves, decode_cve_status
|
||||
|
||||
cves_status = []
|
||||
products = d.getVar("CVE_PRODUCT").split()
|
||||
for product in products:
|
||||
if ":" in product:
|
||||
_, product = product.split(":", 1)
|
||||
cves_status.append([product, False])
|
||||
|
||||
patched_cves = get_patched_cves(d)
|
||||
cve_data = {}
|
||||
for cve_id in (d.getVarFlags("CVE_STATUS") or {}):
|
||||
mapping, detail, description = decode_cve_status(d, cve_id)
|
||||
if not mapping or not detail:
|
||||
bb.warn(f"Skipping {cve_id} — missing or unknown CVE status")
|
||||
continue
|
||||
cve_data[cve_id] = {
|
||||
"abbrev-status": mapping,
|
||||
"status": detail,
|
||||
"justification": description
|
||||
}
|
||||
patched_cves.discard(cve_id)
|
||||
|
||||
# decode_cve_status is decoding CVE_STATUS, so patch files need to be hardcoded
|
||||
for cve_id in patched_cves:
|
||||
# fix-file-included is not available in scarthgap
|
||||
cve_data[cve_id] = {
|
||||
"abbrev-status": "Patched",
|
||||
"status": "backported-patch",
|
||||
}
|
||||
|
||||
cve_write_data_json(d, cve_data, cves_status)
|
||||
}
|
||||
do_generate_vex[vardeps] += "CVE_STATUS CVE_CHECK_STATUSMAP"
|
||||
|
||||
addtask generate_vex before do_build
|
||||
|
||||
python vex_cleanup () {
|
||||
"""
|
||||
Delete the file used to gather all the CVE information.
|
||||
"""
|
||||
bb.utils.remove(e.data.getVar("CVE_CHECK_SUMMARY_INDEX_PATH"))
|
||||
}
|
||||
|
||||
addhandler vex_cleanup
|
||||
vex_cleanup[eventmask] = "bb.event.BuildCompleted"
|
||||
|
||||
python vex_write_rootfs_manifest () {
|
||||
"""
|
||||
Create VEX/CVE manifest when building an image
|
||||
"""
|
||||
|
||||
import json
|
||||
from oe.rootfs import image_list_installed_packages
|
||||
from oe.cve_check import cve_check_merge_jsons, update_symlinks
|
||||
|
||||
deploy_file_json = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
|
||||
if os.path.exists(deploy_file_json):
|
||||
bb.utils.remove(deploy_file_json)
|
||||
|
||||
# Create a list of relevant recipies
|
||||
recipies = set()
|
||||
for pkg in list(image_list_installed_packages(d)):
|
||||
pkg_info = os.path.join(d.getVar('PKGDATA_DIR'),
|
||||
'runtime-reverse', pkg)
|
||||
pkg_data = oe.packagedata.read_pkgdatafile(pkg_info)
|
||||
recipies.add(pkg_data["PN"])
|
||||
|
||||
bb.note("Writing rootfs VEX manifest")
|
||||
deploy_dir = d.getVar("IMGDEPLOYDIR")
|
||||
link_name = d.getVar("IMAGE_LINK_NAME")
|
||||
|
||||
json_data = {"version":"1", "package": []}
|
||||
text_data = ""
|
||||
|
||||
save_pn = d.getVar("PN")
|
||||
|
||||
for pkg in recipies:
|
||||
# To be able to use the CVE_CHECK_RECIPE_FILE_JSON variable we have to evaluate
|
||||
# it with the different PN names set each time.
|
||||
d.setVar("PN", pkg)
|
||||
|
||||
pkgfilepath = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
|
||||
if os.path.exists(pkgfilepath):
|
||||
with open(pkgfilepath) as j:
|
||||
data = json.load(j)
|
||||
cve_check_merge_jsons(json_data, data)
|
||||
else:
|
||||
bb.warn("Missing cve file for %s" % pkg)
|
||||
|
||||
d.setVar("PN", save_pn)
|
||||
|
||||
link_path = os.path.join(deploy_dir, "%s.json" % link_name)
|
||||
manifest_name = d.getVar("CVE_CHECK_MANIFEST_JSON")
|
||||
|
||||
with open(manifest_name, "w") as f:
|
||||
json.dump(json_data, f, indent=2)
|
||||
|
||||
update_symlinks(manifest_name, link_path)
|
||||
bb.plain("Image VEX JSON report stored in: %s" % manifest_name)
|
||||
}
|
||||
|
||||
ROOTFS_POSTPROCESS_COMMAND:prepend = "vex_write_rootfs_manifest; "
|
||||
do_rootfs[recrdeptask] += "do_generate_vex "
|
||||
do_populate_sdk[recrdeptask] += "do_generate_vex "
|
||||
|
||||
def cve_write_data_json(d, cve_data, cve_status):
|
||||
"""
|
||||
Prepare CVE data for the JSON format, then write it.
|
||||
Done for each recipe.
|
||||
"""
|
||||
|
||||
from oe.cve_check import get_cpe_ids
|
||||
import json
|
||||
|
||||
output = {"version":"1", "package": []}
|
||||
nvd_link = "https://nvd.nist.gov/vuln/detail/"
|
||||
|
||||
fdir_name = d.getVar("FILE_DIRNAME")
|
||||
layer = fdir_name.split("/")[-3]
|
||||
|
||||
include_layers = d.getVar("CVE_CHECK_LAYER_INCLUDELIST").split()
|
||||
exclude_layers = d.getVar("CVE_CHECK_LAYER_EXCLUDELIST").split()
|
||||
|
||||
if exclude_layers and layer in exclude_layers:
|
||||
return
|
||||
|
||||
if include_layers and layer not in include_layers:
|
||||
return
|
||||
|
||||
product_data = []
|
||||
for s in cve_status:
|
||||
p = {"product": s[0], "cvesInRecord": "Yes"}
|
||||
if s[1] == False:
|
||||
p["cvesInRecord"] = "No"
|
||||
product_data.append(p)
|
||||
product_data = list({p['product']:p for p in product_data}.values())
|
||||
|
||||
package_version = "%s%s" % (d.getVar("EXTENDPE"), d.getVar("PV"))
|
||||
cpes = get_cpe_ids(d.getVar("CVE_PRODUCT"), d.getVar("CVE_VERSION"))
|
||||
package_data = {
|
||||
"name" : d.getVar("PN"),
|
||||
"layer" : layer,
|
||||
"version" : package_version,
|
||||
"products": product_data,
|
||||
"cpes": cpes
|
||||
}
|
||||
|
||||
cve_list = []
|
||||
|
||||
for cve in sorted(cve_data):
|
||||
issue_link = "%s%s" % (nvd_link, cve)
|
||||
|
||||
cve_item = {
|
||||
"id" : cve,
|
||||
"status" : cve_data[cve]["abbrev-status"],
|
||||
"link": issue_link,
|
||||
}
|
||||
if 'NVD-summary' in cve_data[cve]:
|
||||
cve_item["summary"] = cve_data[cve]["NVD-summary"]
|
||||
cve_item["scorev2"] = cve_data[cve]["NVD-scorev2"]
|
||||
cve_item["scorev3"] = cve_data[cve]["NVD-scorev3"]
|
||||
cve_item["vector"] = cve_data[cve]["NVD-vector"]
|
||||
cve_item["vectorString"] = cve_data[cve]["NVD-vectorString"]
|
||||
if 'status' in cve_data[cve]:
|
||||
cve_item["detail"] = cve_data[cve]["status"]
|
||||
if 'justification' in cve_data[cve]:
|
||||
cve_item["description"] = cve_data[cve]["justification"]
|
||||
if 'resource' in cve_data[cve]:
|
||||
cve_item["patch-file"] = cve_data[cve]["resource"]
|
||||
cve_list.append(cve_item)
|
||||
|
||||
package_data["issue"] = cve_list
|
||||
output["package"].append(package_data)
|
||||
|
||||
deploy_file = d.getVar("CVE_CHECK_RECIPE_FILE_JSON")
|
||||
|
||||
write_string = json.dumps(output, indent=2)
|
||||
|
||||
cvelogpath = d.getVar("CVE_CHECK_SUMMARY_DIR")
|
||||
index_path = d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")
|
||||
bb.utils.mkdirhier(cvelogpath)
|
||||
bb.utils.mkdirhier(os.path.dirname(deploy_file))
|
||||
fragment_file = os.path.basename(deploy_file)
|
||||
fragment_path = os.path.join(cvelogpath, fragment_file)
|
||||
with open(fragment_path, "w") as f:
|
||||
f.write(write_string)
|
||||
with open(deploy_file, "w") as f:
|
||||
f.write(write_string)
|
||||
with open(index_path, "a+") as f:
|
||||
f.write("%s\n" % fragment_path)
|
||||
@@ -243,3 +243,25 @@ def decode_cve_status(d, cve):
|
||||
status_mapping = "Unpatched"
|
||||
|
||||
return (status_mapping, detail, description)
|
||||
|
||||
def extend_cve_status(d):
|
||||
# do this only once in case multiple classes use this
|
||||
if d.getVar("CVE_STATUS_EXTENDED"):
|
||||
return
|
||||
d.setVar("CVE_STATUS_EXTENDED", "1")
|
||||
|
||||
# Fallback all CVEs from CVE_CHECK_IGNORE to CVE_STATUS
|
||||
cve_check_ignore = d.getVar("CVE_CHECK_IGNORE")
|
||||
if cve_check_ignore:
|
||||
bb.warn("CVE_CHECK_IGNORE is deprecated in favor of CVE_STATUS")
|
||||
for cve in (d.getVar("CVE_CHECK_IGNORE") or "").split():
|
||||
d.setVarFlag("CVE_STATUS", cve, "ignored")
|
||||
|
||||
# Process CVE_STATUS_GROUPS to set multiple statuses and optional detail or description at once
|
||||
for cve_status_group in (d.getVar("CVE_STATUS_GROUPS") or "").split():
|
||||
cve_group = d.getVar(cve_status_group)
|
||||
if cve_group is not None:
|
||||
for cve in cve_group.split():
|
||||
d.setVarFlag("CVE_STATUS", cve, d.getVarFlag(cve_status_group, "status"))
|
||||
else:
|
||||
bb.warn("CVE_STATUS_GROUPS contains undefined variable %s" % cve_status_group)
|
||||
|
||||
@@ -148,7 +148,8 @@ def get_extra_sdkinfo(sstate_dir):
|
||||
extra_info['filesizes'] = {}
|
||||
for root, _, files in os.walk(sstate_dir):
|
||||
for fn in files:
|
||||
if fn.endswith('.tgz'):
|
||||
# Note that this makes an assumption about the sstate filenames
|
||||
if '.tar.' in fn and not fn.endswith('.siginfo'):
|
||||
fsize = int(math.ceil(float(os.path.getsize(os.path.join(root, fn))) / 1024))
|
||||
task = fn.rsplit(':',1)[1].split('_',1)[1].split(',')[0]
|
||||
origtotal = extra_info['tasksizes'].get(task, 0)
|
||||
|
||||
@@ -356,77 +356,78 @@ def add_download_files(d, objset):
|
||||
for download_idx, src_uri in enumerate(urls):
|
||||
fd = fetch.ud[src_uri]
|
||||
|
||||
file_name = os.path.basename(fetch.localpath(src_uri))
|
||||
if oe.patch.patch_path(src_uri, fetch, "", expand=False):
|
||||
primary_purpose = oe.spdx30.software_SoftwarePurpose.patch
|
||||
else:
|
||||
primary_purpose = oe.spdx30.software_SoftwarePurpose.source
|
||||
for name in fd.names:
|
||||
file_name = os.path.basename(fetch.localpath(src_uri))
|
||||
if oe.patch.patch_path(src_uri, fetch, "", expand=False):
|
||||
primary_purpose = oe.spdx30.software_SoftwarePurpose.patch
|
||||
else:
|
||||
primary_purpose = oe.spdx30.software_SoftwarePurpose.source
|
||||
|
||||
if fd.type == "file":
|
||||
if os.path.isdir(fd.localpath):
|
||||
walk_idx = 1
|
||||
for root, dirs, files in os.walk(fd.localpath, onerror=walk_error):
|
||||
dirs.sort()
|
||||
files.sort()
|
||||
for f in files:
|
||||
f_path = os.path.join(root, f)
|
||||
if os.path.islink(f_path):
|
||||
# TODO: SPDX doesn't support symlinks yet
|
||||
continue
|
||||
if fd.type == "file":
|
||||
if os.path.isdir(fd.localpath):
|
||||
walk_idx = 1
|
||||
for root, dirs, files in os.walk(fd.localpath, onerror=walk_error):
|
||||
dirs.sort()
|
||||
files.sort()
|
||||
for f in files:
|
||||
f_path = os.path.join(root, f)
|
||||
if os.path.islink(f_path):
|
||||
# TODO: SPDX doesn't support symlinks yet
|
||||
continue
|
||||
|
||||
file = objset.new_file(
|
||||
objset.new_spdxid(
|
||||
"source", str(download_idx + 1), str(walk_idx)
|
||||
),
|
||||
os.path.join(
|
||||
file_name, os.path.relpath(f_path, fd.localpath)
|
||||
),
|
||||
f_path,
|
||||
purposes=[primary_purpose],
|
||||
)
|
||||
file = objset.new_file(
|
||||
objset.new_spdxid(
|
||||
"source", str(download_idx + 1), str(walk_idx)
|
||||
),
|
||||
os.path.join(
|
||||
file_name, os.path.relpath(f_path, fd.localpath)
|
||||
),
|
||||
f_path,
|
||||
purposes=[primary_purpose],
|
||||
)
|
||||
|
||||
inputs.add(file)
|
||||
walk_idx += 1
|
||||
inputs.add(file)
|
||||
walk_idx += 1
|
||||
|
||||
else:
|
||||
file = objset.new_file(
|
||||
objset.new_spdxid("source", str(download_idx + 1)),
|
||||
file_name,
|
||||
fd.localpath,
|
||||
purposes=[primary_purpose],
|
||||
)
|
||||
inputs.add(file)
|
||||
|
||||
else:
|
||||
file = objset.new_file(
|
||||
objset.new_spdxid("source", str(download_idx + 1)),
|
||||
file_name,
|
||||
fd.localpath,
|
||||
purposes=[primary_purpose],
|
||||
)
|
||||
inputs.add(file)
|
||||
|
||||
else:
|
||||
dl = objset.add(
|
||||
oe.spdx30.software_Package(
|
||||
_id=objset.new_spdxid("source", str(download_idx + 1)),
|
||||
creationInfo=objset.doc.creationInfo,
|
||||
name=file_name,
|
||||
software_primaryPurpose=primary_purpose,
|
||||
software_downloadLocation=oe.spdx_common.fetch_data_to_uri(
|
||||
fd, fd.names[0]
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
if fd.method.supports_checksum(fd):
|
||||
# TODO Need something better than hard coding this
|
||||
for checksum_id in ["sha256", "sha1"]:
|
||||
expected_checksum = getattr(
|
||||
fd, "%s_expected" % checksum_id, None
|
||||
dl = objset.add(
|
||||
oe.spdx30.software_Package(
|
||||
_id=objset.new_spdxid("source", str(download_idx + 1)),
|
||||
creationInfo=objset.doc.creationInfo,
|
||||
name=file_name,
|
||||
software_primaryPurpose=primary_purpose,
|
||||
software_downloadLocation=oe.spdx_common.fetch_data_to_uri(
|
||||
fd, name
|
||||
),
|
||||
)
|
||||
if expected_checksum is None:
|
||||
continue
|
||||
)
|
||||
|
||||
dl.verifiedUsing.append(
|
||||
oe.spdx30.Hash(
|
||||
algorithm=getattr(oe.spdx30.HashAlgorithm, checksum_id),
|
||||
hashValue=expected_checksum,
|
||||
if fd.method.supports_checksum(fd):
|
||||
# TODO Need something better than hard coding this
|
||||
for checksum_id in ["sha256", "sha1"]:
|
||||
expected_checksum = getattr(
|
||||
fd, "%s_expected" % checksum_id, None
|
||||
)
|
||||
)
|
||||
if expected_checksum is None:
|
||||
continue
|
||||
|
||||
inputs.add(dl)
|
||||
dl.verifiedUsing.append(
|
||||
oe.spdx30.Hash(
|
||||
algorithm=getattr(oe.spdx30.HashAlgorithm, checksum_id),
|
||||
hashValue=expected_checksum,
|
||||
)
|
||||
)
|
||||
|
||||
inputs.add(dl)
|
||||
|
||||
return inputs
|
||||
|
||||
@@ -452,6 +453,22 @@ def set_purposes(d, element, *var_names, force_purposes=[]):
|
||||
]
|
||||
|
||||
|
||||
def _get_cves_info(d):
|
||||
patched_cves = oe.cve_check.get_patched_cves(d)
|
||||
for cve_id in (d.getVarFlags("CVE_STATUS") or {}):
|
||||
mapping, detail, description = oe.cve_check.decode_cve_status(d, cve_id)
|
||||
if not mapping or not detail:
|
||||
bb.warn(f"Skipping {cve_id} — missing or unknown CVE status")
|
||||
continue
|
||||
yield cve_id, mapping, detail, description
|
||||
patched_cves.discard(cve_id)
|
||||
|
||||
# decode_cve_status is decoding CVE_STATUS, so patch files need to be hardcoded
|
||||
for cve_id in patched_cves:
|
||||
# fix-file-included is not available in scarthgap
|
||||
yield cve_id, "Patched", "backported-patch", None
|
||||
|
||||
|
||||
def create_spdx(d):
|
||||
def set_var_field(var, obj, name, package=None):
|
||||
val = None
|
||||
@@ -501,14 +518,7 @@ def create_spdx(d):
|
||||
# Add CVEs
|
||||
cve_by_status = {}
|
||||
if include_vex != "none":
|
||||
patched_cves = oe.cve_check.get_patched_cves(d)
|
||||
for cve_id in patched_cves:
|
||||
mapping, detail, description = oe.cve_check.decode_cve_status(d, cve_id)
|
||||
|
||||
if not mapping or not detail:
|
||||
bb.warn(f"Skipping {cve_id} — missing or unknown CVE status")
|
||||
continue
|
||||
|
||||
for cve_id, mapping, detail, description in _get_cves_info(d):
|
||||
# If this CVE is fixed upstream, skip it unless all CVEs are
|
||||
# specified.
|
||||
if (
|
||||
@@ -626,6 +636,14 @@ def create_spdx(d):
|
||||
set_var_field("SUMMARY", spdx_package, "summary", package=package)
|
||||
set_var_field("DESCRIPTION", spdx_package, "description", package=package)
|
||||
|
||||
if d.getVar("SPDX_PACKAGE_URL:%s" % package) or d.getVar("SPDX_PACKAGE_URL"):
|
||||
set_var_field(
|
||||
"SPDX_PACKAGE_URL",
|
||||
spdx_package,
|
||||
"software_packageUrl",
|
||||
package=package
|
||||
)
|
||||
|
||||
pkg_objset.new_scoped_relationship(
|
||||
[oe.sbom30.get_element_link_id(build)],
|
||||
oe.spdx30.RelationshipType.hasOutput,
|
||||
@@ -791,6 +809,26 @@ def create_spdx(d):
|
||||
sorted(list(build_inputs)) + sorted(list(debug_source_ids)),
|
||||
)
|
||||
|
||||
if d.getVar("SPDX_INCLUDE_PACKAGECONFIG", True) != "0":
|
||||
packageconfig = (d.getVar("PACKAGECONFIG") or "").split()
|
||||
all_features = (d.getVarFlags("PACKAGECONFIG") or {}).keys()
|
||||
|
||||
if all_features:
|
||||
enabled = set(packageconfig)
|
||||
all_features_set = set(all_features)
|
||||
disabled = all_features_set - enabled
|
||||
|
||||
for feature in sorted(all_features):
|
||||
status = "enabled" if feature in enabled else "disabled"
|
||||
build.build_parameter.append(
|
||||
oe.spdx30.DictionaryEntry(
|
||||
key=f"PACKAGECONFIG:{feature}",
|
||||
value=status
|
||||
)
|
||||
)
|
||||
|
||||
bb.note(f"Added PACKAGECONFIG entries: {len(enabled)} enabled, {len(disabled)} disabled")
|
||||
|
||||
oe.sbom30.write_recipe_jsonld_doc(d, build_objset, "recipes", deploydir)
|
||||
|
||||
|
||||
|
||||
@@ -239,6 +239,6 @@ def fetch_data_to_uri(fd, name):
|
||||
uri = uri + "://" + fd.host + fd.path
|
||||
|
||||
if fd.method.supports_srcrev():
|
||||
uri = uri + "@" + fd.revision
|
||||
uri = uri + "@" + fd.revisions[name]
|
||||
|
||||
return uri
|
||||
|
||||
7
meta/lib/oeqa/files/test.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello from Go!")
|
||||
}
|
||||
@@ -4,10 +4,76 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
import os
|
||||
from oeqa.runtime.case import OERuntimeTestCase
|
||||
from oeqa.core.decorator.depends import OETestDepends
|
||||
from oeqa.runtime.decorator.package import OEHasPackage
|
||||
|
||||
class GoCompileTest(OERuntimeTestCase):
|
||||
|
||||
@classmethod
|
||||
def setUp(cls):
|
||||
dst = '/tmp/'
|
||||
src = os.path.join(cls.tc.files_dir, 'test.go')
|
||||
cls.tc.target.copyTo(src, dst)
|
||||
|
||||
@classmethod
|
||||
def tearDown(cls):
|
||||
files = '/tmp/test.go /tmp/test'
|
||||
cls.tc.target.run('rm %s' % files)
|
||||
dirs = '/tmp/hello-go'
|
||||
cls.tc.target.run('rm -r %s' % dirs)
|
||||
|
||||
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
||||
@OEHasPackage('go')
|
||||
@OEHasPackage('go-runtime')
|
||||
@OEHasPackage('go-runtime-dev')
|
||||
def test_go_compile(self):
|
||||
# Check if go is available
|
||||
status, output = self.target.run('which go')
|
||||
if status != 0:
|
||||
self.skipTest('go command not found, output: %s' % output)
|
||||
|
||||
# Compile the simple Go program
|
||||
status, output = self.target.run('go build -o /tmp/test /tmp/test.go')
|
||||
msg = 'go compile failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
# Run the compiled program
|
||||
status, output = self.target.run('/tmp/test')
|
||||
msg = 'running compiled file failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
||||
@OEHasPackage('go')
|
||||
@OEHasPackage('go-runtime')
|
||||
@OEHasPackage('go-runtime-dev')
|
||||
def test_go_module(self):
|
||||
# Check if go is available
|
||||
status, output = self.target.run('which go')
|
||||
if status != 0:
|
||||
self.skipTest('go command not found, output: %s' % output)
|
||||
|
||||
# Create a simple Go module
|
||||
status, output = self.target.run('mkdir -p /tmp/hello-go')
|
||||
msg = 'mkdir failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
# Copy the existing test.go file to the module
|
||||
status, output = self.target.run('cp /tmp/test.go /tmp/hello-go/main.go')
|
||||
msg = 'copying test.go failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
# Build the module
|
||||
status, output = self.target.run('cd /tmp/hello-go && go build -o hello main.go')
|
||||
msg = 'go build failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
# Run the module
|
||||
status, output = self.target.run('cd /tmp/hello-go && ./hello')
|
||||
msg = 'running go module failed, output: %s' % output
|
||||
self.assertEqual(status, 0, msg=msg)
|
||||
|
||||
class GoHelloworldTest(OERuntimeTestCase):
|
||||
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
||||
@OEHasPackage(['go-helloworld'])
|
||||
|
||||
@@ -10,6 +10,7 @@ import tempfile
|
||||
import unittest
|
||||
|
||||
from oeqa.sdk.case import OESDKTestCase
|
||||
from oeqa.sdkext.context import OESDKExtTestContext
|
||||
from oeqa.utils.subprocesstweak import errors_have_output
|
||||
errors_have_output()
|
||||
|
||||
@@ -22,6 +23,9 @@ class EpoxyTest(OESDKTestCase):
|
||||
if libc in [ 'newlib' ]:
|
||||
raise unittest.SkipTest("MesonTest class: SDK doesn't contain a supported C library")
|
||||
|
||||
if isinstance(self.tc, OESDKExtTestContext):
|
||||
self.skipTest(f"{self.id()} does not support eSDK (https://bugzilla.yoctoproject.org/show_bug.cgi?id=15854)")
|
||||
|
||||
if not (self.tc.hasHostPackage("nativesdk-meson") or
|
||||
self.tc.hasHostPackage("meson-native")):
|
||||
raise unittest.SkipTest("EpoxyTest class: SDK doesn't contain Meson")
|
||||
|
||||
107
meta/lib/oeqa/sdk/cases/go.py
Normal file
@@ -0,0 +1,107 @@
|
||||
#
|
||||
# Copyright OpenEmbedded Contributors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import unittest
|
||||
|
||||
from oeqa.core.utils.path import remove_safe
|
||||
from oeqa.sdk.case import OESDKTestCase
|
||||
|
||||
from oeqa.utils.subprocesstweak import errors_have_output
|
||||
from oe.go import map_arch
|
||||
errors_have_output()
|
||||
|
||||
class GoCompileTest(OESDKTestCase):
|
||||
td_vars = ['MACHINE', 'TARGET_ARCH']
|
||||
|
||||
@classmethod
|
||||
def setUpClass(self):
|
||||
# Copy test.go file to SDK directory (same as GCC test uses files_dir)
|
||||
shutil.copyfile(os.path.join(self.tc.files_dir, 'test.go'),
|
||||
os.path.join(self.tc.sdk_dir, 'test.go'))
|
||||
|
||||
def setUp(self):
|
||||
translated_target_arch = self.td.get("TRANSLATED_TARGET_ARCH")
|
||||
# Check for go-cross-canadian package (uses target architecture)
|
||||
if not self.tc.hasHostPackage("go-cross-canadian-%s" % translated_target_arch):
|
||||
raise unittest.SkipTest("GoCompileTest class: SDK doesn't contain a Go cross-canadian toolchain")
|
||||
|
||||
# Additional runtime check for go command availability
|
||||
try:
|
||||
self._run('which go')
|
||||
except Exception as e:
|
||||
raise unittest.SkipTest("GoCompileTest class: go command not available: %s" % str(e))
|
||||
|
||||
def test_go_build(self):
|
||||
"""Test Go build command (native compilation)"""
|
||||
self._run('cd %s; go build -o test test.go' % self.tc.sdk_dir)
|
||||
|
||||
def test_go_module(self):
|
||||
"""Test Go module creation and building"""
|
||||
# Create a simple Go module
|
||||
self._run('cd %s; go mod init hello-go' % self.tc.sdk_dir)
|
||||
self._run('cd %s; go build -o hello-go' % self.tc.sdk_dir)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(self):
|
||||
files = [os.path.join(self.tc.sdk_dir, f) \
|
||||
for f in ['test.go', 'test', 'hello-go', 'go.mod', 'go.sum']]
|
||||
for f in files:
|
||||
remove_safe(f)
|
||||
|
||||
class GoHostCompileTest(OESDKTestCase):
|
||||
td_vars = ['MACHINE', 'SDK_SYS', 'TARGET_ARCH']
|
||||
|
||||
@classmethod
|
||||
def setUpClass(self):
|
||||
# Copy test.go file to SDK directory (same as GCC test uses files_dir)
|
||||
shutil.copyfile(os.path.join(self.tc.files_dir, 'test.go'),
|
||||
os.path.join(self.tc.sdk_dir, 'test.go'))
|
||||
|
||||
def setUp(self):
|
||||
translated_target_arch = self.td.get("TRANSLATED_TARGET_ARCH")
|
||||
# Check for go-cross-canadian package (uses target architecture)
|
||||
if not self.tc.hasHostPackage("go-cross-canadian-%s" % translated_target_arch):
|
||||
raise unittest.SkipTest("GoHostCompileTest class: SDK doesn't contain a Go cross-canadian toolchain")
|
||||
|
||||
# Additional runtime check for go command availability
|
||||
try:
|
||||
self._run('which go')
|
||||
except Exception as e:
|
||||
raise unittest.SkipTest("GoHostCompileTest class: go command not available: %s" % str(e))
|
||||
|
||||
def _get_go_arch(self):
|
||||
"""Get Go architecture from SDK_SYS"""
|
||||
sdksys = self.td.get("SDK_SYS")
|
||||
arch = sdksys.split('-')[0]
|
||||
|
||||
# Use mapping for other architectures
|
||||
return map_arch(arch)
|
||||
|
||||
def test_go_cross_compile(self):
|
||||
"""Test Go cross-compilation for target"""
|
||||
goarch = self._get_go_arch()
|
||||
self._run('cd %s; GOOS=linux GOARCH=%s go build -o test-%s test.go' % (self.tc.sdk_dir, goarch, goarch))
|
||||
|
||||
def test_go_module_cross_compile(self):
|
||||
"""Test Go module cross-compilation"""
|
||||
goarch = self._get_go_arch()
|
||||
self._run('cd %s; go mod init hello-go' % self.tc.sdk_dir)
|
||||
self._run('cd %s; GOOS=linux GOARCH=%s go build -o hello-go-%s' % (self.tc.sdk_dir, goarch, goarch))
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(self):
|
||||
# Clean up files with dynamic architecture names
|
||||
files = [os.path.join(self.tc.sdk_dir, f) \
|
||||
for f in ['test.go', 'go.mod', 'go.sum']]
|
||||
# Add common architecture-specific files that might be created
|
||||
common_archs = ['arm64', 'arm', 'amd64', '386', 'mips', 'mipsle', 'ppc64', 'ppc64le', 'riscv64']
|
||||
for arch in common_archs:
|
||||
files.extend([os.path.join(self.tc.sdk_dir, f) \
|
||||
for f in ['test-%s' % arch, 'hello-go-%s' % arch]])
|
||||
for f in files:
|
||||
remove_safe(f)
|
||||
@@ -114,7 +114,8 @@ class TestSDK(TestSDKBase):
|
||||
host_pkg_manifest=host_pkg_manifest, **context_args)
|
||||
|
||||
try:
|
||||
tc.loadTests(self.context_executor_class.default_cases)
|
||||
modules = (d.getVar("TESTSDK_SUITES") or "").split()
|
||||
tc.loadTests(self.context_executor_class.default_cases, modules)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
bb.fatal("Loading tests failed:\n%s" % traceback.format_exc())
|
||||
|
||||
@@ -82,7 +82,8 @@ class TestSDKExt(TestSDKBase):
|
||||
host_pkg_manifest=host_pkg_manifest)
|
||||
|
||||
try:
|
||||
tc.loadTests(OESDKExtTestContextExecutor.default_cases)
|
||||
modules = (d.getVar("TESTSDK_SUITES") or "").split()
|
||||
tc.loadTests(OESDKExtTestContextExecutor.default_cases, modules)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
bb.fatal("Loading tests failed:\n%s" % traceback.format_exc())
|
||||
|
||||
@@ -286,3 +286,60 @@ class SPDX30Check(SPDX3CheckBase, OESelftestTestCase):
|
||||
break
|
||||
else:
|
||||
self.assertTrue(False, "Unable to find imported Host SpdxID")
|
||||
|
||||
def test_kernel_config_spdx(self):
|
||||
kernel_recipe = get_bb_var("PREFERRED_PROVIDER_virtual/kernel")
|
||||
spdx_file = f"recipe-{kernel_recipe}.spdx.json"
|
||||
spdx_path = f"{{DEPLOY_DIR_SPDX}}/{{SSTATE_PKGARCH}}/recipes/{spdx_file}"
|
||||
|
||||
# Make sure kernel is configured first
|
||||
bitbake(f"-c configure {kernel_recipe}")
|
||||
|
||||
objset = self.check_recipe_spdx(
|
||||
kernel_recipe,
|
||||
spdx_path,
|
||||
task="do_create_kernel_config_spdx",
|
||||
extraconf="""\
|
||||
INHERIT += "create-spdx"
|
||||
SPDX_INCLUDE_KERNEL_CONFIG = "1"
|
||||
""",
|
||||
)
|
||||
|
||||
# Check that at least one CONFIG_* entry exists
|
||||
found_kernel_config = False
|
||||
for build_obj in objset.foreach_type(oe.spdx30.build_Build):
|
||||
if getattr(build_obj, "build_buildType", "") == "https://openembedded.org/kernel-configuration":
|
||||
found_kernel_config = True
|
||||
self.assertTrue(
|
||||
len(getattr(build_obj, "build_parameter", [])) > 0,
|
||||
"Kernel configuration build_Build has no CONFIG_* entries"
|
||||
)
|
||||
break
|
||||
|
||||
self.assertTrue(found_kernel_config, "Kernel configuration build_Build not found in SPDX output")
|
||||
|
||||
def test_packageconfig_spdx(self):
|
||||
objset = self.check_recipe_spdx(
|
||||
"tar",
|
||||
"{DEPLOY_DIR_SPDX}/{SSTATE_PKGARCH}/recipes/recipe-tar.spdx.json",
|
||||
extraconf="""\
|
||||
SPDX_INCLUDE_PACKAGECONFIG = "1"
|
||||
""",
|
||||
)
|
||||
|
||||
found_entries = []
|
||||
for build_obj in objset.foreach_type(oe.spdx30.build_Build):
|
||||
for param in getattr(build_obj, "build_parameter", []):
|
||||
if param.key.startswith("PACKAGECONFIG:"):
|
||||
found_entries.append((param.key, param.value))
|
||||
|
||||
self.assertTrue(
|
||||
found_entries,
|
||||
"No PACKAGECONFIG entries found in SPDX output for 'tar'"
|
||||
)
|
||||
|
||||
for key, value in found_entries:
|
||||
self.assertIn(
|
||||
value, ["enabled", "disabled"],
|
||||
f"Unexpected PACKAGECONFIG value '{value}' for {key}"
|
||||
)
|
||||
|
||||
41
meta/recipes-bsp/grub/files/CVE-2025-54770.patch
Normal file
@@ -0,0 +1,41 @@
|
||||
From 80e0e9b2558c40fb108ae7a869362566eb4c1ead Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Frauendorfer | Miray Software <tf@miray.de>
|
||||
Date: Fri, 9 May 2025 14:20:47 +0200
|
||||
Subject: [PATCH] net/net: Unregister net_set_vlan command on unload
|
||||
|
||||
The commit 954c48b9c (net/net: Add net_set_vlan command) added command
|
||||
net_set_vlan to the net module. Unfortunately the commit only added the
|
||||
grub_register_command() call on module load but missed the
|
||||
grub_unregister_command() on unload. Let's fix this.
|
||||
|
||||
Fixes: CVE-2025-54770
|
||||
Fixes: 954c48b9c (net/net: Add net_set_vlan command)
|
||||
|
||||
CVE: CVE-2025-54770
|
||||
|
||||
Upstream-Status: Backport
|
||||
[https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=10e58a14db20e17d1b6a39abe38df01fef98e29d]
|
||||
|
||||
Reported-by: Thomas Frauendorfer | Miray Software <tf@miray.de>
|
||||
Signed-off-by: Thomas Frauendorfer | Miray Software <tf@miray.de>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
|
||||
---
|
||||
grub-core/net/net.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/grub-core/net/net.c b/grub-core/net/net.c
|
||||
index 2b45c27d1..05f11be08 100644
|
||||
--- a/grub-core/net/net.c
|
||||
+++ b/grub-core/net/net.c
|
||||
@@ -2080,6 +2080,7 @@ GRUB_MOD_FINI(net)
|
||||
grub_unregister_command (cmd_deladdr);
|
||||
grub_unregister_command (cmd_addroute);
|
||||
grub_unregister_command (cmd_delroute);
|
||||
+ grub_unregister_command (cmd_setvlan);
|
||||
grub_unregister_command (cmd_lsroutes);
|
||||
grub_unregister_command (cmd_lscards);
|
||||
grub_unregister_command (cmd_lsaddr);
|
||||
--
|
||||
2.34.1
|
||||
|
||||
40
meta/recipes-bsp/grub/files/CVE-2025-61661.patch
Normal file
@@ -0,0 +1,40 @@
|
||||
From c24e11d87f8ee8cefd615e0c30eb71ff6149ee50 Mon Sep 17 00:00:00 2001
|
||||
From: Jamie <volticks@gmail.com>
|
||||
Date: Mon, 14 Jul 2025 09:52:59 +0100
|
||||
Subject: [PATCH 2/4] commands/usbtest: Use correct string length field
|
||||
|
||||
An incorrect length field is used for buffer allocation. This leads to
|
||||
grub_utf16_to_utf8() receiving an incorrect/different length and possibly
|
||||
causing OOB write. This makes sure to use the correct length.
|
||||
|
||||
Fixes: CVE-2025-61661
|
||||
|
||||
CVE: CVE-2025-61661
|
||||
|
||||
Upstream-Status: Backport
|
||||
[https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=549a9cc372fd0b96a4ccdfad0e12140476cc62a3]
|
||||
|
||||
Reported-by: Jamie <volticks@gmail.com>
|
||||
Signed-off-by: Jamie <volticks@gmail.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
|
||||
---
|
||||
grub-core/commands/usbtest.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/commands/usbtest.c b/grub-core/commands/usbtest.c
|
||||
index 2c6d93fe6..8ef187a9a 100644
|
||||
--- a/grub-core/commands/usbtest.c
|
||||
+++ b/grub-core/commands/usbtest.c
|
||||
@@ -99,7 +99,7 @@ grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid,
|
||||
return GRUB_USB_ERR_NONE;
|
||||
}
|
||||
|
||||
- *string = grub_malloc (descstr.length * 2 + 1);
|
||||
+ *string = grub_malloc (descstrp->length * 2 + 1);
|
||||
if (! *string)
|
||||
{
|
||||
grub_free (descstrp);
|
||||
--
|
||||
2.34.1
|
||||
|
||||
72
meta/recipes-bsp/grub/files/CVE-2025-61662.patch
Normal file
@@ -0,0 +1,72 @@
|
||||
From 498dc73aa661bb1cae4b06572b5cef154dcb1fb7 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Brown <alec.r.brown@oracle.com>
|
||||
Date: Thu, 21 Aug 2025 21:14:06 +0000
|
||||
Subject: [PATCH 3/4] gettext/gettext: Unregister gettext command on module
|
||||
unload
|
||||
|
||||
When the gettext module is loaded, the gettext command is registered but
|
||||
isn't unregistered when the module is unloaded. We need to add a call to
|
||||
grub_unregister_command() when unloading the module.
|
||||
|
||||
Fixes: CVE-2025-61662
|
||||
|
||||
CVE: CVE-2025-61662
|
||||
|
||||
Upstream-Status: Backport
|
||||
[https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=8ed78fd9f0852ab218cc1f991c38e5a229e43807]
|
||||
|
||||
Reported-by: Alec Brown <alec.r.brown@oracle.com>
|
||||
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
|
||||
---
|
||||
grub-core/gettext/gettext.c | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c
|
||||
index 9ffc73428..edebed998 100644
|
||||
--- a/grub-core/gettext/gettext.c
|
||||
+++ b/grub-core/gettext/gettext.c
|
||||
@@ -502,6 +502,8 @@ grub_cmd_translate (grub_command_t cmd __attribute__ ((unused)),
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static grub_command_t cmd;
|
||||
+
|
||||
GRUB_MOD_INIT (gettext)
|
||||
{
|
||||
const char *lang;
|
||||
@@ -521,13 +523,14 @@ GRUB_MOD_INIT (gettext)
|
||||
grub_register_variable_hook ("locale_dir", NULL, read_main);
|
||||
grub_register_variable_hook ("secondary_locale_dir", NULL, read_secondary);
|
||||
|
||||
- grub_register_command_p1 ("gettext", grub_cmd_translate,
|
||||
- N_("STRING"),
|
||||
- /* TRANSLATORS: It refers to passing the string through gettext.
|
||||
- So it's "translate" in the same meaning as in what you're
|
||||
- doing now.
|
||||
- */
|
||||
- N_("Translates the string with the current settings."));
|
||||
+ cmd = grub_register_command_p1 ("gettext", grub_cmd_translate,
|
||||
+ N_("STRING"),
|
||||
+ /*
|
||||
+ * TRANSLATORS: It refers to passing the string through gettext.
|
||||
+ * So it's "translate" in the same meaning as in what you're
|
||||
+ * doing now.
|
||||
+ */
|
||||
+ N_("Translates the string with the current settings."));
|
||||
|
||||
/* Reload .mo file information if lang changes. */
|
||||
grub_register_variable_hook ("lang", NULL, grub_gettext_env_write_lang);
|
||||
@@ -544,6 +547,8 @@ GRUB_MOD_FINI (gettext)
|
||||
grub_register_variable_hook ("secondary_locale_dir", NULL, NULL);
|
||||
grub_register_variable_hook ("lang", NULL, NULL);
|
||||
|
||||
+ grub_unregister_command (cmd);
|
||||
+
|
||||
grub_gettext_delete_list (&main_context);
|
||||
grub_gettext_delete_list (&secondary_context);
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
64
meta/recipes-bsp/grub/files/CVE-2025-61663_61664.patch
Normal file
@@ -0,0 +1,64 @@
|
||||
From 8368c026562a72a005bea320cfde9fd7d62d3850 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Brown <alec.r.brown@oracle.com>
|
||||
Date: Thu, 21 Aug 2025 21:14:07 +0000
|
||||
Subject: [PATCH 4/4] normal/main: Unregister commands on module unload
|
||||
|
||||
When the normal module is loaded, the normal and normal_exit commands
|
||||
are registered but aren't unregistered when the module is unloaded. We
|
||||
need to add calls to grub_unregister_command() when unloading the module
|
||||
for these commands.
|
||||
|
||||
Fixes: CVE-2025-61663
|
||||
Fixes: CVE-2025-61664
|
||||
|
||||
CVE: CVE-2025-61663 CVE-2025-61664
|
||||
|
||||
Upstream-Status: Backport
|
||||
[https://gitweb.git.savannah.gnu.org/gitweb/?p=grub.git;a=commit;h=05d3698b8b03eccc49e53491bbd75dba15f40917]
|
||||
|
||||
Reported-by: Alec Brown <alec.r.brown@oracle.com>
|
||||
Signed-off-by: Alec Brown <alec.r.brown@oracle.com>
|
||||
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||
Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
|
||||
---
|
||||
grub-core/normal/main.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
|
||||
index dad25e7d2..a810858c3 100644
|
||||
--- a/grub-core/normal/main.c
|
||||
+++ b/grub-core/normal/main.c
|
||||
@@ -500,7 +500,7 @@ grub_mini_cmd_clear (struct grub_command *cmd __attribute__ ((unused)),
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static grub_command_t cmd_clear;
|
||||
+static grub_command_t cmd_clear, cmd_normal, cmd_normal_exit;
|
||||
|
||||
static void (*grub_xputs_saved) (const char *str);
|
||||
static const char *features[] = {
|
||||
@@ -542,10 +542,10 @@ GRUB_MOD_INIT(normal)
|
||||
grub_env_export ("pager");
|
||||
|
||||
/* Register a command "normal" for the rescue mode. */
|
||||
- grub_register_command ("normal", grub_cmd_normal,
|
||||
- 0, N_("Enter normal mode."));
|
||||
- grub_register_command ("normal_exit", grub_cmd_normal_exit,
|
||||
- 0, N_("Exit from normal mode."));
|
||||
+ cmd_normal = grub_register_command ("normal", grub_cmd_normal,
|
||||
+ 0, N_("Enter normal mode."));
|
||||
+ cmd_normal_exit = grub_register_command ("normal_exit", grub_cmd_normal_exit,
|
||||
+ 0, N_("Exit from normal mode."));
|
||||
|
||||
/* Reload terminal colors when these variables are written to. */
|
||||
grub_register_variable_hook ("color_normal", NULL, grub_env_write_color_normal);
|
||||
@@ -587,4 +587,6 @@ GRUB_MOD_FINI(normal)
|
||||
grub_register_variable_hook ("color_highlight", NULL, NULL);
|
||||
grub_fs_autoload_hook = 0;
|
||||
grub_unregister_command (cmd_clear);
|
||||
+ grub_unregister_command (cmd_normal);
|
||||
+ grub_unregister_command (cmd_normal_exit);
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -38,6 +38,10 @@ SRC_URI = "${GNU_MIRROR}/grub/grub-${PV}.tar.gz \
|
||||
file://CVE-2025-0677_CVE-2025-0684_CVE-2025-0685_CVE-2025-0686_CVE-2025-0689.patch \
|
||||
file://CVE-2025-0678_CVE-2025-1125.patch \
|
||||
file://CVE-2024-56738.patch \
|
||||
file://CVE-2025-54770.patch \
|
||||
file://CVE-2025-61661.patch \
|
||||
file://CVE-2025-61662.patch \
|
||||
file://CVE-2025-61663_61664.patch \
|
||||
"
|
||||
|
||||
SRC_URI[sha256sum] = "b30919fa5be280417c17ac561bb1650f60cfb80cc6237fa1e2b6f56154cb9c91"
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
From fd702c02497b2f398e739e3119bed0b23dd7aa7b Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Tue, 20 Jan 2026 01:10:36 -0800
|
||||
Subject: Fix injection bug with bogus user names
|
||||
|
||||
Problem reported by Kyu Neushwaistein.
|
||||
* telnetd/utility.c (_var_short_name):
|
||||
Ignore user names that start with '-' or contain shell metacharacters.
|
||||
|
||||
Signed-off-by: Simon Josefsson <simon@josefsson.org>
|
||||
|
||||
Upstream-Status: Backport [https://cgit.git.savannah.gnu.org/cgit/inetutils.git/commit/?id=fd702c02497b2f398e739e3119bed0b23dd7aa7b]
|
||||
CVE: CVE-2026-24061
|
||||
Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
|
||||
---
|
||||
telnetd/utility.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/telnetd/utility.c b/telnetd/utility.c
|
||||
index b486226e..c02cd0e6 100644
|
||||
--- a/telnetd/utility.c
|
||||
+++ b/telnetd/utility.c
|
||||
@@ -1733,7 +1733,14 @@ _var_short_name (struct line_expander *exp)
|
||||
return user_name ? xstrdup (user_name) : NULL;
|
||||
|
||||
case 'U':
|
||||
- return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");
|
||||
+ {
|
||||
+ /* Ignore user names starting with '-' or containing shell
|
||||
+ metachars, as they can cause trouble. */
|
||||
+ char const *u = getenv ("USER");
|
||||
+ return xstrdup ((u && *u != '-'
|
||||
+ && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
|
||||
+ ? u : "");
|
||||
+ }
|
||||
|
||||
default:
|
||||
exp->state = EXP_STATE_ERROR;
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
From ccba9f748aa8d50a38d7748e2e60362edd6a32cc Mon Sep 17 00:00:00 2001
|
||||
From: Simon Josefsson <simon@josefsson.org>
|
||||
Date: Tue, 20 Jan 2026 14:02:39 +0100
|
||||
Subject: telnetd: Sanitize all variable expansions
|
||||
|
||||
* telnetd/utility.c (sanitize): New function.
|
||||
(_var_short_name): Use it for all variables.
|
||||
|
||||
Upstream-Status: Backport [https://cgit.git.savannah.gnu.org/cgit/inetutils.git/commit/?id=ccba9f748aa8d50a38d7748e2e60362edd6a32cc]
|
||||
CVE: CVE-2026-24061
|
||||
Signed-off-by: Vijay Anusuri <vanusuri@mvista.com>
|
||||
---
|
||||
telnetd/utility.c | 32 ++++++++++++++++++--------------
|
||||
1 file changed, 18 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/telnetd/utility.c b/telnetd/utility.c
|
||||
index c02cd0e6..b21ad961 100644
|
||||
--- a/telnetd/utility.c
|
||||
+++ b/telnetd/utility.c
|
||||
@@ -1684,6 +1684,17 @@ static void _expand_cond (struct line_expander *exp);
|
||||
static void _skip_block (struct line_expander *exp);
|
||||
static void _expand_block (struct line_expander *exp);
|
||||
|
||||
+static char *
|
||||
+sanitize (const char *u)
|
||||
+{
|
||||
+ /* Ignore values starting with '-' or containing shell metachars, as
|
||||
+ they can cause trouble. */
|
||||
+ if (u && *u != '-' && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
|
||||
+ return u;
|
||||
+ else
|
||||
+ return "";
|
||||
+}
|
||||
+
|
||||
/* Expand a variable referenced by its short one-symbol name.
|
||||
Input: exp->cp points to the variable name.
|
||||
FIXME: not implemented */
|
||||
@@ -1710,13 +1721,13 @@ _var_short_name (struct line_expander *exp)
|
||||
return xstrdup (timebuf);
|
||||
|
||||
case 'h':
|
||||
- return xstrdup (remote_hostname);
|
||||
+ return xstrdup (sanitize (remote_hostname));
|
||||
|
||||
case 'l':
|
||||
- return xstrdup (local_hostname);
|
||||
+ return xstrdup (sanitize (local_hostname));
|
||||
|
||||
case 'L':
|
||||
- return xstrdup (line);
|
||||
+ return xstrdup (sanitize (line));
|
||||
|
||||
case 't':
|
||||
q = strchr (line + 1, '/');
|
||||
@@ -1724,23 +1735,16 @@ _var_short_name (struct line_expander *exp)
|
||||
q++;
|
||||
else
|
||||
q = line;
|
||||
- return xstrdup (q);
|
||||
+ return xstrdup (sanitize (q));
|
||||
|
||||
case 'T':
|
||||
- return terminaltype ? xstrdup (terminaltype) : NULL;
|
||||
+ return terminaltype ? xstrdup (sanitize (terminaltype)) : NULL;
|
||||
|
||||
case 'u':
|
||||
- return user_name ? xstrdup (user_name) : NULL;
|
||||
+ return user_name ? xstrdup (sanitize (user_name)) : NULL;
|
||||
|
||||
case 'U':
|
||||
- {
|
||||
- /* Ignore user names starting with '-' or containing shell
|
||||
- metachars, as they can cause trouble. */
|
||||
- char const *u = getenv ("USER");
|
||||
- return xstrdup ((u && *u != '-'
|
||||
- && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
|
||||
- ? u : "");
|
||||
- }
|
||||
+ return xstrdup (sanitize (getenv ("USER")));
|
||||
|
||||
default:
|
||||
exp->state = EXP_STATE_ERROR;
|
||||
--
|
||||
cgit v1.2.3
|
||||
|
||||
@@ -18,6 +18,8 @@ SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.xz \
|
||||
file://rsh.xinetd.inetutils \
|
||||
file://telnet.xinetd.inetutils \
|
||||
file://tftpd.xinetd.inetutils \
|
||||
file://CVE-2026-24061-1.patch \
|
||||
file://CVE-2026-24061-2.patch \
|
||||
"
|
||||
|
||||
inherit autotools gettext update-alternatives texinfo
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From 7224be0fe2f4beb916b7b69141f478facd0f0634 Mon Sep 17 00:00:00 2001
|
||||
From: Denis Ovsienko <denis@ovsienko.info>
|
||||
Date: Sat, 27 Dec 2025 21:36:11 +0000
|
||||
Subject: [PATCH] Rename one of the xdtoi() copies to simplify backporting.
|
||||
|
||||
CVE: CVE-2025-11961
|
||||
Upstream-Status: Backport [https://github.com/the-tcpdump-group/libpcap/commit/7224be0fe2f4beb916b7b69141f478facd0f0634]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
nametoaddr.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/nametoaddr.c b/nametoaddr.c
|
||||
index dc75495c..bdaacbf1 100644
|
||||
--- a/nametoaddr.c
|
||||
+++ b/nametoaddr.c
|
||||
@@ -646,7 +646,7 @@ pcap_nametollc(const char *s)
|
||||
|
||||
/* Hex digit to 8-bit unsigned integer. */
|
||||
static inline u_char
|
||||
-xdtoi(u_char c)
|
||||
+pcapint_xdtoi(u_char c)
|
||||
{
|
||||
if (c >= '0' && c <= '9')
|
||||
return (u_char)(c - '0');
|
||||
@@ -728,10 +728,10 @@ pcap_ether_aton(const char *s)
|
||||
while (*s) {
|
||||
if (*s == ':' || *s == '.' || *s == '-')
|
||||
s += 1;
|
||||
- d = xdtoi(*s++);
|
||||
+ d = pcapint_xdtoi(*s++);
|
||||
if (PCAP_ISXDIGIT(*s)) {
|
||||
d <<= 4;
|
||||
- d |= xdtoi(*s++);
|
||||
+ d |= pcapint_xdtoi(*s++);
|
||||
}
|
||||
*ep++ = d;
|
||||
}
|
||||
@@ -0,0 +1,433 @@
|
||||
From b2d2f9a9a0581c40780bde509f7cc715920f1c02 Mon Sep 17 00:00:00 2001
|
||||
From: Denis Ovsienko <denis@ovsienko.info>
|
||||
Date: Fri, 19 Dec 2025 17:31:13 +0000
|
||||
Subject: [PATCH] CVE-2025-11961: Fix OOBR and OOBW in pcap_ether_aton().
|
||||
|
||||
pcap_ether_aton() has for a long time required its string argument to be
|
||||
a well-formed MAC-48 address, which is always the case when the argument
|
||||
comes from other libpcap code, so the function has never validated the
|
||||
input and used a simple loop to parse any of the three common MAC-48
|
||||
address formats. However, the function has also been a part of the
|
||||
public API, so calling it directly with a malformed address can cause
|
||||
the loop to read beyond the end of the input string and/or to write
|
||||
beyond the end of the allocated output buffer.
|
||||
|
||||
To handle invalid input more appropriately, replace the simple loop with
|
||||
new functions and require the input to match a supported address format.
|
||||
|
||||
This problem was reported by Jin Wei, Kunwei Qian and Ping Chen.
|
||||
|
||||
(backported from commit dd08e53e9380e217ae7c7768da9cc3d7bf37bf83)
|
||||
|
||||
CVE: CVE-2025-11961
|
||||
Upstream-Status: Backport [https://github.com/the-tcpdump-group/libpcap/commit/b2d2f9a9a0581c40780bde509f7cc715920f1c02]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
gencode.c | 5 +
|
||||
nametoaddr.c | 367 +++++++++++++++++++++++++++++++++++++++++++++++----
|
||||
2 files changed, 349 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/gencode.c b/gencode.c
|
||||
index 3ddd15f8..76fb2d82 100644
|
||||
--- a/gencode.c
|
||||
+++ b/gencode.c
|
||||
@@ -7228,6 +7228,11 @@ gen_ecode(compiler_state_t *cstate, const char *s, struct qual q)
|
||||
return (NULL);
|
||||
|
||||
if ((q.addr == Q_HOST || q.addr == Q_DEFAULT) && q.proto == Q_LINK) {
|
||||
+ /*
|
||||
+ * Because the lexer guards the input string format, in this
|
||||
+ * context the function returns NULL iff the implicit malloc()
|
||||
+ * has failed.
|
||||
+ */
|
||||
cstate->e = pcap_ether_aton(s);
|
||||
if (cstate->e == NULL)
|
||||
bpf_error(cstate, "malloc");
|
||||
diff --git a/nametoaddr.c b/nametoaddr.c
|
||||
index f9fcd288..f50d0da5 100644
|
||||
--- a/nametoaddr.c
|
||||
+++ b/nametoaddr.c
|
||||
@@ -703,39 +703,360 @@ __pcap_atodn(const char *s, bpf_u_int32 *addr)
|
||||
return(32);
|
||||
}
|
||||
|
||||
+// Man page: "xxxxxxxxxxxx", regexp: "^[0-9a-fA-F]{12}$".
|
||||
+static u_char
|
||||
+pcapint_atomac48_xxxxxxxxxxxx(const char *s, uint8_t *addr)
|
||||
+{
|
||||
+ if (strlen(s) == 12 &&
|
||||
+ PCAP_ISXDIGIT(s[0]) &&
|
||||
+ PCAP_ISXDIGIT(s[1]) &&
|
||||
+ PCAP_ISXDIGIT(s[2]) &&
|
||||
+ PCAP_ISXDIGIT(s[3]) &&
|
||||
+ PCAP_ISXDIGIT(s[4]) &&
|
||||
+ PCAP_ISXDIGIT(s[5]) &&
|
||||
+ PCAP_ISXDIGIT(s[6]) &&
|
||||
+ PCAP_ISXDIGIT(s[7]) &&
|
||||
+ PCAP_ISXDIGIT(s[8]) &&
|
||||
+ PCAP_ISXDIGIT(s[9]) &&
|
||||
+ PCAP_ISXDIGIT(s[10]) &&
|
||||
+ PCAP_ISXDIGIT(s[11])) {
|
||||
+ addr[0] = pcapint_xdtoi(s[0]) << 4 | pcapint_xdtoi(s[1]);
|
||||
+ addr[1] = pcapint_xdtoi(s[2]) << 4 | pcapint_xdtoi(s[3]);
|
||||
+ addr[2] = pcapint_xdtoi(s[4]) << 4 | pcapint_xdtoi(s[5]);
|
||||
+ addr[3] = pcapint_xdtoi(s[6]) << 4 | pcapint_xdtoi(s[7]);
|
||||
+ addr[4] = pcapint_xdtoi(s[8]) << 4 | pcapint_xdtoi(s[9]);
|
||||
+ addr[5] = pcapint_xdtoi(s[10]) << 4 | pcapint_xdtoi(s[11]);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+// Man page: "xxxx.xxxx.xxxx", regexp: "^[0-9a-fA-F]{4}(\.[0-9a-fA-F]{4}){2}$".
|
||||
+static u_char
|
||||
+pcapint_atomac48_xxxx_3_times(const char *s, uint8_t *addr)
|
||||
+{
|
||||
+ const char sep = '.';
|
||||
+ if (strlen(s) == 14 &&
|
||||
+ PCAP_ISXDIGIT(s[0]) &&
|
||||
+ PCAP_ISXDIGIT(s[1]) &&
|
||||
+ PCAP_ISXDIGIT(s[2]) &&
|
||||
+ PCAP_ISXDIGIT(s[3]) &&
|
||||
+ s[4] == sep &&
|
||||
+ PCAP_ISXDIGIT(s[5]) &&
|
||||
+ PCAP_ISXDIGIT(s[6]) &&
|
||||
+ PCAP_ISXDIGIT(s[7]) &&
|
||||
+ PCAP_ISXDIGIT(s[8]) &&
|
||||
+ s[9] == sep &&
|
||||
+ PCAP_ISXDIGIT(s[10]) &&
|
||||
+ PCAP_ISXDIGIT(s[11]) &&
|
||||
+ PCAP_ISXDIGIT(s[12]) &&
|
||||
+ PCAP_ISXDIGIT(s[13])) {
|
||||
+ addr[0] = pcapint_xdtoi(s[0]) << 4 | pcapint_xdtoi(s[1]);
|
||||
+ addr[1] = pcapint_xdtoi(s[2]) << 4 | pcapint_xdtoi(s[3]);
|
||||
+ addr[2] = pcapint_xdtoi(s[5]) << 4 | pcapint_xdtoi(s[6]);
|
||||
+ addr[3] = pcapint_xdtoi(s[7]) << 4 | pcapint_xdtoi(s[8]);
|
||||
+ addr[4] = pcapint_xdtoi(s[10]) << 4 | pcapint_xdtoi(s[11]);
|
||||
+ addr[5] = pcapint_xdtoi(s[12]) << 4 | pcapint_xdtoi(s[13]);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
- * Convert 's', which can have the one of the forms:
|
||||
+ * Man page: "xx:xx:xx:xx:xx:xx", regexp: "^[0-9a-fA-F]{1,2}(:[0-9a-fA-F]{1,2}){5}$".
|
||||
+ * Man page: "xx-xx-xx-xx-xx-xx", regexp: "^[0-9a-fA-F]{1,2}(-[0-9a-fA-F]{1,2}){5}$".
|
||||
+ * Man page: "xx.xx.xx.xx.xx.xx", regexp: "^[0-9a-fA-F]{1,2}(\.[0-9a-fA-F]{1,2}){5}$".
|
||||
+ * (Any "xx" above can be "x", which is equivalent to "0x".)
|
||||
*
|
||||
- * "xx:xx:xx:xx:xx:xx"
|
||||
- * "xx.xx.xx.xx.xx.xx"
|
||||
- * "xx-xx-xx-xx-xx-xx"
|
||||
- * "xxxx.xxxx.xxxx"
|
||||
- * "xxxxxxxxxxxx"
|
||||
+ * An equivalent (and parametrisable for EUI-64) FSM could be implemented using
|
||||
+ * a smaller graph, but that graph would be neither acyclic nor planar nor
|
||||
+ * trivial to verify.
|
||||
*
|
||||
- * (or various mixes of ':', '.', and '-') into a new
|
||||
- * ethernet address. Assumes 's' is well formed.
|
||||
+ * |
|
||||
+ * [.] v
|
||||
+ * +<---------- START
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE0_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE0_XX | [:\.-]
|
||||
+ * | | |
|
||||
+ * | | [:\.-] |
|
||||
+ * | [.] v |
|
||||
+ * +<----- BYTE0_SEP_BYTE1 <-----+
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE1_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE1_XX | <sep>
|
||||
+ * | | |
|
||||
+ * | | <sep> |
|
||||
+ * | [.] v |
|
||||
+ * +<----- BYTE1_SEP_BYTE2 <-----+
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE2_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE2_XX | <sep>
|
||||
+ * | | |
|
||||
+ * | | <sep> |
|
||||
+ * | [.] v |
|
||||
+ * +<----- BYTE2_SEP_BYTE3 <-----+
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE3_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE3_XX | <sep>
|
||||
+ * | | |
|
||||
+ * | | <sep> |
|
||||
+ * | [.] v |
|
||||
+ * +<----- BYTE3_SEP_BYTE4 <-----+
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE4_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE4_XX | <sep>
|
||||
+ * | | |
|
||||
+ * | | <sep> |
|
||||
+ * | [.] v |
|
||||
+ * +<----- BYTE4_SEP_BYTE5 <-----+
|
||||
+ * | |
|
||||
+ * | | [0-9a-fA-F]
|
||||
+ * | [.] v
|
||||
+ * +<--------- BYTE5_X ----------+
|
||||
+ * | | |
|
||||
+ * | | [0-9a-fA-F] |
|
||||
+ * | [.] v |
|
||||
+ * +<--------- BYTE5_XX | \0
|
||||
+ * | | |
|
||||
+ * | | \0 |
|
||||
+ * | | v
|
||||
+ * +--> (reject) +---------> (accept)
|
||||
+ *
|
||||
+ */
|
||||
+static u_char
|
||||
+pcapint_atomac48_x_xx_6_times(const char *s, uint8_t *addr)
|
||||
+{
|
||||
+ enum {
|
||||
+ START,
|
||||
+ BYTE0_X,
|
||||
+ BYTE0_XX,
|
||||
+ BYTE0_SEP_BYTE1,
|
||||
+ BYTE1_X,
|
||||
+ BYTE1_XX,
|
||||
+ BYTE1_SEP_BYTE2,
|
||||
+ BYTE2_X,
|
||||
+ BYTE2_XX,
|
||||
+ BYTE2_SEP_BYTE3,
|
||||
+ BYTE3_X,
|
||||
+ BYTE3_XX,
|
||||
+ BYTE3_SEP_BYTE4,
|
||||
+ BYTE4_X,
|
||||
+ BYTE4_XX,
|
||||
+ BYTE4_SEP_BYTE5,
|
||||
+ BYTE5_X,
|
||||
+ BYTE5_XX,
|
||||
+ } fsm_state = START;
|
||||
+ uint8_t buf[6];
|
||||
+ const char *seplist = ":.-";
|
||||
+ char sep;
|
||||
+
|
||||
+ while (*s) {
|
||||
+ switch (fsm_state) {
|
||||
+ case START:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[0] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE0_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE0_X:
|
||||
+ if (strchr(seplist, *s)) {
|
||||
+ sep = *s;
|
||||
+ fsm_state = BYTE0_SEP_BYTE1;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[0] = buf[0] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE0_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE0_XX:
|
||||
+ if (strchr(seplist, *s)) {
|
||||
+ sep = *s;
|
||||
+ fsm_state = BYTE0_SEP_BYTE1;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE0_SEP_BYTE1:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[1] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE1_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE1_X:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE1_SEP_BYTE2;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[1] = buf[1] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE1_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE1_XX:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE1_SEP_BYTE2;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE1_SEP_BYTE2:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[2] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE2_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE2_X:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE2_SEP_BYTE3;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[2] = buf[2] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE2_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE2_XX:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE2_SEP_BYTE3;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE2_SEP_BYTE3:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[3] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE3_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE3_X:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE3_SEP_BYTE4;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[3] = buf[3] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE3_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE3_XX:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE3_SEP_BYTE4;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE3_SEP_BYTE4:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[4] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE4_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE4_X:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE4_SEP_BYTE5;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[4] = buf[4] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE4_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE4_XX:
|
||||
+ if (*s == sep) {
|
||||
+ fsm_state = BYTE4_SEP_BYTE5;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE4_SEP_BYTE5:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[5] = pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE5_X;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE5_X:
|
||||
+ if (PCAP_ISXDIGIT(*s)) {
|
||||
+ buf[5] = buf[5] << 4 | pcapint_xdtoi(*s);
|
||||
+ fsm_state = BYTE5_XX;
|
||||
+ break;
|
||||
+ }
|
||||
+ goto reject;
|
||||
+ case BYTE5_XX:
|
||||
+ goto reject;
|
||||
+ } // switch
|
||||
+ s++;
|
||||
+ } // while
|
||||
+
|
||||
+ if (fsm_state == BYTE5_X || fsm_state == BYTE5_XX) {
|
||||
+ // accept
|
||||
+ memcpy(addr, buf, sizeof(buf));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+reject:
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+// The 'addr' argument must point to an array of at least 6 elements.
|
||||
+static int
|
||||
+pcapint_atomac48(const char *s, uint8_t *addr)
|
||||
+{
|
||||
+ return s && (
|
||||
+ pcapint_atomac48_xxxxxxxxxxxx(s, addr) ||
|
||||
+ pcapint_atomac48_xxxx_3_times(s, addr) ||
|
||||
+ pcapint_atomac48_x_xx_6_times(s, addr)
|
||||
+ );
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * If 's' is a MAC-48 address in one of the forms documented in pcap-filter(7)
|
||||
+ * for "ether host", return a pointer to an allocated buffer with the binary
|
||||
+ * value of the address. Return NULL on any error.
|
||||
*/
|
||||
u_char *
|
||||
pcap_ether_aton(const char *s)
|
||||
{
|
||||
- register u_char *ep, *e;
|
||||
- register u_char d;
|
||||
+ uint8_t tmp[6];
|
||||
+ if (! pcapint_atomac48(s, tmp))
|
||||
+ return (NULL);
|
||||
|
||||
- e = ep = (u_char *)malloc(6);
|
||||
+ u_char *e = malloc(6);
|
||||
if (e == NULL)
|
||||
return (NULL);
|
||||
-
|
||||
- while (*s) {
|
||||
- if (*s == ':' || *s == '.' || *s == '-')
|
||||
- s += 1;
|
||||
- d = pcapint_xdtoi(*s++);
|
||||
- if (PCAP_ISXDIGIT(*s)) {
|
||||
- d <<= 4;
|
||||
- d |= pcapint_xdtoi(*s++);
|
||||
- }
|
||||
- *ep++ = d;
|
||||
- }
|
||||
-
|
||||
+ memcpy(e, tmp, sizeof(tmp));
|
||||
return (e);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
From 7fabf607f2319a36a0bd78444247180acb838e69 Mon Sep 17 00:00:00 2001
|
||||
From: Guy Harris <gharris@sonic.net>
|
||||
Date: Sun, 7 Sep 2025 12:51:56 -0700
|
||||
Subject: [PATCH] Fix a copy-and-pasteo in utf_16le_to_utf_8_truncated().
|
||||
|
||||
For the four octets of UTF-8 case, it was decrementing the remaining
|
||||
buffer length by 3, not 4.
|
||||
|
||||
Thanks to a team of developers from the Univesity of Waterloo for
|
||||
reporting this.
|
||||
|
||||
(cherry picked from commit aebfca1aea2fc8c177760a26e8f4de27b51d1b3b)
|
||||
|
||||
CVE: CVE-2025-11964
|
||||
Upstream-Status: Backport [https://github.com/the-tcpdump-group/libpcap/commit/7fabf607f2319a36a0bd78444247180acb838e69]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
fmtutils.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fmtutils.c b/fmtutils.c
|
||||
index a5a4fe62..78a0f8b7 100644
|
||||
--- a/fmtutils.c
|
||||
+++ b/fmtutils.c
|
||||
@@ -235,7 +235,7 @@ utf_16le_to_utf_8_truncated(const wchar_t *utf_16, char *utf_8,
|
||||
*utf_8++ = ((uc >> 12) & 0x3F) | 0x80;
|
||||
*utf_8++ = ((uc >> 6) & 0x3F) | 0x80;
|
||||
*utf_8++ = ((uc >> 0) & 0x3F) | 0x80;
|
||||
- utf_8_len -= 3;
|
||||
+ utf_8_len -= 4;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,9 @@ SRC_URI = "https://www.tcpdump.org/release/${BP}.tar.gz \
|
||||
file://CVE-2023-7256-pre1.patch \
|
||||
file://CVE-2023-7256.patch \
|
||||
file://CVE-2024-8006.patch \
|
||||
file://CVE-2025-11961-01.patch \
|
||||
file://CVE-2025-11961-02.patch \
|
||||
file://CVE-2025-11964.patch \
|
||||
"
|
||||
|
||||
SRC_URI[sha256sum] = "ed19a0383fad72e3ad435fd239d7cd80d64916b87269550159d20e47160ebe5f"
|
||||
|
||||
157
meta/recipes-core/dropbear/dropbear/CVE-2019-6111.patch
Normal file
@@ -0,0 +1,157 @@
|
||||
From 48a17cff6aa104b8e806ddb2191f83f1024060f1 Mon Sep 17 00:00:00 2001
|
||||
From: Matt Johnston <matt@ucc.asn.au>
|
||||
Date: Tue, 9 Dec 2025 22:59:19 +0900
|
||||
Subject: [PATCH] scp CVE-2019-6111 fix
|
||||
|
||||
Cherry-pick from OpenSSH portable
|
||||
|
||||
391ffc4b9d31 ("upstream: check in scp client that filenames sent during")
|
||||
|
||||
upstream: check in scp client that filenames sent during
|
||||
|
||||
remote->local directory copies satisfy the wildcard specified by the user.
|
||||
|
||||
This checking provides some protection against a malicious server
|
||||
sending unexpected filenames, but it comes at a risk of rejecting wanted
|
||||
files due to differences between client and server wildcard expansion rules.
|
||||
|
||||
For this reason, this also adds a new -T flag to disable the check.
|
||||
|
||||
reported by Harry Sintonen
|
||||
fix approach suggested by markus@;
|
||||
has been in snaps for ~1wk courtesy deraadt@
|
||||
|
||||
CVE: CVE-2019-6111
|
||||
Upstream-Status: Backport [https://github.com/mkj/dropbear/commit/48a17cff6aa104b8e806ddb2191f83f1024060f1]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
scp.c | 38 +++++++++++++++++++++++++++++---------
|
||||
1 file changed, 29 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/scp.c b/scp.c
|
||||
index 384f2cb..bf98986 100644
|
||||
--- a/scp.c
|
||||
+++ b/scp.c
|
||||
@@ -76,6 +76,8 @@
|
||||
#include "includes.h"
|
||||
/*RCSID("$OpenBSD: scp.c,v 1.130 2006/01/31 10:35:43 djm Exp $");*/
|
||||
|
||||
+#include <fnmatch.h>
|
||||
+
|
||||
#include "atomicio.h"
|
||||
#include "compat.h"
|
||||
#include "scpmisc.h"
|
||||
@@ -291,14 +293,14 @@ void verifydir(char *);
|
||||
|
||||
uid_t userid;
|
||||
int errs, remin, remout;
|
||||
-int pflag, iamremote, iamrecursive, targetshouldbedirectory;
|
||||
+int Tflag, pflag, iamremote, iamrecursive, targetshouldbedirectory;
|
||||
|
||||
#define CMDNEEDS 64
|
||||
char cmd[CMDNEEDS]; /* must hold "rcp -r -p -d\0" */
|
||||
|
||||
int response(void);
|
||||
void rsource(char *, struct stat *);
|
||||
-void sink(int, char *[]);
|
||||
+void sink(int, char *[], const char *);
|
||||
void source(int, char *[]);
|
||||
void tolocal(int, char *[]);
|
||||
void toremote(char *, int, char *[]);
|
||||
@@ -325,8 +327,8 @@ main(int argc, char **argv)
|
||||
args.list = NULL;
|
||||
addargs(&args, "%s", ssh_program);
|
||||
|
||||
- fflag = tflag = 0;
|
||||
- while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q1246S:o:F:")) != -1)
|
||||
+ fflag = Tflag = tflag = 0;
|
||||
+ while ((ch = getopt(argc, argv, "dfl:prtTvBCc:i:P:q1246S:o:F:")) != -1)
|
||||
switch (ch) {
|
||||
/* User-visible flags. */
|
||||
case '1':
|
||||
@@ -389,9 +391,12 @@ main(int argc, char **argv)
|
||||
setmode(0, O_BINARY);
|
||||
#endif
|
||||
break;
|
||||
+ case 'T':
|
||||
+ Tflag = 1;
|
||||
+ break;
|
||||
default:
|
||||
usage();
|
||||
- }
|
||||
+ }
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
@@ -409,7 +414,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
if (tflag) {
|
||||
/* Receive data. */
|
||||
- sink(argc, argv);
|
||||
+ sink(argc, argv, NULL);
|
||||
exit(errs != 0);
|
||||
}
|
||||
if (argc < 2)
|
||||
@@ -589,7 +594,7 @@ tolocal(int argc, char **argv)
|
||||
continue;
|
||||
}
|
||||
xfree(bp);
|
||||
- sink(1, argv + argc - 1);
|
||||
+ sink(1, argv + argc - 1, src);
|
||||
(void) close(remin);
|
||||
remin = remout = -1;
|
||||
}
|
||||
@@ -822,7 +827,7 @@ bwlimit(int amount)
|
||||
}
|
||||
|
||||
void
|
||||
-sink(int argc, char **argv)
|
||||
+sink(int argc, char **argv, const char *src)
|
||||
{
|
||||
static BUF buffer;
|
||||
struct stat stb;
|
||||
@@ -836,6 +841,7 @@ sink(int argc, char **argv)
|
||||
off_t size, statbytes;
|
||||
int setimes, targisdir, wrerrno = 0;
|
||||
char ch, *cp, *np, *targ, *why, *vect[1], buf[2048];
|
||||
+ char *src_copy = NULL, *restrict_pattern = NULL;
|
||||
struct timeval tv[2];
|
||||
|
||||
#define atime tv[0]
|
||||
@@ -857,6 +863,17 @@ sink(int argc, char **argv)
|
||||
(void) atomicio(vwrite, remout, "", 1);
|
||||
if (stat(targ, &stb) == 0 && S_ISDIR(stb.st_mode))
|
||||
targisdir = 1;
|
||||
+ if (src != NULL && !iamrecursive && !Tflag) {
|
||||
+ /*
|
||||
+ * Prepare to try to restrict incoming filenames to match
|
||||
+ * the requested destination file glob.
|
||||
+ */
|
||||
+ if ((src_copy = strdup(src)) == NULL)
|
||||
+ fatal("strdup failed");
|
||||
+ if ((restrict_pattern = strrchr(src_copy, '/')) != NULL) {
|
||||
+ *restrict_pattern++ = '\0';
|
||||
+ }
|
||||
+ }
|
||||
for (first = 1;; first = 0) {
|
||||
cp = buf;
|
||||
if (atomicio(read, remin, cp, 1) != 1)
|
||||
@@ -939,6 +956,9 @@ sink(int argc, char **argv)
|
||||
run_err("error: unexpected filename: %s", cp);
|
||||
exit(1);
|
||||
}
|
||||
+ if (restrict_pattern != NULL &&
|
||||
+ fnmatch(restrict_pattern, cp, 0) != 0)
|
||||
+ SCREWUP("filename does not match request");
|
||||
if (targisdir) {
|
||||
static char *namebuf = NULL;
|
||||
static size_t cursize = 0;
|
||||
@@ -977,7 +997,7 @@ sink(int argc, char **argv)
|
||||
goto bad;
|
||||
}
|
||||
vect[0] = xstrdup(np);
|
||||
- sink(1, vect);
|
||||
+ sink(1, vect, src);
|
||||
if (setimes) {
|
||||
setimes = 0;
|
||||
if (utimes(vect[0], tv) < 0)
|
||||
@@ -29,6 +29,7 @@ SRC_URI = "http://matt.ucc.asn.au/dropbear/releases/dropbear-${PV}.tar.bz2 \
|
||||
file://0001-cli-runopts.c-add-missing-DROPBEAR_CLI_PUBKEY_AUTH.patch \
|
||||
file://0001-Avoid-unused-variable-with-DROPBEAR_CLI_PUBKEY_AUTH-.patch \
|
||||
file://CVE-2025-47203.patch \
|
||||
file://CVE-2019-6111.patch \
|
||||
"
|
||||
|
||||
SRC_URI[sha256sum] = "bc5a121ffbc94b5171ad5ebe01be42746d50aa797c9549a4639894a16749443b"
|
||||
|
||||
43
meta/recipes-core/expat/expat/CVE-2026-24515-01.patch
Normal file
@@ -0,0 +1,43 @@
|
||||
From 86fc914a7acc49246d5fde0ab6ed97eb8a0f15f9 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Pipping <sebastian@pipping.org>
|
||||
Date: Sun, 18 Jan 2026 17:53:37 +0100
|
||||
Subject: [PATCH] lib: Make XML_ExternalEntityParserCreate copy unknown
|
||||
encoding handler user data
|
||||
|
||||
Patch suggested by Artiphishell Inc.
|
||||
|
||||
CVE: CVE-2026-24515
|
||||
Upstream-Status: Backport [https://github.com/libexpat/libexpat/commit/86fc914a7acc49246d5fde0ab6ed97eb8a0f15f9]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
lib/xmlparse.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
|
||||
index 593cd90d..18577ee3 100644
|
||||
--- a/lib/xmlparse.c
|
||||
+++ b/lib/xmlparse.c
|
||||
@@ -1749,6 +1749,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
|
||||
XML_ExternalEntityRefHandler oldExternalEntityRefHandler;
|
||||
XML_SkippedEntityHandler oldSkippedEntityHandler;
|
||||
XML_UnknownEncodingHandler oldUnknownEncodingHandler;
|
||||
+ void *oldUnknownEncodingHandlerData;
|
||||
XML_ElementDeclHandler oldElementDeclHandler;
|
||||
XML_AttlistDeclHandler oldAttlistDeclHandler;
|
||||
XML_EntityDeclHandler oldEntityDeclHandler;
|
||||
@@ -1794,6 +1795,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
|
||||
oldExternalEntityRefHandler = parser->m_externalEntityRefHandler;
|
||||
oldSkippedEntityHandler = parser->m_skippedEntityHandler;
|
||||
oldUnknownEncodingHandler = parser->m_unknownEncodingHandler;
|
||||
+ oldUnknownEncodingHandlerData = parser->m_unknownEncodingHandlerData;
|
||||
oldElementDeclHandler = parser->m_elementDeclHandler;
|
||||
oldAttlistDeclHandler = parser->m_attlistDeclHandler;
|
||||
oldEntityDeclHandler = parser->m_entityDeclHandler;
|
||||
@@ -1854,6 +1856,7 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context,
|
||||
parser->m_externalEntityRefHandler = oldExternalEntityRefHandler;
|
||||
parser->m_skippedEntityHandler = oldSkippedEntityHandler;
|
||||
parser->m_unknownEncodingHandler = oldUnknownEncodingHandler;
|
||||
+ parser->m_unknownEncodingHandlerData = oldUnknownEncodingHandlerData;
|
||||
parser->m_elementDeclHandler = oldElementDeclHandler;
|
||||
parser->m_attlistDeclHandler = oldAttlistDeclHandler;
|
||||
parser->m_entityDeclHandler = oldEntityDeclHandler;
|
||||
117
meta/recipes-core/expat/expat/CVE-2026-24515-02.patch
Normal file
@@ -0,0 +1,117 @@
|
||||
From 8efea3e255d55c7e0a5b70b226f4652ab00e1a27 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Pipping <sebastian@pipping.org>
|
||||
Date: Sun, 18 Jan 2026 17:26:31 +0100
|
||||
Subject: [PATCH] tests: Cover effect of XML_SetUnknownEncodingHandler user
|
||||
data
|
||||
|
||||
CVE: CVE-2026-24515
|
||||
Upstream-Status: Backport [https://github.com/libexpat/libexpat/commit/8efea3e255d55c7e0a5b70b226f4652ab00e1a27]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
tests/basic_tests.c | 42 +++++++++++++++++++++++++++++++++++++++
|
||||
tests/handlers.c | 10 ++++++++++
|
||||
tests/handlers.h | 3 +++
|
||||
3 files changed, 55 insertions(+)
|
||||
|
||||
diff --git a/tests/basic_tests.c b/tests/basic_tests.c
|
||||
index 0231e094..0ed98d86 100644
|
||||
--- a/tests/basic_tests.c
|
||||
+++ b/tests/basic_tests.c
|
||||
@@ -4527,6 +4527,46 @@ START_TEST(test_unknown_encoding_invalid_attr_value) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
+START_TEST(test_unknown_encoding_user_data_primary) {
|
||||
+ // This test is based on ideas contributed by Artiphishell Inc.
|
||||
+ const char *const text = "<?xml version='1.0' encoding='x-unk'?>\n"
|
||||
+ "<root />\n";
|
||||
+ XML_Parser parser = XML_ParserCreate(NULL);
|
||||
+ XML_SetUnknownEncodingHandler(parser,
|
||||
+ user_data_checking_unknown_encoding_handler,
|
||||
+ (void *)(intptr_t)0xC0FFEE);
|
||||
+
|
||||
+ assert_true(_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
+ == XML_STATUS_OK);
|
||||
+
|
||||
+ XML_ParserFree(parser);
|
||||
+}
|
||||
+END_TEST
|
||||
+
|
||||
+START_TEST(test_unknown_encoding_user_data_secondary) {
|
||||
+ // This test is based on ideas contributed by Artiphishell Inc.
|
||||
+ const char *const text_main = "<!DOCTYPE r [\n"
|
||||
+ " <!ENTITY ext SYSTEM 'ext.ent'>\n"
|
||||
+ "]>\n"
|
||||
+ "<r>&ext;</r>\n";
|
||||
+ const char *const text_external = "<?xml version='1.0' encoding='x-unk'?>\n"
|
||||
+ "<e>data</e>";
|
||||
+ ExtTest2 test_data = {text_external, (int)strlen(text_external), NULL, NULL};
|
||||
+ XML_Parser parser = XML_ParserCreate(NULL);
|
||||
+ XML_SetExternalEntityRefHandler(parser, external_entity_loader2);
|
||||
+ XML_SetUnknownEncodingHandler(parser,
|
||||
+ user_data_checking_unknown_encoding_handler,
|
||||
+ (void *)(intptr_t)0xC0FFEE);
|
||||
+ XML_SetUserData(parser, &test_data);
|
||||
+
|
||||
+ assert_true(_XML_Parse_SINGLE_BYTES(parser, text_main, (int)strlen(text_main),
|
||||
+ XML_TRUE)
|
||||
+ == XML_STATUS_OK);
|
||||
+
|
||||
+ XML_ParserFree(parser);
|
||||
+}
|
||||
+END_TEST
|
||||
+
|
||||
/* Test an external entity parser set to use latin-1 detects UTF-16
|
||||
* BOMs correctly.
|
||||
*/
|
||||
@@ -6372,6 +6412,8 @@ make_basic_test_case(Suite *s) {
|
||||
tcase_add_test(tc_basic, test_unknown_encoding_invalid_surrogate);
|
||||
tcase_add_test(tc_basic, test_unknown_encoding_invalid_high);
|
||||
tcase_add_test(tc_basic, test_unknown_encoding_invalid_attr_value);
|
||||
+ tcase_add_test(tc_basic, test_unknown_encoding_user_data_primary);
|
||||
+ tcase_add_test(tc_basic, test_unknown_encoding_user_data_secondary);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16le_bom);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16be_bom);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_ext_entity_latin1_utf16le_bom2);
|
||||
diff --git a/tests/handlers.c b/tests/handlers.c
|
||||
index 5bca2b1f..d077f688 100644
|
||||
--- a/tests/handlers.c
|
||||
+++ b/tests/handlers.c
|
||||
@@ -45,6 +45,7 @@
|
||||
# undef NDEBUG /* because test suite relies on assert(...) at the moment */
|
||||
#endif
|
||||
|
||||
+#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
@@ -407,6 +408,15 @@ long_encoding_handler(void *userData, const XML_Char *encoding,
|
||||
return XML_STATUS_OK;
|
||||
}
|
||||
|
||||
+int XMLCALL
|
||||
+user_data_checking_unknown_encoding_handler(void *userData,
|
||||
+ const XML_Char *encoding,
|
||||
+ XML_Encoding *info) {
|
||||
+ const intptr_t number = (intptr_t)userData;
|
||||
+ assert_true(number == 0xC0FFEE);
|
||||
+ return long_encoding_handler(userData, encoding, info);
|
||||
+}
|
||||
+
|
||||
/* External Entity Handlers */
|
||||
|
||||
int XMLCALL
|
||||
diff --git a/tests/handlers.h b/tests/handlers.h
|
||||
index fa6267fb..915040e5 100644
|
||||
--- a/tests/handlers.h
|
||||
+++ b/tests/handlers.h
|
||||
@@ -159,6 +159,9 @@ extern int XMLCALL long_encoding_handler(void *userData,
|
||||
const XML_Char *encoding,
|
||||
XML_Encoding *info);
|
||||
|
||||
+extern int XMLCALL user_data_checking_unknown_encoding_handler(
|
||||
+ void *userData, const XML_Char *encoding, XML_Encoding *info);
|
||||
+
|
||||
/* External Entity Handlers */
|
||||
|
||||
typedef struct ExtOption {
|
||||
27
meta/recipes-core/expat/expat/CVE-2026-25210-01.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 7ddea353ad3795f7222441274d4d9a155b523cba Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Fernandez <matthew.fernandez@gmail.com>
|
||||
Date: Thu, 2 Oct 2025 17:15:15 -0700
|
||||
Subject: [PATCH] lib: Make a doubling more readable
|
||||
|
||||
Suggested-by: Sebastian Pipping <sebastian@pipping.org>
|
||||
|
||||
CVE: CVE-2026-25210
|
||||
Upstream-Status: Backport [https://github.com/libexpat/libexpat/commit/7ddea353ad3795f7222441274d4d9a155b523cba]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
lib/xmlparse.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
|
||||
index 8cf29257..2f9adffc 100644
|
||||
--- a/lib/xmlparse.c
|
||||
+++ b/lib/xmlparse.c
|
||||
@@ -3499,7 +3499,7 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
|
||||
tag->name.strLen = convLen;
|
||||
break;
|
||||
}
|
||||
- bufSize = (int)(tag->bufEnd - tag->buf) << 1;
|
||||
+ bufSize = (int)(tag->bufEnd - tag->buf) * 2;
|
||||
{
|
||||
char *temp = REALLOC(parser, tag->buf, bufSize);
|
||||
if (temp == NULL)
|
||||
38
meta/recipes-core/expat/expat/CVE-2026-25210-02.patch
Normal file
@@ -0,0 +1,38 @@
|
||||
From 8855346359a475c022ec8c28484a76c852f144d9 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Fernandez <matthew.fernandez@gmail.com>
|
||||
Date: Thu, 2 Oct 2025 17:15:15 -0700
|
||||
Subject: [PATCH] lib: Realign a size with the `REALLOC` type signature it is
|
||||
passed into
|
||||
|
||||
Note that this implicitly assumes `tag->bufEnd >= tag->buf`, which should
|
||||
already be guaranteed true.
|
||||
|
||||
CVE: CVE-2026-25210
|
||||
Upstream-Status: Backport [https://github.com/libexpat/libexpat/commit/8855346359a475c022ec8c28484a76c852f144d9]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
---
|
||||
lib/xmlparse.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
|
||||
index 2f9adffc..ee18a87f 100644
|
||||
--- a/lib/xmlparse.c
|
||||
+++ b/lib/xmlparse.c
|
||||
@@ -3488,7 +3488,6 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
|
||||
const char *fromPtr = tag->rawName;
|
||||
toPtr = (XML_Char *)tag->buf;
|
||||
for (;;) {
|
||||
- int bufSize;
|
||||
int convLen;
|
||||
const enum XML_Convert_Result convert_res
|
||||
= XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr,
|
||||
@@ -3499,7 +3498,7 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
|
||||
tag->name.strLen = convLen;
|
||||
break;
|
||||
}
|
||||
- bufSize = (int)(tag->bufEnd - tag->buf) * 2;
|
||||
+ const size_t bufSize = (size_t)(tag->bufEnd - tag->buf) * 2;
|
||||
{
|
||||
char *temp = REALLOC(parser, tag->buf, bufSize);
|
||||
if (temp == NULL)
|
||||
28
meta/recipes-core/expat/expat/CVE-2026-25210-03.patch
Normal file
@@ -0,0 +1,28 @@
|
||||
From 9c2d990389e6abe2e44527eeaa8b39f16fe859c7 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Fernandez <matthew.fernandez@gmail.com>
|
||||
Date: Thu, 2 Oct 2025 17:15:15 -0700
|
||||
Subject: [PATCH] lib: Introduce an integer overflow check for tag buffer
|
||||
reallocation
|
||||
|
||||
Suggested-by: Sebastian Pipping <sebastian@pipping.org>
|
||||
|
||||
CVE: CVE-2026-25210
|
||||
Upstream-Status: Backport [https://github.com/libexpat/libexpat/commit/9c2d990389e6abe2e44527eeaa8b39f16fe859c7]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
lib/xmlparse.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
|
||||
index ee18a87f..d8c54c38 100644
|
||||
--- a/lib/xmlparse.c
|
||||
+++ b/lib/xmlparse.c
|
||||
@@ -3498,6 +3498,8 @@ doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc,
|
||||
tag->name.strLen = convLen;
|
||||
break;
|
||||
}
|
||||
+ if (SIZE_MAX / 2 < (size_t)(tag->bufEnd - tag->buf))
|
||||
+ return XML_ERROR_NO_MEMORY;
|
||||
const size_t bufSize = (size_t)(tag->bufEnd - tag->buf) * 2;
|
||||
{
|
||||
char *temp = REALLOC(parser, tag->buf, bufSize);
|
||||
@@ -41,6 +41,11 @@ SRC_URI = "${GITHUB_BASE_URI}/download/R_${VERSION_TAG}/expat-${PV}.tar.bz2 \
|
||||
file://CVE-2025-59375-22.patch \
|
||||
file://CVE-2025-59375-23.patch \
|
||||
file://CVE-2025-59375-24.patch \
|
||||
file://CVE-2026-24515-01.patch \
|
||||
file://CVE-2026-24515-02.patch \
|
||||
file://CVE-2026-25210-01.patch \
|
||||
file://CVE-2026-25210-02.patch \
|
||||
file://CVE-2026-25210-03.patch \
|
||||
"
|
||||
|
||||
GITHUB_BASE_URI = "https://github.com/libexpat/libexpat/releases/"
|
||||
|
||||
125
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-13601-01.patch
Normal file
@@ -0,0 +1,125 @@
|
||||
From f28340ee62c655487972ad3c632d231ee098fb7f Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Thu, 13 Nov 2025 18:27:22 +0000
|
||||
Subject: [PATCH] gconvert: Error out if g_escape_uri_string() would overflow
|
||||
|
||||
If the string to escape contains a very large number of unacceptable
|
||||
characters (which would need escaping), the calculation of the length of
|
||||
the escaped string could overflow, leading to a potential write off the
|
||||
end of the newly allocated string.
|
||||
|
||||
In addition to that, the number of unacceptable characters was counted
|
||||
in a signed integer, which would overflow to become negative, making it
|
||||
easier for an attacker to craft an input string which would cause an
|
||||
out-of-bounds write.
|
||||
|
||||
Fix that by validating the allocation length, and using an unsigned
|
||||
integer to count the number of unacceptable characters.
|
||||
|
||||
Spotted by treeplus. Thanks to the Sovereign Tech Resilience programme
|
||||
from the Sovereign Tech Agency. ID: #YWH-PGM9867-134
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
Fixes: #3827
|
||||
|
||||
CVE: CVE-2025-13601
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/f28340ee62c655487972ad3c632d231ee098fb7f]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
glib/gconvert.c | 36 +++++++++++++++++++++++++-----------
|
||||
1 file changed, 25 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/glib/gconvert.c b/glib/gconvert.c
|
||||
index b066dd5a8..a02d2ea73 100644
|
||||
--- a/glib/gconvert.c
|
||||
+++ b/glib/gconvert.c
|
||||
@@ -1428,8 +1428,9 @@ static const gchar hex[] = "0123456789ABCDEF";
|
||||
/* Note: This escape function works on file: URIs, but if you want to
|
||||
* escape something else, please read RFC-2396 */
|
||||
static gchar *
|
||||
-g_escape_uri_string (const gchar *string,
|
||||
- UnsafeCharacterSet mask)
|
||||
+g_escape_uri_string (const gchar *string,
|
||||
+ UnsafeCharacterSet mask,
|
||||
+ GError **error)
|
||||
{
|
||||
#define ACCEPTABLE(a) ((a)>=32 && (a)<128 && (acceptable[(a)-32] & use_mask))
|
||||
|
||||
@@ -1437,7 +1438,7 @@ g_escape_uri_string (const gchar *string,
|
||||
gchar *q;
|
||||
gchar *result;
|
||||
int c;
|
||||
- gint unacceptable;
|
||||
+ size_t unacceptable;
|
||||
UnsafeCharacterSet use_mask;
|
||||
|
||||
g_return_val_if_fail (mask == UNSAFE_ALL
|
||||
@@ -1454,7 +1455,14 @@ g_escape_uri_string (const gchar *string,
|
||||
if (!ACCEPTABLE (c))
|
||||
unacceptable++;
|
||||
}
|
||||
-
|
||||
+
|
||||
+ if (unacceptable >= (G_MAXSIZE - (p - string)) / 2)
|
||||
+ {
|
||||
+ g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_BAD_URI,
|
||||
+ _("The URI is too long"));
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
result = g_malloc (p - string + unacceptable * 2 + 1);
|
||||
|
||||
use_mask = mask;
|
||||
@@ -1479,12 +1487,13 @@ g_escape_uri_string (const gchar *string,
|
||||
|
||||
|
||||
static gchar *
|
||||
-g_escape_file_uri (const gchar *hostname,
|
||||
- const gchar *pathname)
|
||||
+g_escape_file_uri (const gchar *hostname,
|
||||
+ const gchar *pathname,
|
||||
+ GError **error)
|
||||
{
|
||||
char *escaped_hostname = NULL;
|
||||
- char *escaped_path;
|
||||
- char *res;
|
||||
+ char *escaped_path = NULL;
|
||||
+ char *res = NULL;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
char *p, *backslash;
|
||||
@@ -1505,10 +1514,14 @@ g_escape_file_uri (const gchar *hostname,
|
||||
|
||||
if (hostname && *hostname != '\0')
|
||||
{
|
||||
- escaped_hostname = g_escape_uri_string (hostname, UNSAFE_HOST);
|
||||
+ escaped_hostname = g_escape_uri_string (hostname, UNSAFE_HOST, error);
|
||||
+ if (escaped_hostname == NULL)
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
- escaped_path = g_escape_uri_string (pathname, UNSAFE_PATH);
|
||||
+ escaped_path = g_escape_uri_string (pathname, UNSAFE_PATH, error);
|
||||
+ if (escaped_path == NULL)
|
||||
+ goto out;
|
||||
|
||||
res = g_strconcat ("file://",
|
||||
(escaped_hostname) ? escaped_hostname : "",
|
||||
@@ -1516,6 +1529,7 @@ g_escape_file_uri (const gchar *hostname,
|
||||
escaped_path,
|
||||
NULL);
|
||||
|
||||
+out:
|
||||
#ifdef G_OS_WIN32
|
||||
g_free ((char *) pathname);
|
||||
#endif
|
||||
@@ -1849,7 +1863,7 @@ g_filename_to_uri (const gchar *filename,
|
||||
hostname = NULL;
|
||||
#endif
|
||||
|
||||
- escaped_uri = g_escape_file_uri (hostname, filename);
|
||||
+ escaped_uri = g_escape_file_uri (hostname, filename, error);
|
||||
|
||||
return escaped_uri;
|
||||
}
|
||||
128
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-13601-02.patch
Normal file
@@ -0,0 +1,128 @@
|
||||
From 7bd3fc372040cdf8eada7f65c32c30da52a7461d Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Thu, 13 Nov 2025 18:31:43 +0000
|
||||
Subject: [PATCH] fuzzing: Add fuzz tests for g_filename_{to,from}_uri()
|
||||
|
||||
These functions could be called on untrusted input data, and since they
|
||||
do URI escaping/unescaping, they have non-trivial string handling code.
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
See: #3827
|
||||
|
||||
CVE: CVE-2025-13601
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/7bd3fc372040cdf8eada7f65c32c30da52a7461d]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
fuzzing/fuzz_filename_from_uri.c | 40 ++++++++++++++++++++++++++++++++
|
||||
fuzzing/fuzz_filename_to_uri.c | 40 ++++++++++++++++++++++++++++++++
|
||||
fuzzing/meson.build | 2 ++
|
||||
3 files changed, 82 insertions(+)
|
||||
create mode 100644 fuzzing/fuzz_filename_from_uri.c
|
||||
create mode 100644 fuzzing/fuzz_filename_to_uri.c
|
||||
|
||||
diff --git a/fuzzing/fuzz_filename_from_uri.c b/fuzzing/fuzz_filename_from_uri.c
|
||||
new file mode 100644
|
||||
index 000000000..9b7a715f0
|
||||
--- /dev/null
|
||||
+++ b/fuzzing/fuzz_filename_from_uri.c
|
||||
@@ -0,0 +1,40 @@
|
||||
+/*
|
||||
+ * Copyright 2025 GNOME Foundation, Inc.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#include "fuzz.h"
|
||||
+
|
||||
+int
|
||||
+LLVMFuzzerTestOneInput (const unsigned char *data, size_t size)
|
||||
+{
|
||||
+ unsigned char *nul_terminated_data = NULL;
|
||||
+ char *filename = NULL;
|
||||
+ GError *local_error = NULL;
|
||||
+
|
||||
+ fuzz_set_logging_func ();
|
||||
+
|
||||
+ /* ignore @size (g_filename_from_uri() doesn’t support it); ensure @data is nul-terminated */
|
||||
+ nul_terminated_data = (unsigned char *) g_strndup ((const char *) data, size);
|
||||
+ filename = g_filename_from_uri ((const char *) nul_terminated_data, NULL, &local_error);
|
||||
+ g_free (nul_terminated_data);
|
||||
+
|
||||
+ g_free (filename);
|
||||
+ g_clear_error (&local_error);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/fuzzing/fuzz_filename_to_uri.c b/fuzzing/fuzz_filename_to_uri.c
|
||||
new file mode 100644
|
||||
index 000000000..acb319203
|
||||
--- /dev/null
|
||||
+++ b/fuzzing/fuzz_filename_to_uri.c
|
||||
@@ -0,0 +1,40 @@
|
||||
+/*
|
||||
+ * Copyright 2025 GNOME Foundation, Inc.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#include "fuzz.h"
|
||||
+
|
||||
+int
|
||||
+LLVMFuzzerTestOneInput (const unsigned char *data, size_t size)
|
||||
+{
|
||||
+ unsigned char *nul_terminated_data = NULL;
|
||||
+ char *uri = NULL;
|
||||
+ GError *local_error = NULL;
|
||||
+
|
||||
+ fuzz_set_logging_func ();
|
||||
+
|
||||
+ /* ignore @size (g_filename_to_uri() doesn’t support it); ensure @data is nul-terminated */
|
||||
+ nul_terminated_data = (unsigned char *) g_strndup ((const char *) data, size);
|
||||
+ uri = g_filename_to_uri ((const char *) nul_terminated_data, NULL, &local_error);
|
||||
+ g_free (nul_terminated_data);
|
||||
+
|
||||
+ g_free (uri);
|
||||
+ g_clear_error (&local_error);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/fuzzing/meson.build b/fuzzing/meson.build
|
||||
index addbe9071..05f936eeb 100644
|
||||
--- a/fuzzing/meson.build
|
||||
+++ b/fuzzing/meson.build
|
||||
@@ -22,6 +22,8 @@ fuzz_targets = [
|
||||
'fuzz_date_parse',
|
||||
'fuzz_date_time_new_from_iso8601',
|
||||
'fuzz_dbus_message',
|
||||
+ 'fuzz_filename_from_uri',
|
||||
+ 'fuzz_filename_to_uri',
|
||||
'fuzz_inet_address_mask_new_from_string',
|
||||
'fuzz_inet_address_new_from_string',
|
||||
'fuzz_inet_socket_address_new_from_string',
|
||||
69
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-14087-01.patch
Normal file
@@ -0,0 +1,69 @@
|
||||
From 31f82e22e21bae520b7228f7f57d357fb20df8a4 Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Tue, 25 Nov 2025 19:02:56 +0000
|
||||
Subject: [PATCH] gvariant-parser: Fix potential integer overflow parsing
|
||||
(byte)strings
|
||||
|
||||
The termination condition for parsing string and bytestring literals in
|
||||
GVariant text format input was subject to an integer overflow for input
|
||||
string (or bytestring) literals longer than `INT_MAX`.
|
||||
|
||||
Fix that by counting as a `size_t` rather than as an `int`. The counter
|
||||
can never correctly be negative.
|
||||
|
||||
Spotted by treeplus. Thanks to the Sovereign Tech Resilience programme
|
||||
from the Sovereign Tech Agency. ID: #YWH-PGM9867-145
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
Fixes: #3834
|
||||
|
||||
CVE: CVE-2025-14087
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/31f82e22e21bae520b7228f7f57d357fb20df8a4]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
glib/gvariant-parser.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
|
||||
index 2f1d3db9f..2d6e9856f 100644
|
||||
--- a/glib/gvariant-parser.c
|
||||
+++ b/glib/gvariant-parser.c
|
||||
@@ -597,7 +597,7 @@ ast_resolve (AST *ast,
|
||||
{
|
||||
GVariant *value;
|
||||
gchar *pattern;
|
||||
- gint i, j = 0;
|
||||
+ size_t i, j = 0;
|
||||
|
||||
pattern = ast_get_pattern (ast, error);
|
||||
|
||||
@@ -1621,9 +1621,9 @@ string_free (AST *ast)
|
||||
* No leading/trailing space allowed. */
|
||||
static gboolean
|
||||
unicode_unescape (const gchar *src,
|
||||
- gint *src_ofs,
|
||||
+ size_t *src_ofs,
|
||||
gchar *dest,
|
||||
- gint *dest_ofs,
|
||||
+ size_t *dest_ofs,
|
||||
gsize length,
|
||||
SourceRef *ref,
|
||||
GError **error)
|
||||
@@ -1684,7 +1684,7 @@ string_parse (TokenStream *stream,
|
||||
gsize length;
|
||||
gchar quote;
|
||||
gchar *str;
|
||||
- gint i, j;
|
||||
+ size_t i, j;
|
||||
|
||||
token_stream_start_ref (stream, &ref);
|
||||
token = token_stream_get (stream);
|
||||
@@ -1814,7 +1814,7 @@ bytestring_parse (TokenStream *stream,
|
||||
gsize length;
|
||||
gchar quote;
|
||||
gchar *str;
|
||||
- gint i, j;
|
||||
+ size_t i, j;
|
||||
|
||||
token_stream_start_ref (stream, &ref);
|
||||
token = token_stream_get (stream);
|
||||
240
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-14087-02.patch
Normal file
@@ -0,0 +1,240 @@
|
||||
From ac9de0871281cf734f6e269988f90a2521582a08 Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Tue, 25 Nov 2025 19:19:16 +0000
|
||||
Subject: [PATCH] gvariant-parser: Use size_t to count numbers of child
|
||||
elements
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Rather than using `gint`, which could overflow for arrays (or dicts, or
|
||||
tuples) longer than `INT_MAX`. There may be other limits which prevent
|
||||
parsed containers becoming that long, but we might as well make the type
|
||||
system reflect the programmer’s intention as best it can anyway.
|
||||
|
||||
For arrays and tuples this is straightforward. For dictionaries, it’s
|
||||
slightly complicated by the fact that the code used
|
||||
`dict->n_children == -1` to indicate that the `Dictionary` struct in
|
||||
question actually represented a single freestanding dict entry. In
|
||||
GVariant text format, that would be `{1, "one"}`.
|
||||
|
||||
The implementation previously didn’t define the semantics of
|
||||
`dict->n_children < -1`.
|
||||
|
||||
Now, instead, change `Dictionary.n_children` to `size_t`, and define a
|
||||
magic value `DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY` to indicate that
|
||||
the `Dictionary` represents a single freestanding dict entry.
|
||||
|
||||
This magic value is `SIZE_MAX`, and given that a dictionary entry takes
|
||||
more than one byte to represent in GVariant text format, that means it’s
|
||||
not possible to have that many entries in a parsed dictionary, so this
|
||||
magic value won’t be hit by a normal dictionary. An assertion checks
|
||||
this anyway.
|
||||
|
||||
Spotted while working on #3834.
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
CVE: CVE-2025-14087
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/ac9de0871281cf734f6e269988f90a2521582a08]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
glib/gvariant-parser.c | 58 ++++++++++++++++++++++++------------------
|
||||
1 file changed, 33 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
|
||||
index 2d6e9856f..519baa3f3 100644
|
||||
--- a/glib/gvariant-parser.c
|
||||
+++ b/glib/gvariant-parser.c
|
||||
@@ -650,9 +650,9 @@ static AST *parse (TokenStream *stream,
|
||||
GError **error);
|
||||
|
||||
static void
|
||||
-ast_array_append (AST ***array,
|
||||
- gint *n_items,
|
||||
- AST *ast)
|
||||
+ast_array_append (AST ***array,
|
||||
+ size_t *n_items,
|
||||
+ AST *ast)
|
||||
{
|
||||
if ((*n_items & (*n_items - 1)) == 0)
|
||||
*array = g_renew (AST *, *array, *n_items ? 2 ** n_items : 1);
|
||||
@@ -661,10 +661,10 @@ ast_array_append (AST ***array,
|
||||
}
|
||||
|
||||
static void
|
||||
-ast_array_free (AST **array,
|
||||
- gint n_items)
|
||||
+ast_array_free (AST **array,
|
||||
+ size_t n_items)
|
||||
{
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
for (i = 0; i < n_items; i++)
|
||||
ast_free (array[i]);
|
||||
@@ -673,11 +673,11 @@ ast_array_free (AST **array,
|
||||
|
||||
static gchar *
|
||||
ast_array_get_pattern (AST **array,
|
||||
- gint n_items,
|
||||
+ size_t n_items,
|
||||
GError **error)
|
||||
{
|
||||
gchar *pattern;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
/* Find the pattern which applies to all children in the array, by l-folding a
|
||||
* coalesce operation.
|
||||
@@ -709,7 +709,7 @@ ast_array_get_pattern (AST **array,
|
||||
* pair of values.
|
||||
*/
|
||||
{
|
||||
- int j = 0;
|
||||
+ size_t j = 0;
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
@@ -957,7 +957,7 @@ typedef struct
|
||||
AST ast;
|
||||
|
||||
AST **children;
|
||||
- gint n_children;
|
||||
+ size_t n_children;
|
||||
} Array;
|
||||
|
||||
static gchar *
|
||||
@@ -990,7 +990,7 @@ array_get_value (AST *ast,
|
||||
Array *array = (Array *) ast;
|
||||
const GVariantType *childtype;
|
||||
GVariantBuilder builder;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
if (!g_variant_type_is_array (type))
|
||||
return ast_type_error (ast, type, error);
|
||||
@@ -1076,7 +1076,7 @@ typedef struct
|
||||
AST ast;
|
||||
|
||||
AST **children;
|
||||
- gint n_children;
|
||||
+ size_t n_children;
|
||||
} Tuple;
|
||||
|
||||
static gchar *
|
||||
@@ -1086,7 +1086,7 @@ tuple_get_pattern (AST *ast,
|
||||
Tuple *tuple = (Tuple *) ast;
|
||||
gchar *result = NULL;
|
||||
gchar **parts;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
parts = g_new (gchar *, tuple->n_children + 4);
|
||||
parts[tuple->n_children + 1] = (gchar *) ")";
|
||||
@@ -1116,7 +1116,7 @@ tuple_get_value (AST *ast,
|
||||
Tuple *tuple = (Tuple *) ast;
|
||||
const GVariantType *childtype;
|
||||
GVariantBuilder builder;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
if (!g_variant_type_is_tuple (type))
|
||||
return ast_type_error (ast, type, error);
|
||||
@@ -1308,9 +1308,16 @@ typedef struct
|
||||
|
||||
AST **keys;
|
||||
AST **values;
|
||||
- gint n_children;
|
||||
+
|
||||
+ /* Iff this is DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY then this struct
|
||||
+ * represents a single freestanding dict entry (`{1, "one"}`) rather than a
|
||||
+ * full dict. In the freestanding case, @keys and @values have exactly one
|
||||
+ * member each. */
|
||||
+ size_t n_children;
|
||||
} Dictionary;
|
||||
|
||||
+#define DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY ((size_t) -1)
|
||||
+
|
||||
static gchar *
|
||||
dictionary_get_pattern (AST *ast,
|
||||
GError **error)
|
||||
@@ -1325,7 +1332,7 @@ dictionary_get_pattern (AST *ast,
|
||||
return g_strdup ("Ma{**}");
|
||||
|
||||
key_pattern = ast_array_get_pattern (dict->keys,
|
||||
- abs (dict->n_children),
|
||||
+ (dict->n_children == DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY) ? 1 : dict->n_children,
|
||||
error);
|
||||
|
||||
if (key_pattern == NULL)
|
||||
@@ -1356,7 +1363,7 @@ dictionary_get_pattern (AST *ast,
|
||||
return NULL;
|
||||
|
||||
result = g_strdup_printf ("M%s{%c%s}",
|
||||
- dict->n_children > 0 ? "a" : "",
|
||||
+ (dict->n_children > 0 && dict->n_children != DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY) ? "a" : "",
|
||||
key_char, value_pattern);
|
||||
g_free (value_pattern);
|
||||
|
||||
@@ -1370,7 +1377,7 @@ dictionary_get_value (AST *ast,
|
||||
{
|
||||
Dictionary *dict = (Dictionary *) ast;
|
||||
|
||||
- if (dict->n_children == -1)
|
||||
+ if (dict->n_children == DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY)
|
||||
{
|
||||
const GVariantType *subtype;
|
||||
GVariantBuilder builder;
|
||||
@@ -1403,7 +1410,7 @@ dictionary_get_value (AST *ast,
|
||||
{
|
||||
const GVariantType *entry, *key, *val;
|
||||
GVariantBuilder builder;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
if (!g_variant_type_is_subtype_of (type, G_VARIANT_TYPE_DICTIONARY))
|
||||
return ast_type_error (ast, type, error);
|
||||
@@ -1444,12 +1451,12 @@ static void
|
||||
dictionary_free (AST *ast)
|
||||
{
|
||||
Dictionary *dict = (Dictionary *) ast;
|
||||
- gint n_children;
|
||||
+ size_t n_children;
|
||||
|
||||
- if (dict->n_children > -1)
|
||||
- n_children = dict->n_children;
|
||||
- else
|
||||
+ if (dict->n_children == DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY)
|
||||
n_children = 1;
|
||||
+ else
|
||||
+ n_children = dict->n_children;
|
||||
|
||||
ast_array_free (dict->keys, n_children);
|
||||
ast_array_free (dict->values, n_children);
|
||||
@@ -1467,7 +1474,7 @@ dictionary_parse (TokenStream *stream,
|
||||
maybe_wrapper, dictionary_get_value,
|
||||
dictionary_free
|
||||
};
|
||||
- gint n_keys, n_values;
|
||||
+ size_t n_keys, n_values;
|
||||
gboolean only_one;
|
||||
Dictionary *dict;
|
||||
AST *first;
|
||||
@@ -1510,7 +1517,7 @@ dictionary_parse (TokenStream *stream,
|
||||
goto error;
|
||||
|
||||
g_assert (n_keys == 1 && n_values == 1);
|
||||
- dict->n_children = -1;
|
||||
+ dict->n_children = DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY;
|
||||
|
||||
return (AST *) dict;
|
||||
}
|
||||
@@ -1543,6 +1550,7 @@ dictionary_parse (TokenStream *stream,
|
||||
}
|
||||
|
||||
g_assert (n_keys == n_values);
|
||||
+ g_assert (n_keys != DICTIONARY_N_CHILDREN_FREESTANDING_ENTRY);
|
||||
dict->n_children = n_keys;
|
||||
|
||||
return (AST *) dict;
|
||||
150
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-14087-03.patch
Normal file
@@ -0,0 +1,150 @@
|
||||
From acaabfedff42e974334dd5368e6103d2845aaba6 Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Tue, 25 Nov 2025 19:25:58 +0000
|
||||
Subject: [PATCH] gvariant-parser: Convert error handling code to use size_t
|
||||
|
||||
The error handling code allows for printing out the range of input bytes
|
||||
related to a parsing error. This was previously done using `gint`, but
|
||||
the input could be longer than `INT_MAX`, so it should really be done
|
||||
using `size_t`.
|
||||
|
||||
Spotted while working on #3834.
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
CVE: CVE-2025-14087
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/acaabfedff42e974334dd5368e6103d2845aaba6]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
glib/gvariant-parser.c | 36 +++++++++++++++++++++++-------------
|
||||
1 file changed, 23 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
|
||||
index 519baa3f3..1b1ddd654 100644
|
||||
--- a/glib/gvariant-parser.c
|
||||
+++ b/glib/gvariant-parser.c
|
||||
@@ -91,7 +91,9 @@ g_variant_parser_get_error_quark (void)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
- gint start, end;
|
||||
+ /* Offsets from the start of the input, in bytes. Can be equal when referring
|
||||
+ * to a point rather than a range. The invariant `end >= start` always holds. */
|
||||
+ size_t start, end;
|
||||
} SourceRef;
|
||||
|
||||
G_GNUC_PRINTF(5, 0)
|
||||
@@ -106,14 +108,16 @@ parser_set_error_va (GError **error,
|
||||
GString *msg = g_string_new (NULL);
|
||||
|
||||
if (location->start == location->end)
|
||||
- g_string_append_printf (msg, "%d", location->start);
|
||||
+ g_string_append_printf (msg, "%" G_GSIZE_FORMAT, location->start);
|
||||
else
|
||||
- g_string_append_printf (msg, "%d-%d", location->start, location->end);
|
||||
+ g_string_append_printf (msg, "%" G_GSIZE_FORMAT "-%" G_GSIZE_FORMAT,
|
||||
+ location->start, location->end);
|
||||
|
||||
if (other != NULL)
|
||||
{
|
||||
g_assert (other->start != other->end);
|
||||
- g_string_append_printf (msg, ",%d-%d", other->start, other->end);
|
||||
+ g_string_append_printf (msg, ",%" G_GSIZE_FORMAT "-%" G_GSIZE_FORMAT,
|
||||
+ other->start, other->end);
|
||||
}
|
||||
g_string_append_c (msg, ':');
|
||||
|
||||
@@ -140,11 +144,15 @@ parser_set_error (GError **error,
|
||||
|
||||
typedef struct
|
||||
{
|
||||
+ /* We should always have the following ordering constraint:
|
||||
+ * start <= this <= stream <= end
|
||||
+ * Additionally, unless in an error or EOF state, `this < stream`.
|
||||
+ */
|
||||
const gchar *start;
|
||||
const gchar *stream;
|
||||
const gchar *end;
|
||||
|
||||
- const gchar *this;
|
||||
+ const gchar *this; /* (nullable) */
|
||||
} TokenStream;
|
||||
|
||||
|
||||
@@ -175,7 +183,7 @@ token_stream_set_error (TokenStream *stream,
|
||||
static gboolean
|
||||
token_stream_prepare (TokenStream *stream)
|
||||
{
|
||||
- gint brackets = 0;
|
||||
+ gssize brackets = 0;
|
||||
const gchar *end;
|
||||
|
||||
if (stream->this != NULL)
|
||||
@@ -405,7 +413,7 @@ static void
|
||||
pattern_copy (gchar **out,
|
||||
const gchar **in)
|
||||
{
|
||||
- gint brackets = 0;
|
||||
+ gssize brackets = 0;
|
||||
|
||||
while (**in == 'a' || **in == 'm' || **in == 'M')
|
||||
*(*out)++ = *(*in)++;
|
||||
@@ -2742,7 +2750,7 @@ g_variant_builder_add_parsed (GVariantBuilder *builder,
|
||||
static gboolean
|
||||
parse_num (const gchar *num,
|
||||
const gchar *limit,
|
||||
- guint *result)
|
||||
+ size_t *result)
|
||||
{
|
||||
gchar *endptr;
|
||||
gint64 bignum;
|
||||
@@ -2752,10 +2760,12 @@ parse_num (const gchar *num,
|
||||
if (endptr != limit)
|
||||
return FALSE;
|
||||
|
||||
+ /* The upper bound here is more restrictive than it technically needs to be,
|
||||
+ * but should be enough for any practical situation: */
|
||||
if (bignum < 0 || bignum > G_MAXINT)
|
||||
return FALSE;
|
||||
|
||||
- *result = (guint) bignum;
|
||||
+ *result = (size_t) bignum;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2766,7 +2776,7 @@ add_last_line (GString *err,
|
||||
{
|
||||
const gchar *last_nl;
|
||||
gchar *chomped;
|
||||
- gint i;
|
||||
+ size_t i;
|
||||
|
||||
/* This is an error at the end of input. If we have a file
|
||||
* with newlines, that's probably the empty string after the
|
||||
@@ -2911,7 +2921,7 @@ g_variant_parse_error_print_context (GError *error,
|
||||
|
||||
if (dash == NULL || colon < dash)
|
||||
{
|
||||
- guint point;
|
||||
+ size_t point;
|
||||
|
||||
/* we have a single point */
|
||||
if (!parse_num (error->message, colon, &point))
|
||||
@@ -2929,7 +2939,7 @@ g_variant_parse_error_print_context (GError *error,
|
||||
/* We have one or two ranges... */
|
||||
if (comma && comma < colon)
|
||||
{
|
||||
- guint start1, end1, start2, end2;
|
||||
+ size_t start1, end1, start2, end2;
|
||||
const gchar *dash2;
|
||||
|
||||
/* Two ranges */
|
||||
@@ -2945,7 +2955,7 @@ g_variant_parse_error_print_context (GError *error,
|
||||
}
|
||||
else
|
||||
{
|
||||
- guint start, end;
|
||||
+ size_t start, end;
|
||||
|
||||
/* One range */
|
||||
if (!parse_num (error->message, dash, &start) || !parse_num (dash + 1, colon, &end))
|
||||
70
meta/recipes-core/glib-2.0/glib-2.0/CVE-2025-14512.patch
Normal file
@@ -0,0 +1,70 @@
|
||||
From 1909d8ea9297287f1ff6862968608dcf06e60523 Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Thu, 4 Dec 2025 16:37:19 +0000
|
||||
Subject: [PATCH] gfileattribute: Fix integer overflow calculating escaping for
|
||||
byte strings
|
||||
|
||||
The number of invalid characters in the byte string (characters which
|
||||
would have to be percent-encoded) was only stored in an `int`, which
|
||||
gave the possibility of a long string largely full of invalid
|
||||
characters overflowing this and allowing an attacker-controlled buffer
|
||||
size to be allocated.
|
||||
|
||||
This could be triggered by an attacker controlled file attribute (of
|
||||
type `G_FILE_ATTRIBUTE_TYPE_BYTE_STRING`), such as
|
||||
`G_FILE_ATTRIBUTE_THUMBNAIL_PATH` or `G_FILE_ATTRIBUTE_STANDARD_NAME`,
|
||||
being read by user code.
|
||||
|
||||
Spotted by Codean Labs.
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
Fixes: #3845
|
||||
|
||||
CVE: CVE-2025-14512
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/1909d8ea9297287f1ff6862968608dcf06e60523]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
gio/gfileattribute.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gio/gfileattribute.c b/gio/gfileattribute.c
|
||||
index c6fde60fa..d3083e5bd 100644
|
||||
--- a/gio/gfileattribute.c
|
||||
+++ b/gio/gfileattribute.c
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
+#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "gfileattribute.h"
|
||||
@@ -273,11 +274,12 @@ valid_char (char c)
|
||||
return c >= 32 && c <= 126 && c != '\\';
|
||||
}
|
||||
|
||||
+/* Returns NULL on error */
|
||||
static char *
|
||||
escape_byte_string (const char *str)
|
||||
{
|
||||
size_t i, len;
|
||||
- int num_invalid;
|
||||
+ size_t num_invalid;
|
||||
char *escaped_val, *p;
|
||||
unsigned char c;
|
||||
const char hex_digits[] = "0123456789abcdef";
|
||||
@@ -295,7 +297,12 @@ escape_byte_string (const char *str)
|
||||
return g_strdup (str);
|
||||
else
|
||||
{
|
||||
- escaped_val = g_malloc (len + num_invalid*3 + 1);
|
||||
+ /* Check for overflow. We want to check the inequality:
|
||||
+ * !(len + num_invalid * 3 + 1 > SIZE_MAX) */
|
||||
+ if (num_invalid >= (SIZE_MAX - len) / 3)
|
||||
+ return NULL;
|
||||
+
|
||||
+ escaped_val = g_malloc (len + num_invalid * 3 + 1);
|
||||
|
||||
p = escaped_val;
|
||||
for (i = 0; i < len; i++)
|
||||
58
meta/recipes-core/glib-2.0/glib-2.0/CVE-2026-0988.patch
Normal file
@@ -0,0 +1,58 @@
|
||||
From c5766cff61ffce0b8e787eae09908ac348338e5f Mon Sep 17 00:00:00 2001
|
||||
From: Philip Withnall <pwithnall@gnome.org>
|
||||
Date: Thu, 18 Dec 2025 23:12:18 +0000
|
||||
Subject: [PATCH] gbufferedinputstream: Fix a potential integer overflow in
|
||||
peek()
|
||||
|
||||
If the caller provides `offset` and `count` arguments which overflow,
|
||||
their sum will overflow and could lead to `memcpy()` reading out more
|
||||
memory than expected.
|
||||
|
||||
Spotted by Codean Labs.
|
||||
|
||||
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
|
||||
|
||||
Fixes: #3851
|
||||
|
||||
CVE: CVE-2026-0988
|
||||
Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/c5766cff61ffce0b8e787eae09908ac348338e5f]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
gio/gbufferedinputstream.c | 2 +-
|
||||
gio/tests/buffered-input-stream.c | 10 ++++++++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gio/gbufferedinputstream.c b/gio/gbufferedinputstream.c
|
||||
index 9e6bacc62..56d656be0 100644
|
||||
--- a/gio/gbufferedinputstream.c
|
||||
+++ b/gio/gbufferedinputstream.c
|
||||
@@ -590,7 +590,7 @@ g_buffered_input_stream_peek (GBufferedInputStream *stream,
|
||||
|
||||
available = g_buffered_input_stream_get_available (stream);
|
||||
|
||||
- if (offset > available)
|
||||
+ if (offset > available || offset > G_MAXSIZE - count)
|
||||
return 0;
|
||||
|
||||
end = MIN (offset + count, available);
|
||||
diff --git a/gio/tests/buffered-input-stream.c b/gio/tests/buffered-input-stream.c
|
||||
index a1af4eeff..2b2a0d9aa 100644
|
||||
--- a/gio/tests/buffered-input-stream.c
|
||||
+++ b/gio/tests/buffered-input-stream.c
|
||||
@@ -60,6 +60,16 @@ test_peek (void)
|
||||
g_assert_cmpint (npeek, ==, 0);
|
||||
g_free (buffer);
|
||||
|
||||
+ buffer = g_new0 (char, 64);
|
||||
+ npeek = g_buffered_input_stream_peek (G_BUFFERED_INPUT_STREAM (in), buffer, 8, 0);
|
||||
+ g_assert_cmpint (npeek, ==, 0);
|
||||
+ g_free (buffer);
|
||||
+
|
||||
+ buffer = g_new0 (char, 64);
|
||||
+ npeek = g_buffered_input_stream_peek (G_BUFFERED_INPUT_STREAM (in), buffer, 5, G_MAXSIZE);
|
||||
+ g_assert_cmpint (npeek, ==, 0);
|
||||
+ g_free (buffer);
|
||||
+
|
||||
g_object_unref (in);
|
||||
g_object_unref (base);
|
||||
}
|
||||
@@ -33,6 +33,13 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
|
||||
file://CVE-2025-6052-01.patch \
|
||||
file://CVE-2025-6052-02.patch \
|
||||
file://CVE-2025-6052-03.patch \
|
||||
file://CVE-2025-13601-01.patch \
|
||||
file://CVE-2025-13601-02.patch \
|
||||
file://CVE-2025-14087-01.patch \
|
||||
file://CVE-2025-14087-02.patch \
|
||||
file://CVE-2025-14087-03.patch \
|
||||
file://CVE-2025-14512.patch \
|
||||
file://CVE-2026-0988.patch \
|
||||
"
|
||||
SRC_URI:append:class-native = " file://relocate-modules.patch \
|
||||
file://0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
SRCBRANCH ?= "release/2.39/master"
|
||||
PV = "2.39+git"
|
||||
SRCREV_glibc ?= "58cbbd43fe82910cf8ae9008351b0b0665104500"
|
||||
SRCREV_glibc ?= "ce65d944e38a20cb70af2a48a4b8aa5d8fabe1cc"
|
||||
SRCREV_localedef ?= "cba02c503d7c853a38ccfb83c57e343ca5ecd7e5"
|
||||
|
||||
GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git;protocol=https"
|
||||
|
||||