All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Alejandro Colomar" <alx@kernel.org>
Cc: devicetree@vger.kernel.org, linux-gpio@vger.kernel.org,
	robh@kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH v4 4/6] stddef: Add const_cast()
Date: Wed, 11 Nov 2026 20:11:06 +0000	[thread overview]
Message-ID: <sashiko-outbox-209615@kernel.org> (raw)
In-Reply-To: <ce623fe0432ba7fe74e12171e52d2dd1f1ad2c39.1794425425.git.alx@kernel.org>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] stddef: broken _Generic type associations in const_cast()
- [High] stddef: missing Signed-off-by trailer for Co-developed-by
  author
--

commit 773dbe524c50943cb4a47fa3a2b5e7f50b113c9d
Author: Alejandro Colomar <alx@kernel.org>

> stddef: Add const_cast()
>
> This macro serves to cast const away without risking unwanted
> conversions due to mistakes in the cast.
>
> It's similar to C++'s const_cast(), but it is more restrictive: it can
> only cast away 'const', and not arbitrary qualifiers.
>
> David made it a bit more robust.
>
> Link: https://lore.kernel.org/linux-hardening/20261111102535.434c2eee@pumpkin/
> Co-developed-by: David Laight <david.laight.linux@gmail.com>
> Signed-off-by: Alejandro Colomar <alx@kernel.org>

[Severity: High]
Co-developed-by: David Laight <david.laight.linux@gmail.com> is missing a
matching Signed-off-by trailer, which is required by the Developer's
Certificate of Origin rules (or Suggested-by can be used if he only
suggested an improvement on the list).

