From: sashiko-bot@kernel.org
To: "Cristian Ciocaltea" <cristian.ciocaltea@collabora.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 27/39] drm/rockchip: dw_hdmi_qp: Use dw_hdmi_qp_hpd_notify() for HPD reports
Date: Thu, 02 Jul 2026 15:15:49 +0000 [thread overview]
Message-ID: <20260702151550.8E14D1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260702-dw-hdmi-qp-scramb-v8-27-d79890d00b6a@collabora.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
New issues:
- [High] Unprotected access to `hdmi->curr_conn` in `dw_hdmi_qp_hpd_notify()` can lead to a TOCTOU NULL pointer dereference.
Pre-existing issues:
- [High] System PM suspend/resume callbacks unconditionally dereference `dev_get_drvdata()`, which can be NULL if component bind hasn't completed.
- [High] Missing `disable_irq()` in `unbind` allows the hotplug interrupt to fire after the DRM master is unbound, leading to a Use-After-Free.
- [High] Using devm_* functions in component bind() ties resources to the platform device's lifetime rather than the component's lifetime, causing resource leaks and permanent bind failures on retries.
--
commit 71c4a3386d116454bc66b990f1d692e5daa00ba8
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Subject: drm/rockchip: dw_hdmi_qp: Use dw_hdmi_qp_hpd_notify() for HPD reports
This commit updates the HPD reporting to notify only the affected connector
instead of polling all of them. It also ensures the detection context runs
on reconnect to properly recover the SCDC state.
> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
[ ... ]
> @@ -354,14 +353,8 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
> struct rockchip_hdmi_qp *hdmi = container_of(work,
> struct rockchip_hdmi_qp,
> hpd_work.work);
> - struct drm_device *drm = hdmi->encoder.encoder.dev;
> - bool changed;
>
> - if (drm) {
> - changed = drm_helper_hpd_irq_event(drm);
> - if (changed)
> - dev_dbg(hdmi->dev, "connector status changed\n");
> - }
> + dw_hdmi_qp_hpd_notify(hdmi->hdmi);
> }
[Severity: High]
Could this call introduce a time-of-check to time-of-use race condition?
In dw_hdmi_qp_hpd_notify(), we evaluate hdmi->curr_conn without locks:
if (hdmi->curr_conn && status == connector_status_connected)
drm_connector_helper_hpd_irq_event(hdmi->curr_conn);
If a concurrent atomic modeset (triggered by userspace or hotplug) invokes
atomic_post_disable() between the condition evaluation and the dereference
in drm_connector_helper_hpd_irq_event(), hdmi->curr_conn could be set to
NULL.
A compiler might emit two separate memory reads here, which could lead
to passing a NULL pointer to the helper and causing a kernel crash.
Would it be better to use a local variable with READ_ONCE() to ensure the
pointer remains valid across the check and the call?
[ ... ]
> @@ -738,8 +731,7 @@ static int __maybe_unused dw_hdmi_qp_rockchip_resume(struct device *dev)
>
> dw_hdmi_qp_resume(dev, hdmi->hdmi);
>
> - if (hdmi->encoder.encoder.dev)
> - drm_helper_hpd_irq_event(hdmi->encoder.encoder.dev);
> + dw_hdmi_qp_hpd_notify(hdmi->hdmi);
>
> return 0;
> }
[Severity: High]
This is a pre-existing issue, but does this function safely handle a NULL
hdmi pointer?
The resume callback fetches the hdmi struct via dev_get_drvdata(dev).
However, if the system suspends before the component framework calls the
bind callback (for instance, during a deferred probe waiting for the VOP),
dev_get_drvdata() will return NULL.
Since dw_hdmi_qp_rockchip_resume() unconditionally accesses hdmi->ctrl_ops
and hdmi->hdmi, wouldn't this cause a kernel panic on system resume?
[Severity: High]
This isn't a bug introduced by this patch, but is it possible for the
HPD interrupt to fire after the DRM master is unbound?
In dw_hdmi_qp_rockchip_unbind(), cancel_delayed_work_sync() is called,
but the IRQ itself is never disabled.
Because the IRQ was requested using devm_request_threaded_irq() on the
platform device, it remains active until the platform device itself
is removed.
If an HPD event occurs after the component unbinds (which frees the
drmm_kzalloc'd hdmi struct), the IRQ handler will schedule the HPD
work which accesses freed memory, leading to a use-after-free crash.
Should disable_irq() be called during unbind to prevent this?
[Severity: High]
This is a pre-existing issue, but are we at risk of leaking resources
and permanently failing initialization on bind retries?
In dw_hdmi_qp_rockchip_bind(), several devm_ functions like
devm_request_threaded_irq() and devm_clk_get() are used on the platform
device.
Because the component framework allows bind() to fail and be retried,
any failure mid-way through bind() means these resources are not freed,
as the platform device remains active.
On subsequent retries, devm_request_threaded_irq() will return -EBUSY,
permanently breaking the HDMI port initialization until the platform module
is unloaded.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260702-dw-hdmi-qp-scramb-v8-0-d79890d00b6a@collabora.com?part=27
next prev parent reply other threads:[~2026-07-02 15:15 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 14:46 [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 01/39] video/hdmi: Introduce HDMI version enum Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-03 13:55 ` Dmitry Baryshkov
2026-07-03 13:55 ` Dmitry Baryshkov
2026-07-07 11:54 ` Maxime Ripard
2026-07-07 11:54 ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 02/39] drm/connector: Add caps-based HDMI connector init helper Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:02 ` sashiko-bot
2026-07-03 14:05 ` Dmitry Baryshkov
2026-07-03 14:05 ` Dmitry Baryshkov
2026-07-03 19:31 ` Cristian Ciocaltea
2026-07-03 19:31 ` Cristian Ciocaltea
2026-07-07 16:10 ` Maxime Ripard
2026-07-07 16:10 ` Maxime Ripard
2026-07-08 10:11 ` Cristian Ciocaltea
2026-07-08 10:11 ` Cristian Ciocaltea
2026-07-10 10:27 ` Cristian Ciocaltea
2026-07-10 10:27 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 03/39] drm/display: bridge_connector: Pass HDMI capabilities through caps struct Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-03 14:19 ` Dmitry Baryshkov
2026-07-03 14:19 ` Dmitry Baryshkov
2026-07-03 19:55 ` Cristian Ciocaltea
2026-07-03 19:55 ` Cristian Ciocaltea
2026-07-08 6:46 ` Maxime Ripard
2026-07-08 6:46 ` Maxime Ripard
2026-07-08 10:19 ` Cristian Ciocaltea
2026-07-08 10:19 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 04/39] drm/connector: Add HDMI 2.0 scrambler infrastructure Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:04 ` sashiko-bot
2026-07-03 14:34 ` Dmitry Baryshkov
2026-07-03 14:34 ` Dmitry Baryshkov
2026-07-03 20:54 ` Cristian Ciocaltea
2026-07-03 20:54 ` Cristian Ciocaltea
2026-07-07 12:30 ` Maxime Ripard
2026-07-07 12:30 ` Maxime Ripard
2026-07-08 10:34 ` Cristian Ciocaltea
2026-07-08 10:34 ` Cristian Ciocaltea
2026-07-09 19:25 ` Cristian Ciocaltea
2026-07-09 19:25 ` Cristian Ciocaltea
2026-07-13 8:50 ` Maxime Ripard
2026-07-13 8:50 ` Maxime Ripard
2026-07-13 10:23 ` Cristian Ciocaltea
2026-07-13 10:23 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 05/39] drm/display: scdc-helper: Add macro for connector-prefixed debug messages Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 06/39] drm/display: scdc-helper: Add helper to set SCDC version information Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-07 15:40 ` Maxime Ripard
2026-07-07 15:40 ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 07/39] drm/display: hdmi: Add HDMI 2.0 scrambling management helpers Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:13 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 08/39] drm/display: hdmi: Advertise SCDC source version when scrambling Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-07 15:26 ` Maxime Ripard
2026-07-07 15:26 ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 09/39] drm/display: hdmi-state-helper: Add fallback TMDS rate validation Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:05 ` sashiko-bot
2026-07-07 11:23 ` Maxime Ripard
2026-07-07 11:23 ` Maxime Ripard
2026-07-08 10:39 ` Cristian Ciocaltea
2026-07-08 10:39 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 10/39] drm/display: hdmi-state-helper: Sync SCDC state on hotplug Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:04 ` sashiko-bot
2026-07-07 11:31 ` Maxime Ripard
2026-07-07 11:31 ` Maxime Ripard
2026-07-08 11:21 ` Cristian Ciocaltea
2026-07-08 11:21 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 11/39] drm/display: hdmi-state-helper: Set HDMI scrambling requirement Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:14 ` sashiko-bot
2026-07-07 11:34 ` Maxime Ripard
2026-07-07 11:34 ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 12/39] drm/bridge: Remove redundant error check in drm_bridge_helper_reset_crtc() Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:05 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 13/39] drm/bridge: Add bridge ops for source-side HDMI 2.0 scrambling Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 14/39] drm/display: bridge_connector: Use cached connector status in .get_modes() Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 15/39] drm/display: bridge_connector: Switch to .detect_ctx() connector helper Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 16/39] drm/display: bridge_connector: Wire up HDMI 2.0 scrambler callbacks Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 17/39] drm/bridge: dw-hdmi-qp: Rate limit i2c read error messages Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 18/39] drm/bridge: dw-hdmi-qp: Provide .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 19/39] drm/bridge: dw-hdmi-qp: Add HDMI 2.0 SCDC scrambling support Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:08 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 20/39] drm/bridge: dw-hdmi-qp: Provide dw_hdmi_qp_hpd_notify() helper Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:03 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 21/39] drm/rockchip: dw_hdmi_qp: Add missing newlines in dev_err_probe() messages Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 22/39] drm/rockchip: dw_hdmi_qp: Use local dev variable consistently in bind() Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:03 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 23/39] drm/rockchip: dw_hdmi_qp: Drop unnecessary #include Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 24/39] drm/rockchip: dw_hdmi_qp: Defer HPD IRQ enable until after connector setup Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:11 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 25/39] drm/rockchip: dw_hdmi_qp: Mask RK3576 HPD IRQ in io_init Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 26/39] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:13 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 27/39] drm/rockchip: dw_hdmi_qp: Use dw_hdmi_qp_hpd_notify() for HPD reports Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:15 ` sashiko-bot [this message]
2026-07-02 14:46 ` [PATCH v8 28/39] drm/bridge: dw-hdmi-qp: Drop unused .setup_hpd() phy op Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 29/39] drm/vc4: hdmi: Use common TMDS char rate constants Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 30/39] drm/vc4: hdmi: Switch to drm_hdmi_mode_needs_scrambling() Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-07 12:43 ` Maxime Ripard
2026-07-07 12:43 ` Maxime Ripard
2026-07-02 14:46 ` [PATCH v8 31/39] drm/vc4: hdmi: Convert to common SCDC scrambling infrastructure Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:16 ` sashiko-bot
2026-07-07 15:36 ` Maxime Ripard
2026-07-07 15:36 ` Maxime Ripard
2026-07-08 12:53 ` Cristian Ciocaltea
2026-07-08 12:53 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 32/39] drm/tests: connector: Add HDMI caps-based init coverage Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:10 ` sashiko-bot
2026-07-02 14:46 ` [PATCH v8 33/39] drm/tests: connector: Add HDMI source-side scrambler coverage Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 34/39] drm/tests: hdmi_state_helper: Use drmm_connector_hdmi_init_with_caps() Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 35/39] drm/tests: hdmi_state_helper: Add max_tmds_char_rate fallback tests Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 36/39] drm/tests: edid: Add 4K@60Hz EDID with 600MHz TMDS Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 37/39] drm/tests: hdmi_state_helper: Cover source-side scrambling decision Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 38/39] drm/tests: edid: Fix conformity for 1080p+4K YUV420 200MHz EDID Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 39/39] drm/tests: edid: Fix conformity for 4K RGB/YUV 340MHz EDID Cristian Ciocaltea
2026-07-02 14:46 ` Cristian Ciocaltea
2026-07-02 15:31 ` [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-07-02 15:31 ` Cristian Ciocaltea
2026-07-06 8:33 ` Maud Spierings
2026-07-06 8:33 ` Maud Spierings
2026-07-08 16:07 ` Cristian Ciocaltea
2026-07-08 16:07 ` Cristian Ciocaltea
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260702151550.8E14D1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=cristian.ciocaltea@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.