Ping for review?

It might be an unlikely problem but a potential accvio with a trivial fix seems like something we should get merged.

Thanks,
John.

On 7/23/26 15:06, John Harrison wrote:
A helper function was copying a given audio infoframe into the
connector's copy but using the size of the destination (a generic
target, sized to accept many different data blocks) not the source (a
very specific type of data block). Thus, it was copying 60 bytes of
data from a 28 byte allocation.

Fix that by using the source size instead, together with a build bug
on the source size actually being smaller than the destination.

I hit this running KUnit tests under KASAN (while debugging something
else entirely). In the real world, it seems unlikely to cause an
actual problem. It is a read not a write so it can't corrupt any
memory. However, it could potentially fall off the end of a page and
cause an accvio bug.

Fixes: f378b77227bc ("drm/connector: hdmi: Add Infoframes generation")
Cc: Ville Syrjälä <[email protected]>
Cc: Dmitry Baryshkov <[email protected]>
Cc: Maxime Ripard <[email protected]>
Cc: Maarten Lankhorst <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: David Airlie <[email protected]>
Cc: Simona Vetter <[email protected]>
Cc: Dmitry Baryshkov <[email protected]>
Cc: Daniel Stone <[email protected]>
Cc: Nicolas Frattaroli <[email protected]>
Cc: Jani Nikula <[email protected]>
Cc: "José Expósito" <[email protected]>
Cc: Laurent Pinchart <[email protected]>
Cc: [email protected]
Cc: <[email protected]> # v6.11+
Signed-off-by: John Harrison <[email protected]>
---
  drivers/gpu/drm/display/drm_hdmi_state_helper.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c 
b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
index ce17eeefc2da..d6669e36ca1b 100644
--- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
@@ -1142,7 +1142,8 @@ 
drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_connector *co
mutex_lock(&connector->hdmi.infoframes.lock); - memcpy(&infoframe->data, frame, sizeof(infoframe->data));
+       BUILD_BUG_ON(sizeof(*frame) > sizeof(infoframe->data));
+       memcpy(&infoframe->data, frame, sizeof(*frame));
        infoframe->set = true;
ret = write_infoframe(connector, &funcs->audio, "Audio", infoframe);

Reply via email to