[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] misra: deviate C library-style functions from Misra C:2012 rule 11.8
- To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
- From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
- Date: Thu, 1 Oct 2026 13:39:55 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Y4cere2LRtLINpQR31Xmx3gH2C2G6SLtbMgX1aAABLM=; b=Kq/2UmYH6UCLx7juY5VJNBxuMxn5qoaS1Zqzs6DN/7vATyRrhDQSvElImm0y1d1dCa3SSos23AHtZPO85DsVeMFn9AmxbHz1TuRBZlzD0bIm5uMHQ4+dMAVgBq7zp8ibAWwifvvJuCgRWmRq+ZYgNnwzsWc6kTwCeihJSjsDZ+zVBk8FAVQH4zf27hgpVpkwDqdtxjORYowmnBHCQi1ntxC9Nf14PB334VvAH+YKz1S1f+3gkkoLhTPVXIIuOl/3hrseTonc56waFB2CBORF009EXxfJkmcnXkeoqwH/7N6JMT8wxCowckPE7f2qr0JyeRU0yI/gTa93aO3Xgb720Q==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vs1PxZq7JZ8/813m9RWEjXX7iGjAHWkLX7wL7GUC11Po7GyIvMRn8+zdMtct+48THgn+XbkhtHOHvm27WDvElm8se5cwMpUdg3koT8OfqFgyhj69V4crWIFx/44FikDFUQ7OQpFVmZN1JPcRxauLxqFvdZxFAus0YOk5PyD4xaWn2f78z3pDh4RbfHJ5Kj0RSDlE4k3akSv/Y0UpRyzWBoJMY2+ugqOjJK2VJQb5o3TxtIFvCaZEr6UQa7xJV3/4mYR1BR5yIPlqeJ48tXT1g93Qw57wSiFR6vG/BzcuQ8EECPC3BHq0RVmZafBiv7dDg50hKLtrbkDoQKv8cOwg5g==
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
- Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
- Autocrypt: addr=andrew.cooper3@xxxxxxxxxx; keydata= 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 6+ahAA==
- Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Dmytro Prokopchuk1 <dmytro_prokopchuk1@xxxxxxxx>, Doug Goldstein <cardoe@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Thu, 01 Oct 2026 12:40:29 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 29/09/2026 6:52 pm, Nicola Vetrini wrote:
> On 2026-09-29 17:11, Jan Beulich wrote:
>> On 29.09.2026 16:56, Nicola Vetrini wrote:
>>> On 2026-09-29 15:40, Jan Beulich wrote:
>>>> On 29.09.2026 11:03, Dmytro Prokopchuk1 wrote:
>>>>> bsearch(), memchr(), memchr_inv(), strchr(), strpbrk(), strrchr() and
>>>>> strstr() all accept a const pointer/object but return a non-const
>>>>> pointer
>>>>> to the matched element or byte, matching their standard C library
>>>>> interfaces. The const qualifier is deliberately stripped so that
>>>>> callers
>>>>> searching a non-const object get back a mutable pointer to it. Fixing
>>>>> this would require changing the public API, so document these uses as
>>>>> deviations instead.
>>>>>
>>>>> Update docs/misra/rules.rst to note that this class of double-use
>>>>> library functions is deviated on a per-function basis.
>>>>>
>>>>> Signed-off-by: Dmytro Prokopchuk <dmytro_prokopchuk1@xxxxxxxx>
>>>>
>>>> When I prepared my 11.8 series [1], I was wondering whether we need to
>>>> go
>>>> as far as deviating these. Since we now uniformly take gcc5 as minimum
>>>> baseline, there is (at least in theory) the option of using
>>>> _Generic to
>>>> cover the dual-use. One question there is whether Eclair would
>>>> recognize
>>>> such - Nicola? After all, looking at e.g. glibc's implementation, the
>>>> functions themselves remain "unsafe" there; it's a macro wrapping them
>>>> which puts the lost qualifier back.
>>>
>>> Could you provide a concrete example?
>>
>> From glibc 2.43:
>>
>> # define __glibc_const_generic(PTR, CTYPE, CALL) \
>> _Generic (0 ? (PTR) : (void *) 1, \
>> const void *: (CTYPE) (CALL), \
>> default: CALL)
>>
>> while the declarations still are e.g.
>>
>> extern void *memchr (const void *__s, int __c, size_t __n)
>> __THROW __attribute_pure__ __nonnull ((1));
>>
>> (and hence the implementation still - necessarily - casts away
>> const-ness).
>>
>
> Ok, will look into that
We are going to have to deviate the implementation, even if we are using
_Generic() to force const-correct behaviour from the callers.
We could duplicate the functions, but there's a different rule about
that. We can't use ELF aliasing tricks because that breaks software
type-hashing techniques for control-flow integrity.
>
>>> In passing, for stronger
>>> guarantees w.r.t. _Generic it would be better to switch to MISRA C:2012
>>> Amendment 3, which has specific support for that feature. Keeping AMD2
>>> and using _Generic weakens a bit the safety argument (though one can do
>>> an analysis himself, of course).
>>
>> As this keeps coming up, we surely want to discuss / progress this move.
>>
>> Jan
>
> That makes a lot of sense. We could add to the next community call or
> maintainers/committers call to present the problem and propose a way
> forward so that all stakeholders are aware. From my side, I can
> explain what moving from one to the other can entail in terms of
> static analysis, while others (e.g. Andrew Cooper) may expand a bit on
> specific C11/C18 features is desirable aside from safety.
>
What I've got for now is all in
https://gitlab.com/xen-project/xen/-/work_items/201
We want _Generic() for const-correctness reasons only. (And possibly
API transition work - this has mixed results but can substantially
reduce churn in a series if done well).
This depends on moving to C11, which we need to at some point anyway
even if weren't for _Generic().
The other area was the use of auto, but that's sorted now and will
continue to be an implementation extension until we get to the point of
considering C23.
~Andrew
|