diff options
Diffstat (limited to 'meta/lib/oe')
-rw-r--r-- | meta/lib/oe/cve_check.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/meta/lib/oe/cve_check.py b/meta/lib/oe/cve_check.py index dbaa0b373a..5bf3caac47 100644 --- a/meta/lib/oe/cve_check.py +++ b/meta/lib/oe/cve_check.py | |||
@@ -130,6 +130,13 @@ def get_patched_cves(d): | |||
130 | if not fname_match and not text_match: | 130 | if not fname_match and not text_match: |
131 | bb.debug(2, "Patch %s doesn't solve CVEs" % patch_file) | 131 | bb.debug(2, "Patch %s doesn't solve CVEs" % patch_file) |
132 | 132 | ||
133 | # Search for additional patched CVEs | ||
134 | for cve in (d.getVarFlags("CVE_STATUS") or {}): | ||
135 | decoded_status, _, _ = decode_cve_status(d, cve) | ||
136 | if decoded_status == "Patched": | ||
137 | bb.debug(2, "CVE %s is additionally patched" % cve) | ||
138 | patched_cves.add(cve) | ||
139 | |||
133 | return patched_cves | 140 | return patched_cves |
134 | 141 | ||
135 | 142 | ||
@@ -218,3 +225,21 @@ def convert_cve_version(version): | |||
218 | 225 | ||
219 | return version + update | 226 | return version + update |
220 | 227 | ||
228 | def decode_cve_status(d, cve): | ||
229 | """ | ||
230 | Convert CVE_STATUS into status, detail and description. | ||
231 | """ | ||
232 | status = d.getVarFlag("CVE_STATUS", cve) | ||
233 | if status is None: | ||
234 | return ("", "", "") | ||
235 | |||
236 | status_split = status.split(':', 1) | ||
237 | detail = status_split[0] | ||
238 | description = status_split[1].strip() if (len(status_split) > 1) else "" | ||
239 | |||
240 | status_mapping = d.getVarFlag("CVE_CHECK_STATUSMAP", detail) | ||
241 | if status_mapping is None: | ||
242 | bb.warn('Invalid detail %s for CVE_STATUS[%s] = "%s", fallback to Unpatched' % (detail, cve, status)) | ||
243 | status_mapping = "Unpatched" | ||
244 | |||
245 | return (status_mapping, detail, description) | ||