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

Re: [XEN PATCH v3] misra: address violation of MISRA C Rule 10.1


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
  • Date: Mon, 14 Jul 2025 16:16:21 +0200
  • Arc-authentication-results: i=1; bugseng.com; arc=none smtp.remote-ip=162.55.131.47
  • Arc-message-signature: i=1; d=bugseng.com; s=openarc; a=rsa-sha256; c=relaxed/relaxed; t=1752502581; h=DKIM-Signature:MIME-Version:Date:From:To:Cc:Subject:In-Reply-To: References:Message-ID:X-Sender:Organization:Content-Type: Content-Transfer-Encoding; bh=KSEr0kEn4L1Z6vVsgrxqh+2ZJnXJpzMLXqD6hanV4ck=; b=HjACJwqkulJ+J6WnYaQYPizRc0JN3Mv6STw+bQ6w9nQ/Gq8k/3sUqDjum9H3pesMx+Q8 mOJ6/R7tAdfk4rCz7gDLpcHIFYzIpK7hm673KMYq61NKlnT1ViT3ywJtDnq8+HpuLizSw CgiB9dNALawzvNoTozogwXSOcXyPVK1JYetIpIWB0W7FoN/PIB7Iv27CAT62IEkUnriZe RR0D868YX5t2HJ96q41KPm97Cb1wXpq2g/RhNQWn+tRvvIDMPq5O4PY0cWwcxQWqfzX9i rmhaqEk3PjYymaY8ZT5SxDWi+sYIt+8xLgU9so83kb/Jx98oO1njlT8hlSR8JuWaVw2pR RE28RWT3sYghgEBuFMqQSMOfiZaqsEjVrEDUL6/Y6Z96lCSTMeq7USaLPFrbTcrDuaN72 b/7bE/xS/ER/ezdzlLzUr3lpusU1OTcLhwOl+OAeS9knDRkZ2TfW6WnLkdLqM8qVV2Xq0 zfEndJYrsBsYIumx1OjCl1YhXdfbaVqOCcmXv9oayimbakrDmvIPOKh2YeoWyGKKo58AT 1DRp1+aeLzVNbT1zbmC0UecK76K+rlGAKYYKp4p6TSQ6jPIJKGIbiSnBYys5GVQe8E3fW uIsxx+lTa++cGEXULWvg6vgkNZ1dni8A2H6ohfRgpz9+kd2jly1cWkTNh+7NvkI=
  • Arc-seal: i=1; d=bugseng.com; s=openarc; a=rsa-sha256; cv=none; t=1752502581; b=NhG3ZMiA2BTRm9Zzh+8JlgLpGxaBptpVhOijry0DMHvgwcQAqv7F0vvhMhTvw/YFbsbX +Jfjp1IGnKPLuTstGttEtHO20SFQV46LGSGKZ8qWk6oFL26eh6ycOIG+UCc3PfkVNJrQt 6jXzS6UjZ7IMgwWCjLh+av2GMsBuu+zDmI3wCqXMEdUISsbKKBGnq5tPvkKfjXgLtehcw Z7O00RRZAmb/IxwsE1eS3vyPHDVT6bgkPO4S49OUe8z9fIYMnBe13xCMEFMnjtw1TAEFT 9TbuqRa+sUudKp8mCHtzKni4wicNCySiQu7i0G/Qb+6wWcsfofZI/5BAkC47/5EJ96sjZ Ps/QPItchOQB/CydrtnnTUP2LM3rbzmTNtFjXWb2tqYMqD25EGEM8tsIXjKDG3P2P2nCV g0Qfc2jEir6qX+BnJN4VRtVgYDEnH+CJE0Cqsb0PdtsJ39gr7C/V3GNLWxkIiwfmsXpX/ OfYC3l4agYauMABOkIq//CUKu49bAyDc3bMsDIPBkuKgciW0Y9OupbErDg88CmmT53JXb jHDUGG3Fa4b1wTYHrAioDe95LFDdAWCslli25b2M0ss+aGXaGvQJ5XrDLmZQZcd4XMmTl S5Axc9IySfJ+Kpg+vXCbSWek/IvwWFBTNTwhWOsaxRNp1TyFkOiFwaibDO9O0fE=
  • Authentication-results: bugseng.com; arc=none smtp.remote-ip=162.55.131.47
  • Cc: Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Rahul Singh <rahul.singh@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Mon, 14 Jul 2025 14:16:32 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 2025-07-14 15:49, Jan Beulich wrote:
