summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorMarta Rybczynska <rybczynska@gmail.com>2025-02-13 06:57:51 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2025-02-18 11:56:04 +0000
commit7a3904c6a730272841941a20531aa1616cc608c5 (patch)
treefbd2bfef5967504caa500f0c0110346b5ef9ebe4 /meta
parentae7097e4c1cf7093bd769158cfcd1f947410743f (diff)
downloadpoky-7a3904c6a730272841941a20531aa1616cc608c5.tar.gz
cve-update-db-native: update structure
Update the database structure and tasks to fit the current YP master. This means: - add the unpack task - update the database structure (CVSS, vector string) - use the temporary database in the same directory as the download However, the old feed does not include CVSS4 (From OE-Core rev: dd249921a5d6b8e472242b57415de3f210dc81f1) Signed-off-by: Marta Rybczynska <marta.rybczynska@ygreky.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-core/meta/cve-update-db-native.bb28
1 files changed, 21 insertions, 7 deletions
diff --git a/meta/recipes-core/meta/cve-update-db-native.bb b/meta/recipes-core/meta/cve-update-db-native.bb
index e042e67b09..3a9d43943c 100644
--- a/meta/recipes-core/meta/cve-update-db-native.bb
+++ b/meta/recipes-core/meta/cve-update-db-native.bb
@@ -5,7 +5,6 @@ INHIBIT_DEFAULT_DEPS = "1"
5 5
6inherit native 6inherit native
7 7
8deltask do_unpack
9deltask do_patch 8deltask do_patch
10deltask do_configure 9deltask do_configure
11deltask do_compile 10deltask do_compile
@@ -21,7 +20,10 @@ CVE_DB_UPDATE_INTERVAL ?= "86400"
21# Timeout for blocking socket operations, such as the connection attempt. 20# Timeout for blocking socket operations, such as the connection attempt.
22CVE_SOCKET_TIMEOUT ?= "60" 21CVE_SOCKET_TIMEOUT ?= "60"
23 22
24CVE_DB_TEMP_FILE ?= "${CVE_CHECK_DB_DIR}/temp_nvdcve_1.1.db" 23CVE_CHECK_DB_DLDIR_FILE ?= "${DL_DIR}/CVE_CHECK2/${CVE_CHECK_DB_FILENAME}"
24CVE_CHECK_DB_DLDIR_LOCK ?= "${CVE_CHECK_DB_DLDIR_FILE}.lock"
25
26CVE_DB_TEMP_FILE ?= "${CVE_CHECK_DB_DLDIR_FILE}.tmp"
25 27
26python () { 28python () {
27 if not bb.data.inherits_class("cve-check", d): 29 if not bb.data.inherits_class("cve-check", d):
@@ -38,7 +40,7 @@ python do_fetch() {
38 40
39 bb.utils.export_proxies(d) 41 bb.utils.export_proxies(d)
40 42
41 db_file = d.getVar("CVE_CHECK_DB_FILE") 43 db_file = d.getVar("CVE_CHECK_DB_DLDIR_FILE")
42 db_dir = os.path.dirname(db_file) 44 db_dir = os.path.dirname(db_file)
43 db_tmp_file = d.getVar("CVE_DB_TEMP_FILE") 45 db_tmp_file = d.getVar("CVE_DB_TEMP_FILE")
44 46
@@ -72,10 +74,16 @@ python do_fetch() {
72 os.remove(db_tmp_file) 74 os.remove(db_tmp_file)
73} 75}
74 76
75do_fetch[lockfiles] += "${CVE_CHECK_DB_FILE_LOCK}" 77do_fetch[lockfiles] += "${CVE_CHECK_DB_DLDIR_LOCK}"
76do_fetch[file-checksums] = "" 78do_fetch[file-checksums] = ""
77do_fetch[vardeps] = "" 79do_fetch[vardeps] = ""
78 80
81python do_unpack() {
82 import shutil
83 shutil.copyfile(d.getVar("CVE_CHECK_DB_DLDIR_FILE"), d.getVar("CVE_CHECK_DB_FILE"))
84}
85do_unpack[lockfiles] += "${CVE_CHECK_DB_DLDIR_LOCK} ${CVE_CHECK_DB_FILE_LOCK}"
86
79def cleanup_db_download(db_file, db_tmp_file): 87def cleanup_db_download(db_file, db_tmp_file):
80 """ 88 """
81 Cleanup the download space from possible failed downloads 89 Cleanup the download space from possible failed downloads
@@ -183,7 +191,7 @@ def initialize_db(conn):
183 c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)") 191 c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
184 192
185 c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \ 193 c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
186 SCOREV2 TEXT, SCOREV3 TEXT, MODIFIED INTEGER, VECTOR TEXT)") 194 SCOREV2 TEXT, SCOREV3 TEXT, SCOREV4 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)")
187 195
188 c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \ 196 c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
189 VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \ 197 VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
@@ -263,23 +271,29 @@ def update_db(conn, jsondata):
263 continue 271 continue
264 272
265 accessVector = None 273 accessVector = None
274 vectorString = None
275 cvssv2 = 0.0
276 cvssv3 = 0.0
277 cvssv4 = 0.0
266 cveId = elt['cve']['CVE_data_meta']['ID'] 278 cveId = elt['cve']['CVE_data_meta']['ID']
267 cveDesc = elt['cve']['description']['description_data'][0]['value'] 279 cveDesc = elt['cve']['description']['description_data'][0]['value']
268 date = elt['lastModifiedDate'] 280 date = elt['lastModifiedDate']
269 try: 281 try:
270 accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector'] 282 accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector']
283 vectorString = elt['impact']['baseMetricV2']['cvssV2']['vectorString']
271 cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore'] 284 cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore']
272 except KeyError: 285 except KeyError:
273 cvssv2 = 0.0 286 cvssv2 = 0.0
274 try: 287 try:
275 accessVector = accessVector or elt['impact']['baseMetricV3']['cvssV3']['attackVector'] 288 accessVector = accessVector or elt['impact']['baseMetricV3']['cvssV3']['attackVector']
289 vectorString = vectorString or elt['impact']['baseMetricV3']['cvssV3']['vectorString']
276 cvssv3 = elt['impact']['baseMetricV3']['cvssV3']['baseScore'] 290 cvssv3 = elt['impact']['baseMetricV3']['cvssV3']['baseScore']
277 except KeyError: 291 except KeyError:
278 accessVector = accessVector or "UNKNOWN" 292 accessVector = accessVector or "UNKNOWN"
279 cvssv3 = 0.0 293 cvssv3 = 0.0
280 294
281 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?)", 295 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?, ?)",
282 [cveId, cveDesc, cvssv2, cvssv3, date, accessVector]).close() 296 [cveId, cveDesc, cvssv2, cvssv3, cvssv4, date, accessVector, vectorString]).close()
283 297
284 configurations = elt['configurations']['nodes'] 298 configurations = elt['configurations']['nodes']
285 for config in configurations: 299 for config in configurations: