drm/connector: only call HDMI audio helper plugged cb if non-null
authorNicolas Frattaroli <nicolas.frattaroli@collabora.com>
Tue, 27 May 2025 17:57:08 +0000 (19:57 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Tue, 27 May 2025 20:08:21 +0000 (23:08 +0300)
On driver remove, sound/soc/codecs/hdmi-codec.c calls the plugged_cb
with NULL as the callback function and codec_dev, as seen in its
hdmi_remove function.

The HDMI audio helper then happily tries calling said null function
pointer, and produces an Oops as a result.

Fix this by only executing the callback if fn is non-null. This means
the .plugged_cb and .plugged_cb_dev members still get appropriately
cleared.

Fixes: baf616647fe6 ("drm/connector: implement generic HDMI audio helpers")
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20250527-hdmi-audio-helper-remove-fix-v1-1-6cf77de364d8@collabora.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
drivers/gpu/drm/display/drm_hdmi_audio_helper.c

index 05afc9f..ae8a0cf 100644 (file)
@@ -103,7 +103,8 @@ static int drm_connector_hdmi_audio_hook_plugged_cb(struct device *dev,
        connector->hdmi_audio.plugged_cb = fn;
        connector->hdmi_audio.plugged_cb_dev = codec_dev;
 
-       fn(codec_dev, connector->hdmi_audio.last_state);
+       if (fn)
+               fn(codec_dev, connector->hdmi_audio.last_state);
 
        mutex_unlock(&connector->hdmi_audio.lock);