From: Nicola Vetrini <nicola.vetrini@bugseng.com>
To: Jan Beulich <jbeulich@suse.com>,
Andrew Cooper3 <andrew.cooper3@citrix.com>
Cc: "Dmytro Prokopchuk1" <dmytro_prokopchuk1@epam.com>,
"Doug Goldstein" <cardoe@cardoe.com>,
"Stefano Stabellini" <sstabellini@kernel.org>,
"Anthony PERARD" <anthony.perard@vates.tech>,
"Michal Orzel" <michal.orzel@amd.com>,
"Julien Grall" <julien@xen.org>,
"Roger Pau Monné" <roger@xenproject.org>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH] misra: deviate C library-style functions from Misra C:2012 rule 11.8
Date: Tue, 29 Sep 2026 19:52:52 +0200 [thread overview]
Message-ID: <2a8557d7ba88e95ec75148ff180ae0a0@bugseng.com> (raw)
In-Reply-To: <0373fcc0-5bc9-4140-a2c9-52a31c7e42b5@suse.com>
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@epam.com>
>>>
>>> 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
>> 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.
--
Nicola Vetrini, B.Sc.
Software Engineer
BUGSENG (https://bugseng.com)
LinkedIn: https://www.linkedin.com/in/nicola-vetrini-a42471253
next prev parent reply other threads:[~2026-09-29 17:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-29 9:03 [PATCH] misra: deviate C library-style functions from Misra C:2012 rule 11.8 Dmytro Prokopchuk1
2026-09-29 9:11 ` Nicola Vetrini
2026-09-29 13:40 ` Jan Beulich
2026-09-29 14:56 ` Nicola Vetrini
2026-09-29 15:11 ` Jan Beulich
2026-09-29 17:52 ` Nicola Vetrini [this message]
2026-10-01 12:39 ` Andrew Cooper
2026-10-01 12:43 ` Jan Beulich
2026-10-01 13:16 ` Andrew Cooper
2026-10-01 13:35 ` Nicola Vetrini
2026-10-04 21:05 ` Nicola Vetrini
2026-10-13 14:31 ` Dmytro Prokopchuk1
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2a8557d7ba88e95ec75148ff180ae0a0@bugseng.com \
--to=nicola.vetrini@bugseng.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@vates.tech \
--cc=cardoe@cardoe.com \
--cc=dmytro_prokopchuk1@epam.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=michal.orzel@amd.com \
--cc=roger@xenproject.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.