[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [v2] Proposal for deviations in static analyser findings


  • To: Julien Grall <julien@xxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Wed, 26 Oct 2022 10:20:19 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RyXPhPts4Vai/7vpUY1xXhX9z8gky+b/vGUdY4Mn2TA=; b=Q28YcjvMyja2CdR3G24dCS27i9j3RZH1svSVYBsfLXmEBTcnmdfddmaI2iNHPYLk7NZmsQFTt5owzLCYCRtkDSTyC35Ro1kfOcSNWm7AMsPko9W7A0eZCITF+PrSiEDsGRhzQPoIXIaffs22hkDQ0Ax+C5g6+yD9KJEioKeFYIwQIvB3mApIdPyWzLn9eXMvQffmYLorTlz218RFOhF3nsgYaYSuHHx6EdJ9PR42y1UTuo7zB220iaXdh4OIN5/qTELJf4vm0eiij6Kcm8Pu7HgMLz2ZRm0SgtsSxlJjL6mQLMhBTTe9HNIdBo1/ikRzp9rm9X3/g+0+6gwBIINQaw==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RyXPhPts4Vai/7vpUY1xXhX9z8gky+b/vGUdY4Mn2TA=; b=i0Gr4d0WLpT3pX/FP1274WrHWWAxLoAbHaI07Sx/FrDQkCzmkVRPNUfx5fU897zCREujf2f5HkhAGgMnhbwMFCV1q70qs3drleXW6RqcTkc2IamNHsYpaICeoGoFa32Wb1pnwiS9req3W+rCmQBaIp/JZrhQtwTnh65pmOIvyUWr1KIgS0xphuZ/IC7wNBAjzkfvmVoqkUFlwpz1UuqS/0+dXPGsU9eiRGW+lMbY0Xw84/JXEj3AZwir357xHMb4eTzdn1BNepVtSVsRObuydSfHPcS26iovIunrTMp2NvogmZR4hNuzxxIEOeT/mlyo0D9HQqaZLO216zU1kBaJtg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=amzAk+pI2edN+PGuqe4kSybgBwq7/1WyPjyGp5h1H+NKF1o2nLZzbtakFq4yLfu3IElMrlZV/ZFvv84S1s7FpmuBPI0gC/77kl1plFUR3YfzFpJNfov6cgPTDHkUxPmEBS3KHmId1N5B8OLC7xGnP+9lHtJmS6q0IKG62njMyFAzarp5tlB1bB2Hsu+cQKQUfjgOi9Epo/Y3oHuVF6AY64smMZXspJNNn1aR9qiljb33Q79b0KedEIqFEVK7v52zW14s1CBEcNzXBEXgCOylqQ//XAl3l5SB2Mej5bTrxURl07Z1Lc74aB6Wv4mm7fiFhZytIZOPuARpGO1pXv2uzQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cu2h26Q0mokWVNuqFEv/DobIH/EfuvwDm/iwCF9uRYtAP5CVuQpZe+2t7PWPjOQk/QiqL6yAQ27B8PmA0pNx2KK7+lsyyLhB2fUuoqSOUg8QPfkxBG51nL3d/BrUc1b6j0F0y6mlXVxMkriCRjZAV5yWY1KfLQdPIdKH+Dd4mpnixGMtRspRHNhuRB4T3vfJk1bjnV38ze/iOfpvZjrV39faqgcOi2F2U74SMmGeOrL4vFdwigzJuBTi2777GLrfVcp1rNkIkOUKkdfWR5hxJsq1vXdZhWiWyyU5yW/KvDFT5NxE6TxDX9tA7Eys1AMi6FZjGzO5coprv5VF5MontA==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>
  • Delivery-date: Wed, 26 Oct 2022 10:20:40 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHY6FpvvKvqm6eEhUKW2GdsP99AnK4gbCUAgAAMPQA=
  • Thread-topic: [v2] Proposal for deviations in static analyser findings


> On 26 Oct 2022, at 10:36, Julien Grall <julien@xxxxxxx> wrote:
> 
> 
> 
> On 25/10/2022 11:13, Luca Fancellu wrote:
>> Hi all,
> 
> Hi Luca,
> 
> Some comments below if we plan to merge the doc in the tree.
> 
>> This is the V2 of the proposal for deviations tagging in the Xen codebase, 
>> this includes
>> all the feedbacks from the FuSa session held at the Xen Summit 2022 and all 
>> the
>> feedbacks received in the previous proposal sent on the mailing list.
>> Here a link to the previous thread:
>> https://lists.xenproject.org/archives/html/xen-devel/2022-10/msg00541.html >
>> Documenting violations
>> ======================
>> Static analysers are used on the Xen codebase for both static analysis and 
>> MISRA
>> compliance.
>> There might be the need to suppress some findings instead of fixing them and
>> many tools permit the usage of in-code comments that suppress findings so 
>> that
>> they are not shown in the final report.
>> Xen will include a tool capable of translating a specific comment used in its
>> codebase to the right proprietary in-code comment understandable by the 
>> selected
>> analyser that suppress its finding.
>> In the Xen codebase, these tags will be used to document and suppress 
>> findings:
>> - SAF-X-safe: This tag means that the next line of code contains a finding, 
>> but
>>  the non compliance to the checker is analysed and demonstrated to be safe.
>> - SAF-X-false-positive-<tool>: This tag means that the next line of code 
>> contains a
>>  finding, but the finding is a bug of the tool.
>> SAF stands for Static Analyser Finding, the X is a placeholder for a positive
>> number, the number after SAF- shall be incremental and unique, base ten
>> notation and without leading zeros.
>> Entries in the database should never be removed, even if they are not used
>> anymore in the code (if a patch is removing or modifying the faulty line).
>> This is to make sure that numbers are not reused which could lead to 
>> conflicts
>> with old branches or misleading justifications.
>> An entry can be reused in multiple places in the code to suppress a finding 
>> if
>> and only if the justification holds for the same non-compliance to the coding
>> standard.
>> An orphan entry, that is an entry who was justifying a finding in the code, 
>> but later
>> that code was removed and there is no other use of that entry in the code, 
>> can be
>> reused as long as the justification for the finding holds. This is done to 
>> avoid the
>> allocation of a new entry with exactly the same justification, that would 
>> lead to waste
>> of space and maintenance issues of the database.
>> The files where to store all the justifications are in xen/docs/misra/ and 
>> are
>> named as safe.json and false-positive-<tool>.json, they have JSON format, 
>> entries
>> of these files have independent ID numbering.
>> Here is an example to add a new justification in safe.json::
>> |{
>> |    "version": "1.0",
>> |    "content": [
>> |        {
>> |            "id":"SAF-0-safe",
>> |            "analyser": {
>> |                "cppcheck": "misra-c2012-20.7",
>> |                "coverity": "misra_c_2012_rule_20_7_violation",
>> |                "eclair": "MC3R1.R20.7"
>> |            },
>> |            "name": “R20.7 C macro parameters not used as expression",
>> |            "text": "The macro parameters used in this […]"
>> |        },
>> |        {
>> |            "id":”SAF-1-safe",
>> |            "analyser": {
>> |                "cppcheck": "unreadVariable",
>> |                "coverity": "UNUSED_VALUE"
>> |            },
>> |            "name": “Variable set but not used",
>> |            "text": “It is safe because […]"
>> |        },
>> |        {
>> |            "id":”SAF-2-safe",
>> |            "analyser": {},
>> |            "name": "Sentinel",
>> |            "text": ""
>> |        }
>> |    ]
>> |}
>> Here is an example to add a new justification in 
>> false-positive-cppcheck.json::
>> |{
>> |    "version": "1.0",
>> |    "content": [
>> |        {
>> |            "id":"SAF-0-false-positive-cppcheck",
>> |            "analyser": {
>> |                "cppcheck": "misra-c2012-20.7"
>> |            },
>> |            “tool-version”: “2.7",
>> |            "name": “R20.7 second operand of member-access operator",
>> |            "text": "The second operand of a member access operator shall 
>> be a name of a member of the type pointed to, so in this particular case it 
>> is wrong to use parentheses on the macro parameter."
>> |        },
>> |        {
>> |            "id":”SAF-1-false-positive-cppcheck",
>> |            "analyser": {},
>> |            “tool-version”: “",
>> |            "name": "Sentinel",
>> |            "text": ""
>> |        }
>> |    ]
>> |}
>> To document a finding, just add another block {[...]} before the sentinel 
>> block,
>> using the id contained in the sentinel block and increment by one the number
>> contained in the id of the sentinel block.
>> Here a brief explanation of the field inside an object of the "content" 
>> array:
> 
> You don't seem to have a longer explanation afterwards. So I would drop 
> "brief".

Ok will remove it

> 
>> - id: it is a unique string that is used to refer to the finding, many 
>> finding
>>  can be tagged with the same id, if the justification holds for any applied
>>  case.
>>  It tells the tool to substitute a Xen in-code comment having this structure:
>>  /* SAF-0-safe [...] \*/
>> - analyser: it is an object containing pair of key-value strings, the key is
>>  the analyser, so it can be cppcheck, coverity or eclair. The value is the
>>  proprietary id corresponding on the finding, for example when coverity is
>>  used as analyser, the tool will translate the Xen in-code coment in this 
>> way:
>>  /* SAF-0-safe [...] \*/ -> /* coverity[coverity-id] \*/
>>  if the object doesn't have a key-value, then the corresponding in-code
>>  comment won't be translated.
>> - name: a simple name for the finding
>> - text: a proper justification to turn off the finding.
>> Here an example of the usage of the in-code comment tags to suppress a 
>> finding for the Rule 8.6:
>> Eclair reports it here:
>> https://eclairit.com:3787/fs/var/lib/jenkins/jobs/XEN/configurations/axis-Target/ARM64/axis-agent/public/builds/549/archive/ECLAIR/out/PROJECT.ecd;/sources/xen/include/xen/kernel.h.html#R50743_1
> 
> How stable is this link?

At first I thought to don’t put in the document the example, so I would have 
dropped from “Here an example of the usage of the in-code […]”,
but I understand I was not very clear on that, and I see the example could be 
also useful, so I think I can create a section in the document
like this below and I would drop the link in favour of some text from eclair 
report.


Justification example
---------------------

Here an example of the usage of the in-code comment tags to suppress a finding
for the Rule 8.6:

Eclair reports it in its report:

| [elcair report] (now eclair is unreachable for an internal error, I will take 
the output when it will be back)
| [...]

Also coverity reports it, here an extract of the finding:

| xen/include/xen/kernel.h:68:
| 1. misra_c_2012_rule_8_6_violation: Function "_start" is declared but never
 defined.

The analysers are complaining because we have this in xen/include/xen/kernel.h
at line 68::

| extern char _start[], _end[], start[];

Those are symbols exported by the linker, hence we will need to have a proper
deviation for this finding.

We will prepare our entry in the database::

|{
|    "version": "1.0",
|    "content": [
|        {
|        [...]
|        },
|        {
|            "id": "SAF-1-safe",
|            "analyser": {
|                “eclair": "MC3R1.R8.6",
|                "coverity": "misra_c_2012_rule_8_6_violation"
|            },
|            "name": "Rule 8.6: linker defined symbols",
|            "text": "It is safe to declare this symbol because it is defined 
in the linker script."
|        },
|        {
|            "id": "SAF-2-safe",
|            "analyser": {},
|            "name": "Sentinel",
|            "text": ""
|        }
|    ]
|}

And we will use the proper tag above the violation line::

| /* SAF-1-safe [optional text] */
| extern char _start[], _end[], start[];

This entry will fix also the violation on _end and start, because they are on
the same line and the same "violation ID".

Also, the same tag can be used on other symbols from the linker that are
declared in the codebase, because the justification holds for them too.


> 
> The rest of the document LGTM.
> 
> Cheers,
> 
> -- 
> Julien Grall


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.