From: <daniel.turull@ericsson.com>
To: <openembedded-core@lists.openembedded.org>
Cc: Daniel Turull <daniel.turull@ericsson.com>,
Joshua Watt <JPEWhacker@gmail.com>,
Peter Marko <peter.marko@siemens.com>
Subject: [PATCH v4 1/3] spdx: add option to include only compiled sources
Date: Wed, 14 May 2025 14:57:04 +0200 [thread overview]
Message-ID: <20250514125706.495571-2-daniel.turull@ericsson.com> (raw)
In-Reply-To: <20250514125706.495571-1-daniel.turull@ericsson.com>
From: Daniel Turull <daniel.turull@ericsson.com>
When SPDX_INCLUDE_COMPILED_SOURCES is enabled, only include the
source code (.c) files that are used during compilation.
This enables an external tool to use the SPDX information to disregard
vulnerabilities that are not compiled.
This commit adds the basics, so recipes can implement it own methods.
CC: Joshua Watt <JPEWhacker@gmail.com>
CC: Peter Marko <peter.marko@siemens.com>
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
meta/classes/create-spdx-2.2.bbclass | 9 ++++++++
meta/classes/spdx-common.bbclass | 3 +++
meta/lib/oe/spdx30_tasks.py | 9 ++++++++
meta/lib/oe/spdx_common.py | 33 ++++++++++++++++++++++++++++
4 files changed, 54 insertions(+)
diff --git a/meta/classes/create-spdx-2.2.bbclass b/meta/classes/create-spdx-2.2.bbclass
index 7e8f8b9ff5..dd8ee6ecbe 100644
--- a/meta/classes/create-spdx-2.2.bbclass
+++ b/meta/classes/create-spdx-2.2.bbclass
@@ -137,6 +137,11 @@ def add_package_files(d, doc, spdx_pkg, topdir, get_spdxid, get_types, *, archiv
spdx_files = []
file_counter = 1
+
+ check_compiled_sources = d.getVar("SPDX_INCLUDE_COMPILED_SOURCES") == "1"
+ if check_compiled_sources:
+ compiled_sources = oe.spdx_common.get_compiled_sources(d)
+ bb.debug(1, f"Total compiled files: {len(compiled_sources)}")
for subdir, dirs, files in os.walk(topdir):
dirs[:] = [d for d in dirs if d not in ignore_dirs]
if subdir == str(topdir):
@@ -147,6 +152,10 @@ def add_package_files(d, doc, spdx_pkg, topdir, get_spdxid, get_types, *, archiv
filename = str(filepath.relative_to(topdir))
if not filepath.is_symlink() and filepath.is_file():
+ # Check if file is compiled
+ if check_compiled_sources:
+ if not oe.spdx_common.is_compiled_source(file, compiled_sources):
+ break
spdx_file = oe.spdx.SPDXFile()
spdx_file.SPDXID = get_spdxid(file_counter)
for t in get_types(filepath):
diff --git a/meta/classes/spdx-common.bbclass b/meta/classes/spdx-common.bbclass
index 713a7fc651..e9dde34513 100644
--- a/meta/classes/spdx-common.bbclass
+++ b/meta/classes/spdx-common.bbclass
@@ -26,6 +26,9 @@ SPDX_TOOL_VERSION ??= "1.0"
SPDXRUNTIMEDEPLOY = "${SPDXDIR}/runtime-deploy"
SPDX_INCLUDE_SOURCES ??= "0"
+SPDX_INCLUDE_COMPILED_SOURCES ??= "0"
+SPDX_COMPILED_SOURCES_DIR ??= "${LOG_DIR}/spdx-compiled/${PN}"
+SPDX_COMPILED_SOURCES ??= "${SPDX_FILES_DIR}/compiled_src-${BP}.txt"
SPDX_UUID_NAMESPACE ??= "sbom.openembedded.org"
SPDX_NAMESPACE_PREFIX ??= "http://spdx.org/spdxdocs"
diff --git a/meta/lib/oe/spdx30_tasks.py b/meta/lib/oe/spdx30_tasks.py
index 61d7ba45e3..083e004330 100644
--- a/meta/lib/oe/spdx30_tasks.py
+++ b/meta/lib/oe/spdx30_tasks.py
@@ -156,6 +156,11 @@ def add_package_files(
bb.note(f"Skip {topdir}")
return spdx_files
+ check_compiled_sources = d.getVar("SPDX_INCLUDE_COMPILED_SOURCES") == "1"
+ if check_compiled_sources:
+ compiled_sources = oe.spdx_common.get_compiled_sources(d)
+ bb.debug(1, f"Total compiled files: {len(compiled_sources)}")
+
for subdir, dirs, files in os.walk(topdir, onerror=walk_error):
dirs[:] = [d for d in dirs if d not in ignore_dirs]
if subdir == str(topdir):
@@ -167,6 +172,10 @@ def add_package_files(
filepath = Path(subdir) / file
if filepath.is_symlink() or not filepath.is_file():
continue
+ # Check if file is compiled
+ if check_compiled_sources:
+ if not oe.spdx_common.is_compiled_source(file, compiled_sources):
+ break
filename = str(filepath.relative_to(topdir))
file_purposes = get_purposes(filepath)
diff --git a/meta/lib/oe/spdx_common.py b/meta/lib/oe/spdx_common.py
index 4caefc7673..e1b7f576dd 100644
--- a/meta/lib/oe/spdx_common.py
+++ b/meta/lib/oe/spdx_common.py
@@ -242,3 +242,36 @@ def fetch_data_to_uri(fd, name):
uri = uri + "@" + fd.revision
return uri
+
+
+def is_compiled_source (filename, compiled_sources):
+ """
+ Check if the file, is a compiled file
+ """
+ import os
+ # If we don't have compiled source, we asume all are compiled.
+ if len(compiled_sources) == 0:
+ return True
+ _, extension = os.path.splitext(filename)
+ # Special case, that we need to ignore, since this is not a source file
+ # We filter .c files
+ if filename.rfind(".mod.c") > 0 or extension != ".c":
+ return True
+ # Check that the c file is in the list
+ if filename in compiled_sources:
+ return True
+ return False
+
+def get_compiled_sources(d):
+ """
+ Return compiled files from the SPDX_COMPILED_FILES file
+ """
+ cfiles = []
+ sources = d.getVar('SPDX_COMPILED_SOURCES')
+ if not sources:
+ return cfiles
+ if not os.path.isfile(sources):
+ return cfiles
+ with open(sources, 'r') as f:
+ cfiles = [line.strip() for line in f]
+ return cfiles
next prev parent reply other threads:[~2025-05-14 13:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-14 12:57 [PATCH v4 0/3] Check compiled files to filter kernel CVEs daniel.turull
2025-05-14 12:57 ` daniel.turull [this message]
2025-05-15 12:10 ` [OE-core] [PATCH v4 1/3] spdx: add option to include only compiled sources Quentin Schulz
2025-05-15 13:12 ` Daniel Turull
2025-05-15 13:32 ` Quentin Schulz
2025-05-15 13:44 ` Daniel Turull
2025-05-15 13:58 ` Quentin Schulz
2025-05-15 14:04 ` Daniel Turull
2025-05-15 14:03 ` Richard Purdie
2025-05-15 14:09 ` Daniel Turull
2025-05-15 14:21 ` Richard Purdie
2025-05-15 14:24 ` Daniel Turull
2025-05-14 12:57 ` [PATCH v4 2/3] kernel: add support to extract compiled files daniel.turull
2025-05-14 12:57 ` [PATCH v4 3/3] improve_kernel_cve_report: add script for postprocesing of kernel CVE data daniel.turull
-- strict thread matches above, loose matches on Subject: below --
2025-05-14 13:11 [PATCH v4 0/3] Check compiled files to filter kernel CVEs daniel.turull
2025-05-14 13:11 ` [PATCH v4 1/3] spdx: add option to include only compiled sources daniel.turull
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250514125706.495571-2-daniel.turull@ericsson.com \
--to=daniel.turull@ericsson.com \
--cc=JPEWhacker@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=peter.marko@siemens.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox