From nobody Tue Sep 9 21:28:52 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B805C61DA4 for ; Mon, 13 Mar 2023 13:55:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230304AbjCMNzU (ORCPT ); Mon, 13 Mar 2023 09:55:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231240AbjCMNzO (ORCPT ); Mon, 13 Mar 2023 09:55:14 -0400 Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C5BFF76A for ; Mon, 13 Mar 2023 06:55:13 -0700 (PDT) Received: by mail-ed1-x543.google.com with SMTP id o12so49030607edb.9 for ; Mon, 13 Mar 2023 06:55:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678715712; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=YQMWWiVCaLWuBxIvo4NBZRafIwrEjOq/YzvonHvtnhU=; b=Yf0R58L3Yy2Z5DOHytLD67pMKox+tlfR+N8fFQJFfVdDiVsavKYbShOCBIHGh24jas uvgceGV9qq7wSvvXzPkTCVDWW5wndpGNB26vpGMGl6wbArRl0+dDWjx9+Fxm70jcD8mB gRKguTqTvFXK/qfHfDJFxIAib43ryxD8vJ0AltSkPbDENLMCr2aKzqfQTCppGQys0QPF QSoA/1j8xP1nY4YaBIgpYrfJ+9GgrZbrXIz3adgWk6sTzlckwVMwmRwOcDp8Dyc6lBWm YThHHjz1VFw5p4RXlqrB5l2ljWmiI0rm9bI1C0s0Rlslxlq4Ke8m0/2YObWekNkOcwi/ kPDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678715712; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YQMWWiVCaLWuBxIvo4NBZRafIwrEjOq/YzvonHvtnhU=; b=dh3nvk+e5akDjYOyZVOVD0uqwPLtmBvYhVOh/ogC765aNcP58pys/TrPjAfb5V/6pd HYIy/cpQ5Qa3CzSF6OBKnVjTKVdtVxfn/N0xUtOwAL6sVsg+TiaCO58PKlMzuqg+U7KO zClva5Ax7m+xznFe3P6x1YWBaVWzvE53mbteOEzxI+t3RCHlu4wr856AFcHWujslwlUx cXee0W2Ty8Pssc7l9D8d5x2unqH6/62KrosbDyWUpglPF+MS0W53gOdVttygbIBmesHV gNBwLC016F7bMmLLLId60KW9XWZ+A6CAL6+9gJLE6ouX+Y52BBGfIRpSf/8CPvUnIhmE JWEA== X-Gm-Message-State: AO0yUKXeG3OTcIkDC80XLD3C1FaU0FdgRkPhCRb9Ta5zhdyFBO9m7/ml zt6pa5rpDPxLMTOq3KMyAmI= X-Google-Smtp-Source: AK7set8lCGoAX0P9HXROv/p6iMsiXt3USrbD9mK8YRTNkUxIrbZz8XA1726UaEDnrGS4sMrE1NMvGw== X-Received: by 2002:a17:907:6e15:b0:8b1:75a0:e5c6 with SMTP id sd21-20020a1709076e1500b008b175a0e5c6mr47095276ejc.18.1678715712008; Mon, 13 Mar 2023 06:55:12 -0700 (PDT) Received: from [127.0.1.1] (i130160.upc-i.chello.nl. [62.195.130.160]) by smtp.googlemail.com with ESMTPSA id t29-20020a50d71d000000b004fb419921e2sm2100094edi.57.2023.03.13.06.55.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 06:55:11 -0700 (PDT) From: Jakob Koschel Date: Mon, 13 Mar 2023 14:54:49 +0100 Subject: [PATCH v2 1/2] drm/nouveau/device: avoid usage of list iterator after loop MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230301-drm-nouveau-avoid-iter-after-loop-v2-1-1e6428cc7fa8@gmail.com> References: <20230301-drm-nouveau-avoid-iter-after-loop-v2-0-1e6428cc7fa8@gmail.com> In-Reply-To: <20230301-drm-nouveau-avoid-iter-after-loop-v2-0-1e6428cc7fa8@gmail.com> To: Ben Skeggs , Karol Herbst , Lyude Paul , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Pietro Borrello , Cristiano Giuffrida , "Bos, H.J." , Jakob Koschel X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1678715710; l=2039; i=jkl820.git@gmail.com; s=20230112; h=from:subject:message-id; bh=RCUT54CX+NpzTn0yHGplIg6IrZjwVxr6QHVNRA20sLQ=; b=qci++s58ATu52iCe714PEq1foIrqUIYGQGQsmHIFjf3jzCx35PGOL4mU7B8vhy/T+RFJT/iwr8JA 8wBfR15GDIsxqU5hr0ujxz0IA9OaAMuiBuMzXoIBPrtJJPdzmUuA X-Developer-Key: i=jkl820.git@gmail.com; a=ed25519; pk=rcRpP90oZXet9udPj+2yOibfz31aYv8tpf0+ZYOQhyA= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If potentially no valid element is found, 'pstate' would contain an invalid pointer past the iterator loop. To ensure 'pstate' is always valid, we only set it if the correct element was found. That allows adding a WARN_ON() in case the code works incorrectly, exposing currently undetectable potential bugs. Additionally, Linus proposed to avoid any use of the list iterator variable after the loop, in the attempt to move the list iterator variable declaration into the macro to avoid any potential misuse after the loop [1]. Link: https://lore.kernel.org/all/CAHk-=3DwgRr_D8CB-D9Kg-c=3DEHreAsk5SqXPwr= 9Y7k9sA6cWXJ6w@mail.gmail.com/ [1] Signed-off-by: Jakob Koschel --- drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c b/drivers/gp= u/drm/nouveau/nvkm/engine/device/ctrl.c index ce774579c89d..8ae14ab8f88e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c @@ -72,7 +72,7 @@ nvkm_control_mthd_pstate_attr(struct nvkm_control *ctrl, = void *data, u32 size) } *args =3D data; struct nvkm_clk *clk =3D ctrl->device->clk; const struct nvkm_domain *domain; - struct nvkm_pstate *pstate; + struct nvkm_pstate *pstate =3D NULL, *iter; struct nvkm_cstate *cstate; int i =3D 0, j =3D -1; u32 lo, hi; @@ -103,11 +103,16 @@ nvkm_control_mthd_pstate_attr(struct nvkm_control *ct= rl, void *data, u32 size) return -EINVAL; =20 if (args->v0.state !=3D NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT) { - list_for_each_entry(pstate, &clk->states, head) { - if (i++ =3D=3D args->v0.state) + list_for_each_entry(iter, &clk->states, head) { + if (i++ =3D=3D args->v0.state) { + pstate =3D iter; break; + } } =20 + if (WARN_ON_ONCE(!pstate)) + return -EINVAL; + lo =3D pstate->base.domain[domain->name]; hi =3D lo; list_for_each_entry(cstate, &pstate->list, head) { --=20 2.34.1 From nobody Tue Sep 9 21:28:52 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60AE7C6FD1C for ; Mon, 13 Mar 2023 13:55:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229987AbjCMNzY (ORCPT ); Mon, 13 Mar 2023 09:55:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231244AbjCMNzP (ORCPT ); Mon, 13 Mar 2023 09:55:15 -0400 Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1296828841 for ; Mon, 13 Mar 2023 06:55:14 -0700 (PDT) Received: by mail-ed1-x541.google.com with SMTP id cy23so48945593edb.12 for ; Mon, 13 Mar 2023 06:55:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678715712; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=RY44wE5Zf3Qg2T9mU72PQt2uHP5JYVZeIe8fJ7oNxPM=; b=pcGnzneuaKGE4blA3zuuNOqNY9NMtQDjpckvbe1I+lLf07kBZICQT7L3As0gtmwhgv 6cIAL6PMjQ4ZVTEfHSlj74klXNN4DyrhbM3ujzSLnZBV9dxligmZNkiBZHWRSV+1S9o2 151UDKg9FElIjqL5jwz/4KrJ51KUhNFfUK+LHPH/dyakaw+VjGcQEPyKraUl4I+ptMLX SltvBrXCXF3plq+lBWmLe1hGUg15EJwbeHSBgAQyh2srJkWnrKdgqYJuD+SjGobqI+Mt 5/2U9KgROelHxnSvalJp9VhtZT4wOanaogjQKXKTALBkhYkYsuVLbNLxYjeawtGfJ5nR IYLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678715712; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RY44wE5Zf3Qg2T9mU72PQt2uHP5JYVZeIe8fJ7oNxPM=; b=KwhiERRpNI+sCdhP1kysCfWs8RHVVO9fLLz711UUhKfvGoOhX0Ji4EfuJr5sV49xKy rIhUV+0klPqovkub0RUh3BnYg3Bz/zpkX2Hooi1N9fjdXeSbgF8gIPgRM+OC0QVvvJg+ 2+m723EgGTa88Le8vMXPJAG5WpsWcKxVmT/Mh8/OO8e/zexM06Sz3cRYqu5CS9PACxmL E8xaWCTHnCWpPhAUdE7X3fgLcRlevKSt/8PBhlhgTtWjcnxlOJcki822YGJC1odgMW1J Ho2j8Q/Rkp3WBrm0CekfuSGgs2vT5Cm09gO2bM/uKN5MR7wnnYaoTWpR1hs9SVJHQtpc fK1A== X-Gm-Message-State: AO0yUKVkbgb4UTNkPdzxK/gGjLMd6ZNr16aay7ynAuSKJxRlwg6Ttx3M pOwVuGZRQ1WTa3DWtQII2tM= X-Google-Smtp-Source: AK7set/oUpv9sBq1JPG9coxkkekJhneZsLg56G1jZS+XVI5QRGYu30go1o76ONx7s2BXms9DRo/hTw== X-Received: by 2002:aa7:dad2:0:b0:4fb:fd9f:7372 with SMTP id x18-20020aa7dad2000000b004fbfd9f7372mr4275567eds.8.1678715712509; Mon, 13 Mar 2023 06:55:12 -0700 (PDT) Received: from [127.0.1.1] (i130160.upc-i.chello.nl. [62.195.130.160]) by smtp.googlemail.com with ESMTPSA id t29-20020a50d71d000000b004fb419921e2sm2100094edi.57.2023.03.13.06.55.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Mar 2023 06:55:12 -0700 (PDT) From: Jakob Koschel Date: Mon, 13 Mar 2023 14:54:50 +0100 Subject: [PATCH v2 2/2] drm/nouveau/clk: avoid usage of list iterator after loop MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20230301-drm-nouveau-avoid-iter-after-loop-v2-2-1e6428cc7fa8@gmail.com> References: <20230301-drm-nouveau-avoid-iter-after-loop-v2-0-1e6428cc7fa8@gmail.com> In-Reply-To: <20230301-drm-nouveau-avoid-iter-after-loop-v2-0-1e6428cc7fa8@gmail.com> To: Ben Skeggs , Karol Herbst , Lyude Paul , David Airlie , Daniel Vetter Cc: dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-kernel@vger.kernel.org, Pietro Borrello , Cristiano Giuffrida , "Bos, H.J." , Jakob Koschel X-Mailer: b4 0.12.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1678715710; l=1752; i=jkl820.git@gmail.com; s=20230112; h=from:subject:message-id; bh=+zVBUXeTd83iixQiNFVbeFsaMnjJfrzAURHoSipLKdE=; b=+Ppw0na6R2sFWbyq4/6Xs6V1INOYzd/bKFad33nQ+IyQdKHYoeWHWQPP5Vy45XD7U8t4YJZ2Kd84 xukkecmDBAbu5sAbRfBxiBNJg8Hj8Ty1jNCO8Cg/hDBEqRXkD2qT X-Developer-Key: i=jkl820.git@gmail.com; a=ed25519; pk=rcRpP90oZXet9udPj+2yOibfz31aYv8tpf0+ZYOQhyA= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If potentially no valid element is found, 'pstate' would contain an invalid pointer past the iterator loop. To ensure 'pstate' is always valid, we only set it if the correct element was found. That allows adding a WARN_ON() in case the code works incorrectly, exposing currently undetectable potential bugs. Additionally, Linus proposed to avoid any use of the list iterator variable after the loop, in the attempt to move the list iterator variable declaration into the macro to avoid any potential misuse after the loop [1]. Link: https://lore.kernel.org/all/CAHk-=3DwgRr_D8CB-D9Kg-c=3DEHreAsk5SqXPwr= 9Y7k9sA6cWXJ6w@mail.gmail.com/ [1] Signed-off-by: Jakob Koschel --- drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/d= rm/nouveau/nvkm/subdev/clk/base.c index da07a2fbef06..d914cce6d0b8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c @@ -269,14 +269,18 @@ nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) struct nvkm_subdev *subdev =3D &clk->subdev; struct nvkm_fb *fb =3D subdev->device->fb; struct nvkm_pci *pci =3D subdev->device->pci; - struct nvkm_pstate *pstate; + struct nvkm_pstate *pstate =3D NULL, *iter; int ret, idx =3D 0; =20 - list_for_each_entry(pstate, &clk->states, head) { - if (idx++ =3D=3D pstatei) + list_for_each_entry(iter, &clk->states, head) { + if (idx++ =3D=3D pstatei) { + pstate =3D iter; break; + } } =20 + if (WARN_ON(!pstate)) + return -EINVAL; nvkm_debug(subdev, "setting performance state %d\n", pstatei); clk->pstate =3D pstatei; =20 --=20 2.34.1