From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: Jani Nikula <jani.nikula@linux.intel.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Tvrtko Ursulin <tursulin@ursulin.net>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
<intel-gfx@lists.freedesktop.org>,
<intel-xe@lists.freedesktop.org>,
<dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
"Linus Torvalds" <torvalds@linux-foundation.org>,
David Laight <david.laight.linux@gmail.com>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Subject: Re: [PATCH v2] drm/i915/backlight: Return immediately when scale() finds invalid parameters
Date: Tue, 21 Jan 2025 17:58:28 -0500 [thread overview]
Message-ID: <Z5AmlJ8stVQ4L5jS@intel.com> (raw)
In-Reply-To: <20250121145203.2851237-1-linux@roeck-us.net>
On Tue, Jan 21, 2025 at 06:52:03AM -0800, Guenter Roeck wrote:
> The scale() functions detects invalid parameters, but continues
> its calculations anyway. This causes bad results if negative values
> are used for unsigned operations. Worst case, a division by 0 error
> will be seen if source_min == source_max.
>
> On top of that, after v6.13, the sequence of WARN_ON() followed by clamp()
> may result in a build error with gcc 13.x.
>
> drivers/gpu/drm/i915/display/intel_backlight.c: In function 'scale':
> include/linux/compiler_types.h:542:45: error:
> call to '__compiletime_assert_415' declared with attribute error:
> clamp() low limit source_min greater than high limit source_max
>
> This happens if the compiler decides to rearrange the code as follows.
>
> if (source_min > source_max) {
> WARN(..);
> /* Do the clamp() knowing that source_min > source_max */
> source_val = clamp(source_val, source_min, source_max);
> } else {
> /* Do the clamp knowing that source_min <= source_max */
> source_val = clamp(source_val, source_min, source_max);
> }
>
> Fix the problem by evaluating the return values from WARN_ON and returning
> immediately after a warning. While at it, fix divide by zero error seen
> if source_min == source_max.
>
> Analyzed-by: Linus Torvalds <torvalds@linux-foundation.org>
> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
> Suggested-by: David Laight <david.laight.linux@gmail.com>
> Cc: David Laight <david.laight.linux@gmail.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
I'm pushing this soon to drm-intel-next, unless Linus want to take
this one directly to his tree
Thanks,
Rodrigo.
> ---
> v2: Simplify code to always return target_min after a warning,
> and also warn if source_min == source_max.
>
> drivers/gpu/drm/i915/display/intel_backlight.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/drm/i915/display/intel_backlight.c
> index 3f81a726cc7d..ca588bed82b9 100644
> --- a/drivers/gpu/drm/i915/display/intel_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_backlight.c
> @@ -40,8 +40,9 @@ static u32 scale(u32 source_val,
> {
> u64 target_val;
>
> - WARN_ON(source_min > source_max);
> - WARN_ON(target_min > target_max);
> + if (WARN_ON(source_min >= source_max) ||
> + WARN_ON(target_min > target_max))
> + return target_min;
>
> /* defensive */
> source_val = clamp(source_val, source_min, source_max);
> --
> 2.45.2
>
next prev parent reply other threads:[~2025-01-21 22:59 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-21 14:52 [PATCH v2] drm/i915/backlight: Return immediately when scale() finds invalid parameters Guenter Roeck
2025-01-21 18:53 ` ✓ CI.Patch_applied: success for drm/i915/backlight: Return immediately when scale() finds invalid parameters (rev2) Patchwork
2025-01-21 18:53 ` ✗ CI.checkpatch: warning " Patchwork
2025-01-21 18:55 ` ✓ CI.KUnit: success " Patchwork
2025-01-21 19:15 ` ✓ CI.Build: " Patchwork
2025-01-21 19:17 ` ✓ CI.Hooks: " Patchwork
2025-01-21 19:19 ` ✓ CI.checksparse: " Patchwork
2025-01-21 19:30 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2025-01-21 19:43 ` ✓ i915.CI.BAT: success " Patchwork
2025-01-21 19:45 ` ✓ Xe.CI.BAT: " Patchwork
2025-01-21 22:58 ` Rodrigo Vivi [this message]
2025-01-21 23:15 ` [PATCH v2] drm/i915/backlight: Return immediately when scale() finds invalid parameters Linus Torvalds
2025-02-02 13:27 ` David Laight
2025-02-02 14:28 ` Guenter Roeck
2025-02-03 19:05 ` Rodrigo Vivi
2025-01-22 1:50 ` ✗ Xe.CI.Full: failure for drm/i915/backlight: Return immediately when scale() finds invalid parameters (rev2) Patchwork
2025-01-22 11:26 ` ✗ i915.CI.Full: " 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=Z5AmlJ8stVQ4L5jS@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=airlied@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=david.laight.linux@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=simona@ffwll.ch \
--cc=torvalds@linux-foundation.org \
--cc=tursulin@ursulin.net \
/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.