> diff --git a/include/linux/stddef.h b/include/linux/stddef.h
> index e1851c50c89b5..5201d71db3876 100644
> --- a/include/linux/stddef.h
> +++ b/include/linux/stddef.h
> @@ -194,4 +194,16 @@ enum {
>  #define TRAILING_OVERLAP(TYPE, NAME, FAM, MEMBERS)				\
>  	__TRAILING_OVERLAP(TYPE, NAME, FAM, /* no attrs */, MEMBERS)
>  
> +/**
> + * const_cast() - At most, drop const in the left-most derivation of a pointer
> + *
> + * @T: Type for the cast.
> + * @p: Pointer to be casted.
> + *
> + * If @p is of type const @T, then it is casted to @T.
> + * If @p is of type @T, then it is returned without any casts.
> + * This avoids mistakes that change anything other than 'const' in a cast.
> + */
> +#define const_cast(T, p)  _Generic(p, const T: (T) (p), T: (p))

[Severity: High]
Does const_cast(T, p) fail to compile when T is already a pointer to a
const-qualified type?  When T is const char *, textually prepending const
produces const const char *, which collapses to const char * and gives
_Generic two associations with the same type; this breaks the build in
drivers/base/property.c (fwnode_name_eq()) once strprefix() uses
const_cast() on a const char * argument.

When T is a pointer typedef or typeof(ptr), const T qualifies the pointer
itself (char * const) rather than the pointee, and since _Generic strips
top-level qualifiers from p, the const T association never matches a
pointer to const.  For a multi-level pointer such as char **, const T
expands to const char ** instead of char * const *, rejecting valid
char * const * inputs while permitting unsafe const char ** to char **
casts.  Also, omitting the (T) cast in the T: (p) branch leaves a
non-const array argument with its array type and sizeof instead of
returning a pointer of type T.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1794425425.git.alx@kernel.org?part=4

  reply	other threads:[~2026-11-11 20:11 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-05 11:12 [PATCH v1 0/2] Add strprefix() and fix a bug with it Alejandro Colomar
2026-11-05 11:21 ` Alejandro Colomar
2026-11-05 11:13 ` [PATCH v1 1/2] string: Add strprefix(), and deprecate str_has_prefix() Alejandro Colomar
2026-11-05 11:27   ` Andy Shevchenko
2026-11-05 12:28     ` Alejandro Colomar
2026-11-05 16:14   ` Steven Rostedt
2026-11-05 16:33     ` Alejandro Colomar
2026-11-05 16:50       ` Steven Rostedt
2026-11-05 17:46         ` Alejandro Colomar
2026-11-05 18:08           ` Andy Shevchenko
2026-11-05 18:12             ` Andy Shevchenko
2026-11-05 21:24               ` Alejandro Colomar
2026-11-05 21:48                 ` Linus Torvalds
2026-11-05 22:25                   ` Alejandro Colomar
2026-11-05 23:21                     ` Linus Torvalds
2026-11-06  0:01                       ` Alejandro Colomar
2026-11-06  7:15             ` Krzysztof Kozlowski
2026-11-05 11:13 ` [PATCH v1 2/2] device property: Fix fwnode_name_eq() for empty node names Alejandro Colomar
2026-11-05 11:24 ` [PATCH v1 0/2] Add strprefix() and fix a bug with it Andy Shevchenko
2026-11-05 11:38   ` Alejandro Colomar
2026-11-05 11:59     ` Andy Shevchenko
2026-11-05 12:30 ` Bartosz Golaszewski
2026-11-05 12:49   ` Alejandro Colomar
2026-11-05 12:46 ` [PATCH v2 " Alejandro Colomar
2026-11-05 12:46   ` [PATCH v2 1/2] string: Add strprefix(), and deprecate str_has_prefix() Alejandro Colomar
2026-11-05 12:51     ` Geert Uytterhoeven
2026-11-05 13:12       ` Alejandro Colomar
2026-11-07  2:44         ` Maciej W. Rozycki
2026-11-07  7:33           ` Alejandro Colomar
2026-11-08 11:05             ` Maciej W. Rozycki
2026-11-08 11:49               ` Alejandro Colomar
2026-11-08 11:54                 ` Alejandro Colomar
2026-11-09 22:36                   ` Andy Shevchenko
2026-11-05 12:46   ` [PATCH v2 2/2] device property: Fix fwnode_name_eq() for empty node names Alejandro Colomar
2026-11-05 14:01   ` [PATCH v2 0/2] Add strprefix() and fix a bug with it Bartosz Golaszewski
2026-11-05 14:16     ` Alejandro Colomar
2026-11-05 14:42       ` Andy Shevchenko
2026-11-05 15:06         ` Alejandro Colomar
2026-11-07  2:42         ` Maciej W. Rozycki
2026-11-07 14:05           ` Andy Shevchenko
2026-11-05 15:00       ` Bartosz Golaszewski
2026-11-05 15:14         ` Alejandro Colomar
2026-11-05 15:21       ` Krzysztof Kozlowski
2026-11-05 16:27         ` Steven Rostedt
2026-11-05 16:30           ` Krzysztof Kozlowski
2026-11-05 16:42         ` Alejandro Colomar
2026-11-11 19:55 ` [PATCH v4 0/6] " Alejandro Colomar
2026-11-11 19:55   ` [PATCH v4 1/6] string: Add strprefix(), and deprecate str_has_prefix() Alejandro Colomar
2026-11-11 20:14     ` sashiko-bot
2026-11-12 22:31     ` David Laight
2026-11-12 23:34       ` Alejandro Colomar
2026-11-11 19:55   ` [PATCH v4 2/6] string: Warn if the prefix is the empty string Alejandro Colomar
2026-11-11 20:15     ` sashiko-bot
2026-11-12  1:17     ` kernel test robot
2026-11-12  1:28     ` kernel test robot
2026-11-11 19:55   ` [PATCH v4 3/6] device property: Fix fwnode_name_eq() for empty node names Alejandro Colomar
2026-11-11 19:55   ` [PATCH v4 4/6] stddef: Add const_cast() Alejandro Colomar
2026-11-11 20:11     ` sashiko-bot [this message]
2026-11-11 20:18     ` Alejandro Colomar
2026-11-11 19:55   ` [PATCH v4 5/6] string: Add [C]QChar_of() and QVoid_of() Alejandro Colomar
2026-11-11 19:55   ` [PATCH v4 6/6] string: Make strprefix() const-qualifier-generic Alejandro Colomar
2026-11-11 20:11     ` sashiko-bot
2026-11-11 19:57   ` [PATCH v4 0/6] Add strprefix() and fix a bug with it Alejandro Colomar
2026-11-12 15:17     ` Andy Shevchenko
2026-11-11 20:07   ` Alejandro Colomar

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=sashiko-outbox-209615@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=alx@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.