From nobody Sun Feb 8 03:45:00 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F38A585931 for ; Tue, 21 Jan 2025 06:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737440271; cv=none; b=VCv6NDE5tApKVZKUcmzJfAm3I0xo7aAnu1OagCiDanX2nAR8NnX/QcoFlojeY5tIIo4s5bXqzO5MUfdIJShXNWsw9+5VWxBZTZmPpieOHnnWHEe0k6/awkDV5r13wZdzTBZ4pZ4cE78UKQxaNjy7SL9BZ6O8i8tGhhietYjYl74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737440271; c=relaxed/simple; bh=GTyiptmOmiUuAugAHBDoWKq7x21HScdPheRXErzanwY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Zsw0WiQ1g6KEfpT7BK8VLHbAQDYqqKge+B/fsTf759ehPvrHFHuZ9/e8Jj/rqKhkFvnPneEQ7iuSdD8V0yVMsjNjfWTs65DhtQNv6HIeXJCWsl3aHEgiAcXbo9a5m8gj+OuAZf4iHRHCvvqnb2eRWyWuU/jEVKl8doNIY1w9E9E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jbEbBxp/; arc=none smtp.client-ip=209.85.214.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jbEbBxp/" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2166022c5caso82775955ad.2 for ; Mon, 20 Jan 2025 22:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737440269; x=1738045069; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:from:to:cc:subject:date:message-id:reply-to; bh=iDq0kPb84WczT9MQeJwoPJOmDSoc1BTBjNUEr3cEsPE=; b=jbEbBxp/Bf6LtcVqkPn/DatEX8UjwqbWNUDx0+wgZSnxzqjqProqjcbd2DXhPvQNHW gmh4t1kivsPlAycVw9cWTq+YUc3q2WpyRdDKsYpWjUXX2GJjRb3hdh35kFWW3xRDD4S+ /qd5SGh1dzOJxKYsiZw/PeBpYTAA9nlsFrf0o9TtvKOdBpAweY2uGdIh5Bpz4giJeQFo j4JlRb26mlr4TeV+oC7IoNo8Z35lHuS+FpBHmjnY8zlwXEqokLqJun72ztZWMzXV9EGN fff6chLPyJUouzLQIFVMikkbgp35oCu7ZxbEYnONovfgyBumjNUSr1HWAw0gzMqyG/Sv pxgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737440269; x=1738045069; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=iDq0kPb84WczT9MQeJwoPJOmDSoc1BTBjNUEr3cEsPE=; b=bSPjsX0fu6pz5/WsDNByDesVHDtnWZFdIZia8wC839ZbsLnQkK4XPvU2OrS3o6Z2Xi Cwg94UMf4PR6G02dFMdFXjObvWP8ztUWz2mnhdTkP4ILwzSaakZDLqF5HH4KrRXjgBxt vbD4JSQVn3GW7zwJ9oeuoN+n8Pg0rXPJc+5hejNmjB6gG/7dVdx+kDRFI3st+ZdMGRiM l2e+9mcgv4gqfmXQavtxf2lmAxS6gFa+q2GO9Y/ShxZvl+gVeLhh1yzpL9HB5LBFPKgc 0BvR26ecM79sXiF3qAqJkVrFxpgRdvTxb2kVv6T1kjKiB1jyjIuVUftHFjiailbF5fzQ AWsg== X-Forwarded-Encrypted: i=1; AJvYcCV+ZyiutFf/T9NW/xsHskfGIDbUnffSdGz5PK/JCH/DMDV4avKK01LNkTGbGTNVMqBwfx9mwoTUG/8zwmc=@vger.kernel.org X-Gm-Message-State: AOJu0YwL5JVa7uSTRQJkzczbqz5Y/ueqPYunML/ehXPgtjeTEVkzC6gb vmelg1k53ohqVSzlBA1+qEzcfHAgFPpo6C+PYSeYkfW+FTKEEVrT X-Gm-Gg: ASbGncukdbkE+qW+l2sOdJzt7jLJ9nahbZMkqhnp+qkqFIcGJvCnVO95uYXOFVJyuCs kYYGkO+A3xCec9zeBEo1U8rdIocNBi8y8hbqcrZpRoBbX52vBRo1dNm9otUYSDvZPiYSWHeKDB6 X0OsvG7f4e1P+2HQrWINUsQd0EoQ7gCO/l+PhnUliCJqC+Tq5efRJYGKFFmMuKUte0hlNctLs8x iGAwil9aIRClTwcslyvWF3xnjocXGSOk1vMsBf58bCM7oKc16Vm+bISR7XOIsBceRq1rG4qe2P9 +oLgubc= X-Google-Smtp-Source: AGHT+IF03Y1LucOCV0tkeb8S5YCR33VCgat/S0g+S0RzWRHq65CWm/1TVpTRfQRl8e4mZA9td+6kiQ== X-Received: by 2002:a05:6a20:9190:b0:1d9:2b51:3ccd with SMTP id adf61e73a8af0-1eb214602ddmr28737989637.7.1737440269120; Mon, 20 Jan 2025 22:17:49 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:da43:aeff:fecc:bfd5]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-a9bdd30d1fdsm8087715a12.60.2025.01.20.22.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Jan 2025 22:17:48 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Jani Nikula Cc: Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Guenter Roeck , Linus Torvalds , David Laight , Andy Shevchenko Subject: [PATCH] drm/i915/backlight: Return immediately when scale() finds invalid parameters Date: Mon, 20 Jan 2025 22:17:46 -0800 Message-ID: <20250121061746.2730572-1-linux@roeck-us.net> X-Mailer: git-send-email 2.45.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =3D=3D 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 =3D clamp(source_val, source_min, source_max); } else { /* Do the clamp knowing that source_min <=3D source_max */ source_val =3D 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 =3D=3D source_max. Analyzed-by: Linus Torvalds Suggested-by: Linus Torvalds Suggested-by: David Laight Cc: David Laight Cc: Jani Nikula Cc: Andy Shevchenko Signed-off-by: Guenter Roeck --- drivers/gpu/drm/i915/display/intel_backlight.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/d= rm/i915/display/intel_backlight.c index 3f81a726cc7d..ad49bd4a1c12 100644 --- a/drivers/gpu/drm/i915/display/intel_backlight.c +++ b/drivers/gpu/drm/i915/display/intel_backlight.c @@ -40,8 +40,11 @@ static u32 scale(u32 source_val, { u64 target_val; =20 - WARN_ON(source_min > source_max); - WARN_ON(target_min > target_max); + if (WARN_ON(target_min > target_max)) + return target_min; + + if (WARN_ON(source_min > source_max) || source_min =3D=3D source_max) + return target_min + (target_max - target_min) / 2; =20 /* defensive */ source_val =3D clamp(source_val, source_min, source_max); --=20 2.45.2