support/scripts/{pkg-stats, cve.py}: support CPE ID based matching
authorThomas Petazzoni <thomas.petazzoni@bootlin.com>
Fri, 4 Dec 2020 15:45:58 +0000 (16:45 +0100)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Mon, 4 Jan 2021 20:38:20 +0000 (21:38 +0100)
commite3ef352ef677b26d91aad02272468a5048589bb3
tree502b73ae353e9f1828e598205722f2248d6c04ea
parent92e7089a8ca9f7dba5a5d690b7f768352cd6b983
support/scripts/{pkg-stats, cve.py}: support CPE ID based matching

This commit modifies cve.py, as well as its users cve-checker and
pkg-stats to support CPE ID based matching, for packages that have CPE
ID information.

One of the non-trivial thing is that we can't simply iterate over all
CVEs, and then iterate over all our packages to see which packages
have CPE ID information that match the CPEs affected by the
CVE. Indeed, this is an O(n^2) operation.

So instead, we do a pre-filtering of packages potentially affected. In
check_package_cves(), we build a cpe_product_pkgs dict that associates
a CPE product name to the packages that have this CPE product
name. The CPE product name is either derived from the CPE information
provided by the package if available, and otherwise we use the package
name, which is what was used prior to this patch.

And then, when we look at CVEs, we only consider the packages that
have a CPE product name matching the CPE products affected by the
CVEs. This is done in check_package_cve_affects().

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
support/scripts/cve.py
support/scripts/pkg-stats