diff mbox series

cve-check: Log if CVE_STATUS set but not reported for component

Message ID 20240223210848.21731-1-simone.p.weiss@posteo.com
State Accepted, archived
Commit 013d531a84fa08b6ae8a47bdf3ba1fa8f18ba270
Headers show
Series cve-check: Log if CVE_STATUS set but not reported for component | expand

Commit Message

Simone Weiß Feb. 23, 2024, 9:08 p.m. UTC
From: Simone Weiß <simone.p.weiss@posteo.com>

Log if the CVE_STATUS is set for a CVE, but the cve is not reported for a
component. This should hopefully help to clean up not needed CVE_STATUS
settings. 

Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
---
 meta/classes/cve-check.bbclass | 3 +++
 1 file changed, 3 insertions(+)

Comments

Yoann Congal Feb. 23, 2024, 9:52 p.m. UTC | #1
Le ven. 23 févr. 2024 à 22:09, Simone Weiß <simone.p.weiss@posteo.com> a
écrit :

> From: Simone Weiß <simone.p.weiss@posteo.com>
>
> Log if the CVE_STATUS is set for a CVE, but the cve is not reported for a
> component. This should hopefully help to clean up not needed CVE_STATUS
> settings.
>

Thank you for taking the time to do this :-)


> Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
> ---
>  meta/classes/cve-check.bbclass | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/meta/classes/cve-check.bbclass
> b/meta/classes/cve-check.bbclass
> index 5191d04303..b82a9e89ec 100644
> --- a/meta/classes/cve-check.bbclass
> +++ b/meta/classes/cve-check.bbclass
> @@ -418,6 +418,9 @@ def check_cves(d, patched_cves):
>              cves_status.append([product, False])
>
>      conn.close()
> +    diff_ignore = list(set(cve_ignore) - set(cves_ignored))
> +    if diff_ignore:
> +        bb.warn("Found CVE (%s) with CVE_STATUS set that is not found in
> database for this component" % " ".join(diff_ignore))
>

A non-optional warning might be a bit harsh (Especially one that can come
up after an independent NVD database update).

How about a new element in the output of cve_check (the
build/tmp/log/cve/*.{txt,json} files)?
That way, someone looking for this info may find it, everyone else can
(safely) ignore this.

Another way I see would be to make the warning optional by using QA_WARN&co
but I'm not 100% sure it can be done...

Regards,

     if not cves_in_recipe:
>          bb.note("No CVE records for products in recipe %s" % (pn))
> --
> 2.39.2
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#196113):
> https://lists.openembedded.org/g/openembedded-core/message/196113
> Mute This Topic: https://lists.openembedded.org/mt/104536878/4316185
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> yoann.congal@smile.fr]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Simone Weiß Feb. 24, 2024, 12:01 a.m. UTC | #2
On Fri, 2024-02-23 at 22:52 +0100, Yoann CONGAL wrote:
> Le ven. 23 févr. 2024 à 22:09, Simone Weiß <simone.p.weiss@posteo.com> a
> écrit :
> > From: Simone Weiß <simone.p.weiss@posteo.com>
> > 
> > Log if the CVE_STATUS is set for a CVE, but the cve is not reported
> > for a
> > component. This should hopefully help to clean up not needed
> > CVE_STATUS
> > settings. 
> > 
> 
> 
> Thank you for taking the time to do this :-)
>  
> > Signed-off-by: Simone Weiß <simone.p.weiss@posteo.com>
> > ---
> >  meta/classes/cve-check.bbclass | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-
> > check.bbclass
> > index 5191d04303..b82a9e89ec 100644
> > --- a/meta/classes/cve-check.bbclass
> > +++ b/meta/classes/cve-check.bbclass
> > @@ -418,6 +418,9 @@ def check_cves(d, patched_cves):
> >              cves_status.append([product, False])
> > 
> >      conn.close()
> > +    diff_ignore = list(set(cve_ignore) - set(cves_ignored))
> > +    if diff_ignore:
> > +        bb.warn("Found CVE (%s) with CVE_STATUS set that is not found
> > in database for this component" % " ".join(diff_ignore))
> > 
> 
> 
> A non-optional warning might be a bit harsh (Especially one that can
> come up after an independent NVD database update).
> 
I first had the same doubt, but then thought: hey it will only appear if
cve checks are actually performed, which is not the default.
And when you do that you get warnings anyway. You are right though.
> How about a new element in the output of cve_check (the
> build/tmp/log/cve/*.{txt,json} files)?
> That way, someone looking for this info may find it, everyone else can
> (safely) ignore this.
> 
> Another way I see would be to make the warning optional by using
> QA_WARN&co but I'm not 100% sure it can be done...
> 
Good point. Sth like:

oe.qa.handle_error("cve_status_not_in_db", "%s Found CVE (%s) with
CVE_STATUS set that are not found in database for this component" % (pn, "
".join(diff_ignore)), d)

should work.
Then the warning is only given if cve_status_not_in_db is appended to
WARN_QA. I think this would be fine, also other classes besides
insane.bbclass add to WARN_QA/ERROR_QA. I will check the docs and then
most likely send v2.

Cheers
Simone
> Regards,
> 
> >      if not cves_in_recipe:
> >          bb.note("No CVE records for products in recipe %s" % (pn))
Peter Marko Feb. 24, 2024, 2:28 p.m. UTC | #3
Hello,

This change looks like the right way forward, but it will need two things first:
* dissolve cve-extra-exclusions.inc into recipes, as every exclusion in that file will generate a warning in all components except the one for which the exclusion actually is meant
* create a (per-recipe) variable to disable it, especially for kernels where we have auto-generated exclusion lists which do not match NVD DB state

Best Regards,
  Peter
Simone Weiß Feb. 24, 2024, 3:41 p.m. UTC | #4
On Sat, 2024-02-24 at 14:28 +0000, Peter Marko via lists.openembedded.org
wrote:
> Hello,
> 
> This change looks like the right way forward, but it will need two
> things first:
> * dissolve cve-extra-exclusions.inc into recipes, as every exclusion in
> that file will generate a warning in all components except the one for
> which the exclusion actually is meant
> * create a (per-recipe) variable to disable it, especially for kernels
> where we have auto-generated exclusion lists which do not match NVD DB
> state
Hi,
this is disabled per default, so I think those points are not to pressing.

Cheers,
Simone
> 
> Best Regards,
>   Peter
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#196131):
> https://lists.openembedded.org/g/openembedded-core/message/196131
> Mute This Topic: https://lists.openembedded.org/mt/104536878/8052774
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe:
> https://lists.openembedded.org/g/openembedded-core/unsub [simone.p.weiss@posteo.com
> ]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Richard Purdie Feb. 24, 2024, 3:53 p.m. UTC | #5
On Sat, 2024-02-24 at 14:28 +0000, Peter Marko via
lists.openembedded.org wrote:
> Hello,
> 
> This change looks like the right way forward, but it will need two
> things first:
> * dissolve cve-extra-exclusions.inc into recipes, as every exclusion
> in that file will generate a warning in all components except the one
> for which the exclusion actually is meant
> * create a (per-recipe) variable to disable it, especially for
> kernels where we have auto-generated exclusion lists which do not
> match NVD DB state

WARN_QA:remove:pn-XXXX = "YYYY"

is possible with the version which was switched to use the central QA
function.

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass
index 5191d04303..b82a9e89ec 100644
--- a/meta/classes/cve-check.bbclass
+++ b/meta/classes/cve-check.bbclass
@@ -418,6 +418,9 @@  def check_cves(d, patched_cves):
             cves_status.append([product, False])
 
     conn.close()
+    diff_ignore = list(set(cve_ignore) - set(cves_ignored))
+    if diff_ignore:
+        bb.warn("Found CVE (%s) with CVE_STATUS set that is not found in database for this component" % " ".join(diff_ignore))
 
     if not cves_in_recipe:
         bb.note("No CVE records for products in recipe %s" % (pn))