ping >-----Original Message----- >From: [email protected] <openembedded- >[email protected]> On Behalf Of Lee Chee Yang >Sent: Wednesday, 24 February, 2021 7:11 PM >To: [email protected] >Subject: [OE-core] [PATCH] cve-check: produce cve-summary in JSON format > >From: Lee Chee Yang <[email protected]> > >produce cve-summary in JSON format so it can be translate and consume by >other tools. > >output json summary file use similar name as >CVE_CHECK_SUMMARY_FILE_NAME but with .json extension. > >[yocto#13975] > >Signed-off-by: Lee Chee Yang <[email protected]> >--- > meta/classes/cve-check.bbclass | 43 +++++++++++++++++++++++++++++++++- > 1 file changed, 42 insertions(+), 1 deletion(-) > >diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass >index 112ee3379d..09bd1f6597 100644 >--- a/meta/classes/cve-check.bbclass >+++ b/meta/classes/cve-check.bbclass >@@ -66,8 +66,10 @@ CVE_VERSION_SUFFIX ??= "" > python cve_save_summary_handler () { > import shutil > import datetime >+ import json > > cve_tmp_file = d.getVar("CVE_CHECK_TMP_FILE") >+ cve_tmp_file_json = "%s-json" % cve_tmp_file > > cve_summary_name = d.getVar("CVE_CHECK_SUMMARY_FILE_NAME") > cvelogpath = d.getVar("CVE_CHECK_SUMMARY_DIR") @@ -85,6 +87,26 @@ >python cve_save_summary_handler () { > if os.path.exists(os.path.realpath(cvefile_link)): > os.remove(cvefile_link) > os.symlink(os.path.basename(cve_summary_file), cvefile_link) >+ >+ cve_summary_file_json = os.path.join(cvelogpath, "%s-%s.json" % >(cve_summary_name, timestamp)) >+ # cve_tmp_file_json record each CVE in single line, consolidate them into >single json file >+ if os.path.exists(cve_tmp_file_json): >+ cve_json = {} >+ cve_json['CVEs'] = [] >+ f_json = open(cve_tmp_file_json,"r") >+ for line in f_json: >+ cve_json['CVEs'].append(json.loads(line)) >+ f_json.close() >+ >+ with open(cve_summary_file_json,"w") as f: >+ json.dump(cve_json, f, indent=4) >+ >+ if cve_summary_file_json and os.path.exists(cve_summary_file_json): >+ cvefile_link = os.path.join(cvelogpath, "%s.json" % >+ cve_summary_name) >+ >+ if os.path.exists(os.path.realpath(cvefile_link)): >+ os.remove(cvefile_link) >+ os.symlink(os.path.basename(cve_summary_file_json), >+ cvefile_link) > } > > addhandler cve_save_summary_handler >@@ -118,6 +140,7 @@ python cve_check_cleanup () { > Delete the file used to gather all the CVE information. > """ > bb.utils.remove(e.data.getVar("CVE_CHECK_TMP_FILE")) >+ bb.utils.remove("%s-json" % e.data.getVar("CVE_CHECK_TMP_FILE")) > } > > addhandler cve_check_cleanup >@@ -340,7 +363,7 @@ def cve_write_data(d, patched, unpatched, whitelisted, >cve_data): > Write CVE information in WORKDIR; and to CVE_CHECK_DIR, and > CVE manifest if enabled. > """ >- >+ import json > > cve_file = d.getVar("CVE_CHECK_LOG") > fdir_name = d.getVar("FILE_DIRNAME") @@ -356,6 +379,7 @@ def >cve_write_data(d, patched, unpatched, whitelisted, cve_data): > return > > nvd_link = "https://web.nvd.nist.gov/view/vuln/detail?vulnId=" >+ json_string = "" > write_string = "" > unpatched_cves = [] > bb.utils.mkdirhier(os.path.dirname(cve_file)) >@@ -370,17 +394,30 @@ def cve_write_data(d, patched, unpatched, whitelisted, >cve_data): > write_string += "CVE: %s\n" % cve > if cve in whitelisted: > write_string += "CVE STATUS: Whitelisted\n" >+ json_string += '{"CVE STATUS": "Whitelisted"' > elif is_patched: > write_string += "CVE STATUS: Patched\n" >+ json_string += '{"CVE STATUS": "Patched"' > else: > unpatched_cves.append(cve) > write_string += "CVE STATUS: Unpatched\n" >+ json_string += '{"CVE STATUS": "Unpatched"' > write_string += "CVE SUMMARY: %s\n" % cve_data[cve]["summary"] > write_string += "CVSS v2 BASE SCORE: %s\n" % cve_data[cve]["scorev2"] > write_string += "CVSS v3 BASE SCORE: %s\n" % cve_data[cve]["scorev3"] > write_string += "VECTOR: %s\n" % cve_data[cve]["vector"] > write_string += "MORE INFORMATION: %s%s\n\n" % (nvd_link, cve) > >+ json_string += ',"LAYER": "%s"' % layer >+ json_string += ',"PACKAGE NAME": "%s"' % d.getVar("PN") >+ json_string += ',"PACKAGE VERSION": "%s%s"' % (d.getVar("EXTENDPE"), >d.getVar("PV")) >+ json_string += ',"CVE": "%s"' % cve >+ json_string += ',"CVE SUMMARY": %s' % >json.dumps(cve_data[cve]["summary"]) >+ json_string += ',"CVSS v2 BASE SCORE": "%s"' % >cve_data[cve]["scorev2"] >+ json_string += ',"CVSS v3 BASE SCORE": "%s"' % >cve_data[cve]["scorev3"] >+ json_string += ',"VECTOR": "%s"' % cve_data[cve]["vector"] >+ json_string += ',"MORE INFORMATION": "%s%s"}\n' % (nvd_link, >+ cve) >+ > if unpatched_cves: > bb.warn("Found unpatched CVE (%s), for more information check %s" % (" >".join(unpatched_cves),cve_file)) > >@@ -401,3 +438,7 @@ def cve_write_data(d, patched, unpatched, whitelisted, >cve_data): > > with open(d.getVar("CVE_CHECK_TMP_FILE"), "a") as f: > f.write("%s" % write_string) >+ >+ with open("%s-json" % d.getVar("CVE_CHECK_TMP_FILE"), "a") as f: >+ f.write("%s" % json_string) >+ >-- >2.17.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#149311): https://lists.openembedded.org/g/openembedded-core/message/149311 Mute This Topic: https://lists.openembedded.org/mt/80874233/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
