From: sashiko-bot@kernel.org
To: "Mario Limonciello" <mario.limonciello@amd.com>
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v8 08/14] drm/amd/display: use drm backlight
Date: Tue, 08 Sep 2026 04:57:01 +0000 [thread overview]
Message-ID: <20260908045701.A9F571F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260908044035.62093-9-mario.limonciello@amd.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] Unconditional creation of the DRM LUMINANCE property breaks brightness control on systems relying on ACPI video backlight.
- [High] Lockless access to the global `crtc->state` pointer during brightness-only commits leads to a Use-After-Free (UAF) and race condition.
- [High] TOCTOU race when accessing `dm->dc->current_state` leads to a potential NULL pointer dereference or Use-After-Free.
--
commit 2a535fc7f658113715bee173a4202a46e91b7048
Author: Mario Limonciello <mario.limonciello@amd.com>
drm/amd/display: use drm backlight
This commit converts the AMD display driver to use the DRM backlight
infrastructure, exposing brightness control through the connector LUMINANCE
property.
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 2fe934036e363..f7b1eaf34b59d 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
[ ... ]
> @@ -5050,10 +5050,21 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_commit *state)
> old_crtc_state = drm_atomic_get_old_crtc_state(state, &acrtc->base);
> }
>
> + /*
> + * Apply the LUMINANCE property first: a brightness-only commit
> + * does not pull the CRTC into the atomic state (so new_crtc_state
> + * is NULL), and a modeset is skipped below - in both cases the
> + * backlight must still follow the requested luminance.
> + */
> + drm_atomic_helper_connector_apply_luminance(new_con_state);
[Severity: High]
Does this introduce a race condition leading to a use-after-free?
Since the CRTC is intentionally not pulled into the atomic state during a
brightness-only commit, the CRTC lock is not held in this path. However,
drm_atomic_helper_connector_apply_luminance() dereferences the global
conn_state->crtc->state->active property locklessly.
If a concurrent modeset or display disable commit acquires the lock,
swaps the state, and frees the old one, this non-blocking brightness commit
could end up reading freed memory. Is it safe to call this helper without
ensuring the CRTC lock is held?
[ ... ]
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
> index 406a821d03cd6..1fefe3837e4cf 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_backlight.c
[ ... ]
> @@ -224,13 +225,17 @@ struct dc_stream_state *dm_find_stream_with_link(
> struct amdgpu_display_manager *dm,
> struct dc_link *link)
> {
> - struct dc_state *cur_dc_state = dm->dc->current_state;
> struct dc_stream_state *stream = NULL;
> int i;
>
> + if (!dm || !dm->dc || !dm->dc->current_state || !link)
> + return NULL;
> +
> + cur_dc_state = dm->dc->current_state;
[Severity: High]
Can this result in a double-fetch/TOCTOU race?
This code checks that dm->dc->current_state is not NULL, but then immediately
re-reads the pointer from dm->dc->current_state.
If a concurrent modeset or teardown updates the state between the check and
the assignment, cur_dc_state could be NULL or point to freed memory when it
is subsequently dereferenced in the loop below.
Should this be changed to read the state pointer once into cur_dc_state,
and then perform the NULL check on the local variable?
[ ... ]
> @@ -600,6 +610,13 @@ void amdgpu_dm_setup_backlight_device(struct amdgpu_display_manager *dm,
>
> amdgpu_dm_update_connector_ext_caps(aconnector);
>
> + caps = &dm->backlight_caps[bl_idx];
> + amdgpu_dm_backlight_fill_props(caps, power_supply_is_system_supplied() > 0,
> + !(amdgpu_dc_debug_mask &
> + DC_DISABLE_CUSTOM_BRIGHTNESS_CURVE),
> + &props);
> + drm_backlight_create_property(&aconnector->base, props.max_brightness, false);
[Severity: High]
Does unconditionally creating this property break brightness control on
systems relying on ACPI video backlight?
By creating the LUMINANCE property here, we expose it to userspace before
verifying if the native backlight backend will actually be used.
During later registration in amdgpu_dm_register_backlight_device(), if
acpi_video_backlight_use_native() is false, the driver exits early and never
links a backend to this property.
Will modern userspace compositors attempt to use this exposed but
non-functional LUMINANCE property and silently fail to adjust brightness,
ignoring the working ACPI sysfs interface entirely?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260908044035.62093-1-mario.limonciello@amd.com?part=8
next prev parent reply other threads:[~2026-09-08 4:57 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 4:40 [PATCH v8 00/14] Add support for a DRM backlight capability Mario Limonciello
2026-09-08 4:40 ` [PATCH v8 01/14] Revert "backlight: Remove notifier" Mario Limonciello
2026-09-08 4:51 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 02/14] backlight: add kernel-internal backlight API Mario Limonciello
2026-09-08 4:52 ` sashiko-bot
2026-09-08 15:45 ` Jani Nikula
2026-09-08 16:00 ` Mario Limonciello
2026-09-08 16:33 ` Jani Nikula
2026-09-08 4:40 ` [PATCH v8 03/14] drm/property: add a per-connector luminance flag Mario Limonciello
2026-09-08 4:54 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 04/14] drm: add connector backlight (LUMINANCE) infrastructure Mario Limonciello
2026-09-08 4:54 ` sashiko-bot
2026-09-08 15:48 ` Jani Nikula
2026-09-08 4:40 ` [PATCH v8 05/14] drm: add DRM_CLIENT_CAP_LUMINANCE Mario Limonciello
2026-09-08 4:55 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 06/14] drm/amd/display: Pass up errors reading actual brightness Mario Limonciello
2026-09-08 4:40 ` [PATCH v8 07/14] drm/amd: Indicate driver supports luminance Mario Limonciello
2026-09-08 4:40 ` [PATCH v8 08/14] drm/amd/display: use drm backlight Mario Limonciello
2026-09-08 4:57 ` sashiko-bot [this message]
2026-09-08 4:40 ` [PATCH v8 09/14] drm/amdgpu: Check bios_scratch_reg_offset in backlight level helper Mario Limonciello
2026-09-08 4:51 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 10/14] drm/amd/display: Update KUnit backlight tests for luminance property and fixtures Mario Limonciello
2026-09-08 4:54 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 11/14] drm/bridge: auto-link panel backlight in bridge connector Mario Limonciello
2026-09-08 4:40 ` [PATCH v8 12/14] drm/xe: Indicate support for luminance on the connector Mario Limonciello
2026-09-08 4:57 ` sashiko-bot
2026-09-08 4:40 ` [PATCH v8 13/14] drm/i915: " Mario Limonciello
2026-09-08 4:40 ` [PATCH v8 14/14] drm/i915/display: use drm backlight Mario Limonciello
2026-09-08 5:03 ` sashiko-bot
2026-09-08 9:32 ` ✓ i915.CI.BAT: success for Add support for a DRM backlight capability (rev3) Patchwork
2026-09-08 18:45 ` ✗ i915.CI.Full: failure " Patchwork
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=20260908045701.A9F571F00A3A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=mario.limonciello@amd.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox