kernel-cve-check: Improve error handling when fetch fails#459
Draft
teradat wants to merge 1 commit intomiraclelinux:warriorfrom
Draft
kernel-cve-check: Improve error handling when fetch fails#459teradat wants to merge 1 commit intomiraclelinux:warriorfrom
teradat wants to merge 1 commit intomiraclelinux:warriorfrom
Conversation
If fetching cip-kernel-sec repository fails, the CVE checks cannot be performed.
In this case, output backtrace [1] because there is insufficient error checking.
So improve to error handling.
When cve-check cannot be performed, there are two ways of thinking depending on
the purpose of bitbake:
1. The purpose is build, want to continue to build
e.g. `bitbake core-image-minimal`
2. The purpose is cve-check, want to immediately terminate with an error
e.g. `bitbake linux-base -c cve_check`
Add "CVE_CHECK_ERROR_ON_FAILURE" variable to satisfy these wants.
- Set "0" (is default): skip the CVE check and continue with build of bitbake
By disabling "CVE_CHECK_DB_FILE" variable, CVE check will be skipped in Poky's
do_cve_check() function.
This is the same behavior as if the NVD database download failed in Poky, skip
the CVE check and continue with build.
- Set "1": bitbake return fatal error immediately
Immediately exit with bb.fatal().
In summary, the following changes in this commit:
- Add exception handling to update_cip_kernel_sec()
- Add check of repository synced
(Even if fetching cip-kernel-sec repository fails,) A successfully fetched
local repository may exist, so if the synced timestamp is today, it is
considered a valid repository.
- Add error handling logic for "CVE_CHECK_ERROR_ON_FAILURE" variable
[1]
```
ERROR: cve-update-nvd2-native-1.0-r0 do_populate_cve_db: Error executing a python function in exec_python_func() autogenerated:
The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
0001:
*** 0002:update_cip_kernel_sec(d)
0003:
File: '<path-to>/meta-emlinux/classes/kernel-cve-check.bbclass', lineno: 75, function: update_cip_kernel_sec
0071: os.mkdir(kernel_cve_check_dir)
0072:
0073: if not os.path.isdir(cip_kernel_sec_path):
0074: # first run
*** 0075: runfetchcmd("git clone %s cip-kernel-sec" % git_uri, d, workdir=kernel_cve_check_dir)
0076: remove_remote(os.path.join(cip_kernel_sec_path, "conf"))
0077: runfetchcmd("git update-index --skip-worktree conf/remotes.yml", d, workdir=cip_kernel_sec_path)
0078: else:
0079: runfetchcmd("git pull", d, workdir=cip_kernel_sec_path)
File: '<path-to>/poky/bitbake/lib/bb/fetch2/__init__.py', lineno: 886, function: runfetchcmd
0882: bb.utils.remove(f, True)
0883: except OSError:
0884: pass
0885:
*** 0886: raise FetchError(error_message)
0887:
0888: return output
0889:
0890:def check_network_access(d, info, url):
Exception: bb.fetch2.FetchError: Fetcher failure: Fetch command <...snip...>
Cloning into 'cip-kernel-sec'...
fatal: unable to access 'https://gitlab.com/cip-project/cip-kernel/cip-kernel-sec.git/': Failed to connect to <proxy-server> port <proxy-port>: Connection refused
ERROR: cve-update-nvd2-native-1.0-r0 do_populate_cve_db: Fetcher failure: Fetch command <...snip...>
Cloning into 'cip-kernel-sec'...
fatal: unable to access 'https://gitlab.com/cip-project/cip-kernel/cip-kernel-sec.git/': Failed to connect to <proxy-server> port <proxy-port>: Connection refused
ERROR: cve-update-nvd2-native-1.0-r0 do_populate_cve_db: Function failed: update_cip_kernel_sec
ERROR: Logfile of failure stored in: <path-to>/build/tmp-glibc/work/x86_64-linux/cve-update-nvd2-native/1.0-r0/temp/log.do_populate_cve_db.2578823
ERROR: Task (<path-to>/meta-emlinux/recipes-core/cve-update/cve-update-nvd2-native.bb:do_populate_cve_db) failed with exit code '1'
```
Signed-off-by: Takahiro Terada <takahiro.terada@miraclelinux.com>
aliceinwire
approved these changes
Apr 30, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose of pull request
If fetching cip-kernel-sec repository fails, the CVE checks cannot be performed. In this case, output backtrace [1] because there is insufficient error checking.
So improve to error handling.
[1]
Background
When cve-check cannot be performed, there are two ways of thinking depending on the purpose of bitbake:
e.g.
bitbake core-image-minimale.g.
bitbake linux-base -c cve_checkAdd "CVE_CHECK_ERROR_ON_FAILURE" variable to satisfy these wants.
By disabling "CVE_CHECK_DB_FILE" variable, CVE check will be skipped in Poky's do_cve_check() function.
This is the same behavior as if the NVD database download failed in Poky, skip the CVE check and continue with build.
Immediately exit with bb.fatal().
Details of improvements
In summary, the following changes in this commit:
(Even if fetching cip-kernel-sec repository fails,) A successfully fetched local repository may exist, so if the synced timestamp is today, it is considered a valid repository.
Test
How to test
local.conf setting
Add the following to local.conf.
And, for purpose of test, modify CVE_CHECK_ERROR_ON_FAILURE.
In preparation, complete the build of linux-base
Preparing for testing
Remove the local repository of cip-kernel-sec
Make cip-kernel-sec fetch fails
Build linux-base and check log
Test result
For skip behavior
Displayed
skipping CVE checkmessage and bitbake succeeds.For fatal behavior
By bb.fatal(), displayed ERROR message and bitbake stops.