rtc: Avoid a couple of -Wflex-array-member-not-at-end warnings
Subsystems (2)
PATCH v2 1/1 rtc: Avoid a couple of -Wflex-array-member-not-at-end warnings
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/rtc/rtc-cros-ec.c:62:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/rtc/rtc-cros-ec.c:40:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
---
Change in v2:
- Cast to struct ec_response_rtc *, instead of using memcpy(). (Tzung-Bi Shih)
v1:
- Link: https://lore.kernel.org/linux-hardening/Z9N8BsVJF-s6Hcvd@kspp/
drivers/rtc/rtc-cros-ec.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-)
drivers/rtc/rtc-cros-ec.c +12 -18
@@ -35,21 +35,18 @@ struct cros_ec_rtc {static int cros_ec_rtc_get (struct cros_ec_device *cros_ec,u32 command,u32 *response) { + DEFINE_RAW_FLEX(struct cros_ec_command, msg, data, + sizeof(struct ec_response_rtc));int ret; -struct { -struct cros_ec_command msg; -struct ec_response_rtc data; - } __packed msg; -memset (&msg,0 ,sizeof (msg)); - msg.msg.command = command; - msg.msg.insize =sizeof (msg.data); + msg->command = command; + msg->insize =sizeof (struct ec_response_rtc ); - ret =cros_ec_cmd_xfer_status (cros_ec, &msg.msg); + ret =cros_ec_cmd_xfer_status (cros_ec, msg);if (ret <0 )return ret; - *response = msg.data.time; + *response = ((struct ec_response_rtc *)msg->data)->time;return 0 ; }
@@ -57,18 +54,15 @@ static int cros_ec_rtc_get(struct cros_ec_device *cros_ec, u32 command,static int cros_ec_rtc_set (struct cros_ec_device *cros_ec,u32 command,u32 param) { + DEFINE_RAW_FLEX(struct cros_ec_command, msg, data, + sizeof(struct ec_response_rtc));int ret; -struct { -struct cros_ec_command msg; -struct ec_response_rtc data; - } __packed msg; -memset (&msg,0 ,sizeof (msg)); - msg.msg.command = command; - msg.msg.outsize =sizeof (msg.data); - msg.data.time = param; + msg->command = command; + msg->outsize =sizeof (struct ec_response_rtc ); + ((struct ec_response_rtc *)msg->data)->time = param; - ret =cros_ec_cmd_xfer_status (cros_ec, &msg.msg); + ret =cros_ec_cmd_xfer_status (cros_ec, msg);if (ret <0 )return ret;return 0 ;
Signature · 1 line
2.43.0
Quoted 11 lines · Gustavo A. R. Silva
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/rtc/rtc-cros-ec.c:62:40: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]drivers/rtc/rtc-cros-ec.c:40: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 <[email protected]>
Quoted 8 lines · Gustavo A. R. Silva
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:
[...]
Applied, thanks!
[1/1] rtc: Avoid a couple of -Wflex-array-member-not-at-end warnings
https://git.kernel.org/abelloni/c/0176188220a7
Best regards,
Signature · 3 lines
Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com