* [PATCH v2][next] drm/nouveau: disp: Avoid -Wflex-array-member-not-at-end warning
@ 2025-04-02 21:58 Gustavo A. R. Silva
2025-04-03 16:05 ` Danilo Krummrich
0 siblings, 1 reply; 3+ messages in thread
From: Gustavo A. R. Silva @ 2025-04-02 21:58 UTC (permalink / raw)
To: Lyude Paul, Danilo Krummrich, David Airlie, Simona Vetter
Cc: dri-devel, nouveau, 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/gpu/drm/nouveau/dispnv50/disp.c:779:47: 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>
---
Changes in v2:
- Calculate the size of `data[]` using ` __struct_size(args) - sizeof(*args)`.
v1:
- Link: https://lore.kernel.org/linux-hardening/ZsZLFS1CsHkKjw+C@elsanto/
drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 504cb3f2054b..725331638a15 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -775,10 +775,8 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
union hdmi_infoframe infoframe = { 0 };
const u8 rekey = 56; /* binary driver, and tegra, constant */
u32 max_ac_packet;
- struct {
- struct nvif_outp_infoframe_v0 infoframe;
- u8 data[17];
- } args = { 0 };
+ DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
+ const u8 data_len = __struct_size(args) - sizeof(*args);
int ret, size;
max_ac_packet = mode->htotal - mode->hdisplay;
@@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
return;
/* AVI InfoFrame. */
- args.infoframe.version = 0;
- args.infoframe.head = nv_crtc->index;
+ args->version = 0;
+ args->head = nv_crtc->index;
if (!drm_hdmi_avi_infoframe_from_display_mode(&infoframe.avi, &nv_connector->base, mode)) {
drm_hdmi_avi_infoframe_quant_range(&infoframe.avi, &nv_connector->base, mode,
HDMI_QUANTIZATION_RANGE_FULL);
- size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
+ size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
} else {
size = 0;
}
- nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, &args.infoframe, size);
+ nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, args, size);
/* Vendor InfoFrame. */
- memset(&args.data, 0, sizeof(args.data));
+ memset(args->data, 0, data_len);
if (!drm_hdmi_vendor_infoframe_from_display_mode(&infoframe.vendor.hdmi,
&nv_connector->base, mode))
- size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
+ size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
else
size = 0;
- nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, &args.infoframe, size);
+ nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, args, size);
nv_encoder->hdmi.enabled = true;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2][next] drm/nouveau: disp: Avoid -Wflex-array-member-not-at-end warning
2025-04-02 21:58 [PATCH v2][next] drm/nouveau: disp: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
@ 2025-04-03 16:05 ` Danilo Krummrich
2025-04-03 17:34 ` Gustavo A. R. Silva
0 siblings, 1 reply; 3+ messages in thread
From: Danilo Krummrich @ 2025-04-03 16:05 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: Lyude Paul, David Airlie, Simona Vetter, dri-devel, nouveau,
linux-kernel, linux-hardening
On Wed, Apr 02, 2025 at 03:58:59PM -0600, Gustavo A. R. Silva wrote:
> -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/gpu/drm/nouveau/dispnv50/disp.c:779:47: 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>
Applied this one (as well as the svm and fence one) to drm-misc-next, thanks!
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2][next] drm/nouveau: disp: Avoid -Wflex-array-member-not-at-end warning
2025-04-03 16:05 ` Danilo Krummrich
@ 2025-04-03 17:34 ` Gustavo A. R. Silva
0 siblings, 0 replies; 3+ messages in thread
From: Gustavo A. R. Silva @ 2025-04-03 17:34 UTC (permalink / raw)
To: Danilo Krummrich, Gustavo A. R. Silva
Cc: Lyude Paul, David Airlie, Simona Vetter, dri-devel, nouveau,
linux-kernel, linux-hardening
> Applied this one (as well as the svm and fence one) to drm-misc-next, thanks!
Awesome. :)
Thanks!
--
Gustavo
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-04-03 17:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-02 21:58 [PATCH v2][next] drm/nouveau: disp: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-04-03 16:05 ` Danilo Krummrich
2025-04-03 17:34 ` 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.