summaryrefslogtreecommitdiffstats
path: root/documentation/ref-manual
diff options
context:
space:
mode:
authorMichael Opdenacker <michael.opdenacker@bootlin.com>2022-12-02 15:50:48 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-12-07 15:04:15 +0000
commitc8839099506ee9c694f5b9da3ef6cc7cf0b2c142 (patch)
tree2ec7cac1be39f8765f1ebca1e19c1cdbe21af205 /documentation/ref-manual
parentbe95d5f93abf2bce807f33fa0d9ae38e49fdbcce (diff)
downloadpoky-c8839099506ee9c694f5b9da3ef6cc7cf0b2c142.tar.gz
SPDX and CVE documentation updates
Backporting from master the ones that are applicable to kirkstone. (From yocto-docs rev: c10d65ef3bbdf4fe3abc03e3aef3d4ca8c2ad87f) Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com> Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/ref-manual')
-rw-r--r--documentation/ref-manual/classes.rst96
-rw-r--r--documentation/ref-manual/terms.rst28
-rw-r--r--documentation/ref-manual/variables.rst109
3 files changed, 229 insertions, 4 deletions
diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst
index a6dafe8f90..6e73c5d4fb 100644
--- a/documentation/ref-manual/classes.rst
+++ b/documentation/ref-manual/classes.rst
@@ -361,6 +361,32 @@ authors used.
361Both build methods inherit the ``cpan-base`` class for basic Perl 361Both build methods inherit the ``cpan-base`` class for basic Perl
362support. 362support.
363 363
364.. _ref-classes-create-spdx:
365
366``create-spdx.bbclass``
367=======================
368
369The :ref:`create-spdx <ref-classes-create-spdx>` class provides support for
370automatically creating :term:`SPDX` :term:`SBOM` documents based upon image
371and SDK contents.
372
373This class is meant to be inherited globally from a configuration file::
374
375 INHERIT += "create-spdx"
376
377The toplevel :term:`SPDX` output file is generated in JSON format as a
378``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the
379:term:`Build Directory`. There are other related files in the same directory,
380as well as in ``tmp/deploy/spdx``.
381
382The exact behaviour of this class, and the amount of output can be controlled
383by the :term:`SPDX_ARCHIVE_PACKAGED`, :term:`SPDX_ARCHIVE_SOURCES` and
384:term:`SPDX_INCLUDE_SOURCES` variables.
385
386See the description of these variables and the
387":ref:`dev-manual/common-tasks:creating a software bill of materials`"
388section in the Yocto Project Development Manual for more details.
389
364.. _ref-classes-cross: 390.. _ref-classes-cross:
365 391
366``cross.bbclass`` 392``cross.bbclass``
@@ -396,14 +422,62 @@ discussion on these cross-compilation tools.
396``cve-check.bbclass`` 422``cve-check.bbclass``
397===================== 423=====================
398 424
399The ``cve-check`` class looks for known CVEs (Common Vulnerabilities 425The :ref:`cve-check <ref-classes-cve-check>` class looks for known CVEs (Common Vulnerabilities
400and Exposures) while building an image. This class is meant to be 426and Exposures) while building with BitBake. This class is meant to be
401inherited globally from a configuration file:: 427inherited globally from a configuration file::
402 428
403 INHERIT += "cve-check" 429 INHERIT += "cve-check"
404 430
431To filter out obsolete CVE database entries which are known not to impact software from Poky and OE-Core,
432add following line to the build configuration file::
433
434 include cve-extra-exclusions.inc
435
405You can also look for vulnerabilities in specific packages by passing 436You can also look for vulnerabilities in specific packages by passing
406``-c cve_check`` to BitBake. You will find details in the 437``-c cve_check`` to BitBake.
438
439After building the software with Bitbake, CVE check output reports are available in ``tmp/deploy/cve``
440and image specific summaries in ``tmp/deploy/images/*.cve`` or ``tmp/deploy/images/*.json`` files.
441
442When building, the CVE checker will emit build time warnings for any detected
443issues which are in the state ``Unpatched``, meaning that CVE issue seems to affect the software component
444and version being compiled and no patches to address the issue are applied. Other states
445for detected CVE issues are: ``Patched`` meaning that a patch to address the issue is already
446applied, and ``Ignored`` meaning that the issue can be ignored.
447
448The ``Patched`` state of a CVE issue is detected from patch files with the format
449``CVE-ID.patch``, e.g. ``CVE-2019-20633.patch``, in the :term:`SRC_URI` and using
450CVE metadata of format ``CVE: CVE-ID`` in the commit message of the patch file.
451
452If the recipe lists the ``CVE-ID`` in :term:`CVE_CHECK_IGNORE` variable, then the CVE state is reported
453as ``Ignored``. Multiple CVEs can be listed separated by spaces. Example::
454
455 CVE_CHECK_IGNORE += "CVE-2020-29509 CVE-2020-29511"
456
457If CVE check reports that a recipe contains false positives or false negatives, these may be
458fixed in recipes by adjusting the CVE product name using :term:`CVE_PRODUCT` and :term:`CVE_VERSION` variables.
459:term:`CVE_PRODUCT` defaults to the plain recipe name :term:`BPN` which can be adjusted to one or more CVE
460database vendor and product pairs using the syntax::
461
462 CVE_PRODUCT = "flex_project:flex"
463
464where ``flex_project`` is the CVE database vendor name and ``flex`` is the product name. Similarly
465if the default recipe version :term:`PV` does not match the version numbers of the software component
466in upstream releases or the CVE database, then the :term:`CVE_VERSION` variable can be used to set the
467CVE database compatible version number, for example::
468
469 CVE_VERSION = "2.39"
470
471Any bugs or missing or incomplete information in the CVE database entries should be fixed in the CVE database
472via the `NVD feedback form <https://nvd.nist.gov/info/contact-form>`__.
473
474Users should note that security is a process, not a product, and thus also CVE checking, analyzing results,
475patching and updating the software should be done as a regular process. The data and assumptions
476required for CVE checker to reliably detect issues are frequently broken in various ways.
477These can only be detected by reviewing the details of the issues and iterating over the generated reports,
478and following what happens in other Linux distributions and in the greater open source community.
479
480You will find some more details in the
407":ref:`dev-manual/common-tasks:checking for vulnerabilities`" 481":ref:`dev-manual/common-tasks:checking for vulnerabilities`"
408section in the Development Tasks Manual. 482section in the Development Tasks Manual.
409 483
@@ -1975,6 +2049,22 @@ When inherited by a recipe, the ``perlnative`` class supports using the
1975native version of Perl built by the build system rather than using the 2049native version of Perl built by the build system rather than using the
1976version provided by the build host. 2050version provided by the build host.
1977 2051
2052.. _ref-classes-pypi:
2053
2054``pypi.bbclass``
2055================
2056
2057The :ref:`pypi <ref-classes-pypi>` class sets variables appropriately for recipes that build
2058Python modules from `PyPI <https://pypi.org/>`__, the Python Package Index.
2059By default it determines the PyPI package name based upon :term:`BPN`
2060(stripping the "python-" or "python3-" prefix off if present), however in
2061some cases you may need to set it manually in the recipe by setting
2062:term:`PYPI_PACKAGE`.
2063
2064Variables set by the :ref:`pypi <ref-classes-pypi>` class include :term:`SRC_URI`, :term:`SECTION`,
2065:term:`HOMEPAGE`, :term:`UPSTREAM_CHECK_URI`, :term:`UPSTREAM_CHECK_REGEX`
2066and :term:`CVE_PRODUCT`.
2067
1978.. _ref-classes-python_flit_core: 2068.. _ref-classes-python_flit_core:
1979 2069
1980``python_flit_core.bbclass`` 2070``python_flit_core.bbclass``
diff --git a/documentation/ref-manual/terms.rst b/documentation/ref-manual/terms.rst
index cba514c345..a9c84fe3a5 100644
--- a/documentation/ref-manual/terms.rst
+++ b/documentation/ref-manual/terms.rst
@@ -323,6 +323,23 @@ universal, the list includes them just in case:
323 :term:`build host<Build Host>` and other components, that can 323 :term:`build host<Build Host>` and other components, that can
324 work on specific hardware. 324 work on specific hardware.
325 325
326 :term:`SBOM`
327 This term means *Software Bill of Materials*. When you distribute
328 software, it offers a description of all the components you used,
329 their corresponding licenses, their dependencies, the changes that were
330 applied and the known vulnerabilities that were fixed.
331
332 This can be used by the recipients of the software to assess
333 their exposure to license compliance and security vulnerability issues.
334
335 See the :wikipedia:`Software Supply Chain <Software_supply_chain>`
336 article on Wikipedia for more details.
337
338 The OpenEmbedded Build System can generate such documentation for your
339 project, in :term:`SPDX` format, based on all the metadata it used to
340 build the software images. See the ":ref:`dev-manual/common-tasks:creating
341 a software bill of materials`" section of the Development Tasks manual.
342
326 :term:`Source Directory` 343 :term:`Source Directory`
327 This term refers to the directory structure 344 This term refers to the directory structure
328 created as a result of creating a local copy of the ``poky`` Git 345 created as a result of creating a local copy of the ``poky`` Git
@@ -383,6 +400,17 @@ universal, the list includes them just in case:
383 ":ref:`overview-manual/development-environment:repositories, tags, and branches`" 400 ":ref:`overview-manual/development-environment:repositories, tags, and branches`"
384 section in the Yocto Project Overview and Concepts Manual. 401 section in the Yocto Project Overview and Concepts Manual.
385 402
403 :term:`SPDX`
404 This term means *Software Package Data Exchange*, and is used as a open
405 standard for providing a *Software Bill of Materials* (:term:`SBOM`).
406 This standard is developed through a `Linux Foundation project
407 <https://spdx.dev/>`__ and is used by the OpenEmbedded Build System to
408 provide an :term:`SBOM` associated to each a software image.
409
410 For details, see Wikipedia's :wikipedia:`SPDX page <Software_Package_Data_Exchange>`
411 and the ":ref:`dev-manual/common-tasks:creating a software bill of materials`"
412 section of the Development Tasks manual.
413
386 :term:`Task` 414 :term:`Task`
387 A per-recipe unit of execution for BitBake (e.g. 415 A per-recipe unit of execution for BitBake (e.g.
388 :ref:`ref-tasks-compile`, 416 :ref:`ref-tasks-compile`,
diff --git a/documentation/ref-manual/variables.rst b/documentation/ref-manual/variables.rst
index 47462233c9..c182478a31 100644
--- a/documentation/ref-manual/variables.rst
+++ b/documentation/ref-manual/variables.rst
@@ -1469,15 +1469,31 @@ system and gives an overview of their function and contents.
1469 # This is windows only issue. 1469 # This is windows only issue.
1470 CVE_CHECK_IGNORE += "CVE-2020-15523" 1470 CVE_CHECK_IGNORE += "CVE-2020-15523"
1471 1471
1472 :term:`CVE_CHECK_SHOW_WARNINGS`
1473 Specifies whether or not the :ref:`cve-check <ref-classes-cve-check>`
1474 class should generate warning messages on the console when unpatched
1475 CVEs are found. The default is "1", but you may wish to set it to "0" if
1476 you are already examining/processing the logs after the build has
1477 completed and thus do not need the warning messages.
1478
1472 :term:`CVE_CHECK_SKIP_RECIPE` 1479 :term:`CVE_CHECK_SKIP_RECIPE`
1473 The list of package names (:term:`PN`) for which 1480 The list of package names (:term:`PN`) for which
1474 CVEs (Common Vulnerabilities and Exposures) are ignored. 1481 CVEs (Common Vulnerabilities and Exposures) are ignored.
1475 1482
1483 :term:`CVE_DB_UPDATE_INTERVAL`
1484 Specifies the CVE database update interval in seconds, as used by
1485 ``cve-update-db-native``. The default value is "86400" i.e. once a day
1486 (24*60*60). If the value is set to "0" then the update will be forced
1487 every time. Alternatively, a negative value e.g. "-1" will disable
1488 updates entirely.
1489
1476 :term:`CVE_PRODUCT` 1490 :term:`CVE_PRODUCT`
1477 In a recipe, defines the name used to match the recipe name 1491 In a recipe, defines the name used to match the recipe name
1478 against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__. 1492 against the name in the upstream `NIST CVE database <https://nvd.nist.gov/>`__.
1479 1493
1480 The default is ${:term:`BPN`}. If it does not match the name in the NIST CVE 1494 The default is ${:term:`BPN`} (except for recipes that inherit the
1495 :ref:`pypi <ref-classes-pypi>` class where it is set based upon
1496 :term:`PYPI_PACKAGE`). If it does not match the name in the NIST CVE
1481 database or matches with multiple entries in the database, the default 1497 database or matches with multiple entries in the database, the default
1482 value needs to be changed. 1498 value needs to be changed.
1483 1499
@@ -1492,6 +1508,18 @@ system and gives an overview of their function and contents.
1492 1508
1493 CVE_PRODUCT = "vendor:package" 1509 CVE_PRODUCT = "vendor:package"
1494 1510
1511 :term:`CVE_VERSION`
1512 In a recipe, defines the version used to match the recipe version
1513 against the version in the `NIST CVE database <https://nvd.nist.gov/>`__
1514 when usign :ref:`cve-check <ref-classes-cve-check>`.
1515
1516 The default is ${:term:`PV`} but if recipes use custom version numbers
1517 which do not map to upstream software component release versions and the versions
1518 used in the CVE database, then this variable can be used to set the
1519 version number for :ref:`cve-check <ref-classes-cve-check>`. Example::
1520
1521 CVE_VERSION = "2.39"
1522
1495 :term:`CVSDIR` 1523 :term:`CVSDIR`
1496 The directory in which files checked out under the CVS system are 1524 The directory in which files checked out under the CVS system are
1497 stored. 1525 stored.
@@ -6089,6 +6117,14 @@ system and gives an overview of their function and contents.
6089 6117
6090 :term:`PV` is the default value of the :term:`PKGV` variable. 6118 :term:`PV` is the default value of the :term:`PKGV` variable.
6091 6119
6120 :term:`PYPI_PACKAGE`
6121 When inheriting the :ref:`pypi <ref-classes-pypi>` class, specifies the
6122 `PyPI <https://pypi.org/>`__ package name to be built. The default value
6123 is set based upon :term:`BPN` (stripping any "python-" or "python3-"
6124 prefix off if present), however for some packages it will need to be set
6125 explicitly if that will not match the package name (e.g. where the
6126 package name has a prefix, underscores, uppercase letters etc.)
6127
6092 :term:`PYTHON_ABI` 6128 :term:`PYTHON_ABI`
6093 When used by recipes that inherit the 6129 When used by recipes that inherit the
6094 :ref:`setuptools3 <ref-classes-setuptools3>` class, denotes the 6130 :ref:`setuptools3 <ref-classes-setuptools3>` class, denotes the
@@ -7058,6 +7094,77 @@ system and gives an overview of their function and contents.
7058 7094
7059 You can specify only a single URL in :term:`SOURCE_MIRROR_URL`. 7095 You can specify only a single URL in :term:`SOURCE_MIRROR_URL`.
7060 7096
7097 :term:`SPDX_ARCHIVE_PACKAGED`
7098 This option allows to add to :term:`SPDX` output compressed archives
7099 of the files in the generated target packages.
7100
7101 Such archives are available in
7102 ``tmp/deploy/spdx/MACHINE/packages/packagename.tar.zst``
7103 under the :term:`Build Directory`.
7104
7105 Enable this option as follows::
7106
7107 SPDX_ARCHIVE_PACKAGED = "1"
7108
7109 According to our tests on release 4.1 "langdale", building
7110 ``core-image-minimal`` for the ``qemux86-64`` machine, enabling this
7111 option multiplied the size of the ``tmp/deploy/spdx`` directory by a
7112 factor of 13 (+1.6 GiB for this image), compared to just using the
7113 :ref:`create-spdx <ref-classes-create-spdx>` class with no option.
7114
7115 Note that this option doesn't increase the size of :term:`SPDX`
7116 files in ``tmp/deploy/images/MACHINE``.
7117
7118 :term:`SPDX_ARCHIVE_SOURCES`
7119 This option allows to add to :term:`SPDX` output compressed archives
7120 of the sources for packages installed on the target. It currently
7121 only works when :term:`SPDX_INCLUDE_SOURCES` is set.
7122
7123 This is one way of fulfilling "source code access" license
7124 requirements.
7125
7126 Such source archives are available in
7127 ``tmp/deploy/spdx/MACHINE/recipes/recipe-packagename.tar.zst``
7128 under the :term:`Build Directory`.
7129
7130 Enable this option as follows::
7131
7132 SPDX_INCLUDE_SOURCES = "1"
7133 SPDX_ARCHIVE_SOURCES = "1"
7134
7135 According to our tests on release 4.1 "langdale", building
7136 ``core-image-minimal`` for the ``qemux86-64`` machine, enabling
7137 these options multiplied the size of the ``tmp/deploy/spdx``
7138 directory by a factor of 11 (+1.4 GiB for this image),
7139 compared to just using the :ref:`create-spdx <ref-classes-create-spdx>`
7140 class with no option.
7141
7142 Note that using this option only marginally increases the size
7143 of the :term:`SPDX` output in ``tmp/deploy/images/MACHINE/``
7144 (+ 0.07\% with the tested image), compared to just enabling
7145 :term:`SPDX_INCLUDE_SOURCES`.
7146
7147 :term:`SPDX_INCLUDE_SOURCES`
7148 This option allows to add a description of the source files used to build
7149 the host tools and the target packages, to the ``spdx.json`` files in
7150 ``tmp/deploy/spdx/MACHINE/recipes/`` under the :term:`Build Directory`.
7151 As a consequence, the ``spdx.json`` files under the ``by-namespace`` and
7152 ``packages`` subdirectories in ``tmp/deploy/spdx/MACHINE`` are also
7153 modified to include references to such source file descriptions.
7154
7155 Enable this option as follows::
7156
7157 SPDX_INCLUDE_SOURCES = "1"
7158
7159 According to our tests on release 4.1 "langdale", building
7160 ``core-image-minimal`` for the ``qemux86-64`` machine, enabling
7161 this option multiplied the total size of the ``tmp/deploy/spdx``
7162 directory by a factor of 3 (+291 MiB for this image),
7163 and the size of the ``IMAGE-MACHINE.spdx.tar.zst`` in
7164 ``tmp/deploy/images/MACHINE`` by a factor of 130 (+15 MiB for this
7165 image), compared to just using the
7166 :ref:`create-spdx <ref-classes-create-spdx>` class with no option.
7167
7061 :term:`SPDXLICENSEMAP` 7168 :term:`SPDXLICENSEMAP`
7062 Maps commonly used license names to their SPDX counterparts found in 7169 Maps commonly used license names to their SPDX counterparts found in
7063 ``meta/files/common-licenses/``. For the default :term:`SPDXLICENSEMAP` 7170 ``meta/files/common-licenses/``. For the default :term:`SPDXLICENSEMAP`