On 14.07.2025 15:26, Dmytro Prokopchuk1 wrote:
Rule 10.1: Operands shall not be of an
inappropriate essential type

The following are non-compliant:
- boolean used as a numeric value.

The result of the '__isleap' macro is a boolean.
Use a ternary operator to replace it with a numeric value.

The result of 'NOW() > timeout' is a boolean,
which is compared to a numeric value. Fix this.
Regression was introdiced by commit:
be7f047e08 (xen/arm: smmuv3: Replace linux functions with xen functions.)

Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
---
Changes since v2:
- improve the wording
Link to v2: https://patchew.org/Xen/41538b6b19811eb74c183051d3e7a4fd216404e6.1752232902.git.dmytro._5Fprokopchuk1@xxxxxxxx/ Link to the deviation of an unary minus: https://patchew.org/Xen/7e6263a15c71aafc41fe72cecd1f15c3ce8846f2.1752492180.git.dmytro._5Fprokopchuk1@xxxxxxxx/

Jan, regarding that:
If an expression is needed here, I'd suggest to use !!, as we have in
(luckily decreasing) number of places elsewhere. Personally I don't
understand though why a boolean cannot be used as an array index.

The '!!' isn't a solution here, we'll have other violation:
`!' logical negation operator has essential type boolean and standard type `int'
(https://saas.eclairit.com:3787/fs/var/local/eclair/xen-project.ecdf/xen-project/people/dimaprkp4k/xen/ECLAIR_normal/deviate_10.1_rule/ARM64/10674114852/PROJECT.ecd;/by_service/MC3A2.R10.1.html#{%22select%22:true,%22selection%22:{%22hiddenAreaKinds%22:[],%22hiddenSubareaKinds%22:[],%22show%22:false,%22selector%22:{%22enabled%22:true,%22negated%22:true,%22kind%22:0,%22domain%22:%22kind%22,%22inputs%22:[{%22enabled%22:true,%22text%22:%22violation%22}]}}})

And that doesn't fall under any other of the deviations we already have?
__isleap() is used in another boolean context after all, and apparently
there's no issue there.


Hi Jan,

I double-checked: there is no specific deviation for using a boolean as an array subscript.

This is the only problematic use of a macro that returns an essentially boolean expr used as an operand to an operator that expects an integer, which is the reason of the violation:
xen/common/time.c:#define __isleap(year) \
xen/common/time.c:    while ( days >= (rem = __isleap(y) ? 366 : 365) )
xen/common/time.c:        days += __isleap(y) ? 366 : 365;
xen/common/time.c: ip = (const unsigned short int *)__mon_lengths[__isleap(y)];

Thanks,
 Nicola

Well, in our case boolean can be used as an array index.
But index value is limited: 0 or 1.
I guess MISRA wants to predict such errors related to index limitations. And I think fixing the code is easier here, instead of writing a deviation.

It may be easier indeed, but ...

--- a/xen/common/time.c
+++ b/xen/common/time.c
@@ -84,7 +84,7 @@ struct tm gmtime(unsigned long t)
     }
     tbuf.tm_year = y - 1900;
     tbuf.tm_yday = days;
-    ip = (const unsigned short int *)__mon_lengths[__isleap(y)];
+ ip = (const unsigned short int *)__mon_lengths[__isleap(y) ? 1 : 0];

... especially as long as it's un-annotated, I'd be very likely to submit
a patch to undo this again, should I ever run across this after having
forgotten about the change here. At least to me, _this_ is the confusing
way to write things.

Once you add a comment though, you can as well leave the code unchanged
and use a SAF comment.

Jan

--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253



 


Rackspace

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