* [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
@ 2025-03-17 0:54 Gustavo A. R. Silva
2025-03-17 1:32 ` Tzung-Bi Shih
0 siblings, 1 reply; 7+ messages in thread
From: Gustavo A. R. Silva @ 2025-03-17 0:54 UTC (permalink / raw)
To: Jonathan Cameron, Lars-Peter Clausen, Benson Leung, Guenter Roeck
Cc: linux-iio, chrome-platform, linux-kernel, Gustavo A. R. Silva,
linux-hardening
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.
Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
a flexible structure where the size of the flexible-array member
is known at compile-time, and refactor the rest of the code,
accordingly.
So, with these changes, fix the following warning:
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c:39:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
This looks pretty much like the following patch for RTC:
https://lore.kernel.org/linux-hardening/Z9PpPg06OK8ghNvm@kspp/
Thanks
.../cros_ec_sensors/cros_ec_sensors_core.c | 27 +++++++------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
index 7751d6f69b12..760a07f64390 100644
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
@@ -34,25 +34,18 @@
static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
u16 cmd_offset, u16 cmd, u32 *mask)
{
+ DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
+ sizeof(struct ec_response_get_cmd_versions));
int ret;
- struct {
- struct cros_ec_command msg;
- union {
- struct ec_params_get_cmd_versions params;
- struct ec_response_get_cmd_versions resp;
- };
- } __packed buf = {
- .msg = {
- .command = EC_CMD_GET_CMD_VERSIONS + cmd_offset,
- .insize = sizeof(struct ec_response_get_cmd_versions),
- .outsize = sizeof(struct ec_params_get_cmd_versions)
- },
- .params = {.cmd = cmd}
- };
-
- ret = cros_ec_cmd_xfer_status(ec_dev, &buf.msg);
+
+ buf->command = EC_CMD_GET_CMD_VERSIONS + cmd_offset;
+ buf->insize = sizeof(struct ec_response_get_cmd_versions);
+ buf->outsize = sizeof(struct ec_params_get_cmd_versions);
+ ((struct ec_params_get_cmd_versions *)buf->data)->cmd = cmd;
+
+ ret = cros_ec_cmd_xfer_status(ec_dev, buf);
if (ret >= 0)
- *mask = buf.resp.version_mask;
+ *mask = ((struct ec_response_get_cmd_versions *)buf->data)->version_mask;
return ret;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-17 0:54 [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
@ 2025-03-17 1:32 ` Tzung-Bi Shih
2025-03-17 4:40 ` Gustavo A. R. Silva
0 siblings, 1 reply; 7+ messages in thread
From: Tzung-Bi Shih @ 2025-03-17 1:32 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: Jonathan Cameron, Lars-Peter Clausen, Benson Leung, Guenter Roeck,
linux-iio, chrome-platform, linux-kernel, linux-hardening
On Mon, Mar 17, 2025 at 11:24:59AM +1030, Gustavo A. R. Silva wrote:
> static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
> u16 cmd_offset, u16 cmd, u32 *mask)
> {
> + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
> + sizeof(struct ec_response_get_cmd_versions));
max(sizeof(struct ec_params_get_cmd_versions),
sizeof(struct ec_response_get_cmd_versions))?
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-17 1:32 ` Tzung-Bi Shih
@ 2025-03-17 4:40 ` Gustavo A. R. Silva
2025-03-17 12:04 ` Jonathan Cameron
0 siblings, 1 reply; 7+ messages in thread
From: Gustavo A. R. Silva @ 2025-03-17 4:40 UTC (permalink / raw)
To: Tzung-Bi Shih, Gustavo A. R. Silva
Cc: Jonathan Cameron, Lars-Peter Clausen, Benson Leung, Guenter Roeck,
linux-iio, chrome-platform, linux-kernel, linux-hardening
On 17/03/25 12:02, Tzung-Bi Shih wrote:
> On Mon, Mar 17, 2025 at 11:24:59AM +1030, Gustavo A. R. Silva wrote:
>> static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
>> u16 cmd_offset, u16 cmd, u32 *mask)
>> {
>> + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
>> + sizeof(struct ec_response_get_cmd_versions));
>
> max(sizeof(struct ec_params_get_cmd_versions),
> sizeof(struct ec_response_get_cmd_versions))?
I considered that, but DEFINE_RAW_FLEX() complains about it due to the
_Static_assert(__builtin_constant_p(count), \
"onstack flex array members require compile-time const count");
--
Gustavo
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-17 4:40 ` Gustavo A. R. Silva
@ 2025-03-17 12:04 ` Jonathan Cameron
2025-03-18 1:51 ` Tzung-Bi Shih
0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2025-03-17 12:04 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: Tzung-Bi Shih, Gustavo A. R. Silva, Lars-Peter Clausen,
Benson Leung, Guenter Roeck, linux-iio, chrome-platform,
linux-kernel, linux-hardening
On Mon, 17 Mar 2025 15:10:38 +1030
"Gustavo A. R. Silva" <gustavo@embeddedor.com> wrote:
> On 17/03/25 12:02, Tzung-Bi Shih wrote:
> > On Mon, Mar 17, 2025 at 11:24:59AM +1030, Gustavo A. R. Silva wrote:
> >> static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
> >> u16 cmd_offset, u16 cmd, u32 *mask)
> >> {
> >> + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
> >> + sizeof(struct ec_response_get_cmd_versions));
> >
> > max(sizeof(struct ec_params_get_cmd_versions),
> > sizeof(struct ec_response_get_cmd_versions))?
>
> I considered that, but DEFINE_RAW_FLEX() complains about it due to the
>
> _Static_assert(__builtin_constant_p(count), \
> "onstack flex array members require compile-time const count");
>
Maybe add an assert that you indeed have the larger of the two + a comment
on why it matters?
> --
> Gustavo
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-17 12:04 ` Jonathan Cameron
@ 2025-03-18 1:51 ` Tzung-Bi Shih
2025-03-18 8:18 ` Kees Cook
0 siblings, 1 reply; 7+ messages in thread
From: Tzung-Bi Shih @ 2025-03-18 1:51 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Gustavo A. R. Silva, Gustavo A. R. Silva, Lars-Peter Clausen,
Benson Leung, Guenter Roeck, linux-iio, chrome-platform,
linux-kernel, linux-hardening
On Mon, Mar 17, 2025 at 12:04:47PM +0000, Jonathan Cameron wrote:
> On Mon, 17 Mar 2025 15:10:38 +1030
> "Gustavo A. R. Silva" <gustavo@embeddedor.com> wrote:
>
> > On 17/03/25 12:02, Tzung-Bi Shih wrote:
> > > On Mon, Mar 17, 2025 at 11:24:59AM +1030, Gustavo A. R. Silva wrote:
> > >> static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
> > >> u16 cmd_offset, u16 cmd, u32 *mask)
> > >> {
> > >> + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
> > >> + sizeof(struct ec_response_get_cmd_versions));
> > >
> > > max(sizeof(struct ec_params_get_cmd_versions),
> > > sizeof(struct ec_response_get_cmd_versions))?
> >
> > I considered that, but DEFINE_RAW_FLEX() complains about it due to the
> >
> > _Static_assert(__builtin_constant_p(count), \
> > "onstack flex array members require compile-time const count");
> >
> Maybe add an assert that you indeed have the larger of the two + a comment
> on why it matters?
Or, is there a way for using compiler-time MAX()? I failed to find so.
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-18 1:51 ` Tzung-Bi Shih
@ 2025-03-18 8:18 ` Kees Cook
2025-03-18 10:05 ` Gustavo A. R. Silva
0 siblings, 1 reply; 7+ messages in thread
From: Kees Cook @ 2025-03-18 8:18 UTC (permalink / raw)
To: Tzung-Bi Shih, Jonathan Cameron
Cc: Gustavo A. R. Silva, Gustavo A. R. Silva, Lars-Peter Clausen,
Benson Leung, Guenter Roeck, linux-iio, chrome-platform,
linux-kernel, linux-hardening
On March 17, 2025 6:51:50 PM PDT, Tzung-Bi Shih <tzungbi@kernel.org> wrote:
>On Mon, Mar 17, 2025 at 12:04:47PM +0000, Jonathan Cameron wrote:
>> On Mon, 17 Mar 2025 15:10:38 +1030
>> "Gustavo A. R. Silva" <gustavo@embeddedor.com> wrote:
>>
>> > On 17/03/25 12:02, Tzung-Bi Shih wrote:
>> > > On Mon, Mar 17, 2025 at 11:24:59AM +1030, Gustavo A. R. Silva wrote:
>> > >> static int cros_ec_get_host_cmd_version_mask(struct cros_ec_device *ec_dev,
>> > >> u16 cmd_offset, u16 cmd, u32 *mask)
>> > >> {
>> > >> + DEFINE_RAW_FLEX(struct cros_ec_command, buf, data,
>> > >> + sizeof(struct ec_response_get_cmd_versions));
>> > >
>> > > max(sizeof(struct ec_params_get_cmd_versions),
>> > > sizeof(struct ec_response_get_cmd_versions))?
>> >
>> > I considered that, but DEFINE_RAW_FLEX() complains about it due to the
>> >
>> > _Static_assert(__builtin_constant_p(count), \
>> > "onstack flex array members require compile-time const count");
>> >
>> Maybe add an assert that you indeed have the larger of the two + a comment
>> on why it matters?
>
>Or, is there a way for using compiler-time MAX()? I failed to find so.
Did MAX() not work? I would expect it to do compile time comparison of two sizeof()s. It can do other arithmetic no problem, e.g.:
https://elixir.bootlin.com/linux/v6.13.7/source/lib/vsprintf.c#L1097
--
Kees Cook
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning
2025-03-18 8:18 ` Kees Cook
@ 2025-03-18 10:05 ` Gustavo A. R. Silva
0 siblings, 0 replies; 7+ messages in thread
From: Gustavo A. R. Silva @ 2025-03-18 10:05 UTC (permalink / raw)
To: Kees Cook, Tzung-Bi Shih, Jonathan Cameron
Cc: Gustavo A. R. Silva, Lars-Peter Clausen, Benson Leung,
Guenter Roeck, linux-iio, chrome-platform, linux-kernel,
linux-hardening
> Did MAX() not work? I would expect it to do compile time comparison of two sizeof()s. It can do other arithmetic no problem, e.g.:
> https://elixir.bootlin.com/linux/v6.13.7/source/lib/vsprintf.c#L1097
Yep, that does the trick. :)
Thanks
--
Gustavo
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-03-18 10:06 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-17 0:54 [PATCH][next] iio: cros_ec: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-03-17 1:32 ` Tzung-Bi Shih
2025-03-17 4:40 ` Gustavo A. R. Silva
2025-03-17 12:04 ` Jonathan Cameron
2025-03-18 1:51 ` Tzung-Bi Shih
2025-03-18 8:18 ` Kees Cook
2025-03-18 10:05 ` Gustavo A. R. Silva
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.