Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6673777imu; Mon, 21 Jan 2019 13:25:53 -0800 (PST) X-Google-Smtp-Source: ALg8bN7xHP7PVlxBXmwPw7358mHllMyKRDymdE50H8OsZaPzROi2ZedYHnsxFigy++TYF0fEULtU X-Received: by 2002:a17:902:4601:: with SMTP id o1mr31668023pld.243.1548105953355; Mon, 21 Jan 2019 13:25:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548105953; cv=none; d=google.com; s=arc-20160816; b=DBplwxdXM4YuDD8TGTlUO5Mpa3C2y4g3Kpm4u/4BSsombVoqUq6ra9nlfUauSsCxvX 8ci3po1WZriN7iuuh2SuoH/SGe1Wh/aBU1zo/sxNCVJVpV/b7Zt67A2zIyFWSJLYP2z3 Tz6rfYHlmdPj2TVMVW5ll92//8dHdhT8wH7cX9W/i+2w17tlAHT/AsuWHoCZ7Z+IUUAC edc8/Bx6rXoNC4LD81uCVb5LZcO0Yt59WgDr3ncpQoZIWheE4y2cNH36PbX5p6GXzid3 0SSvJrqHEgSiiIPtZ7I1C7RSosh/ermIKnSWdAzum7CRv65LviRg934F2AHx+Dxy3S/9 NxyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=A1dSI22u3KMXp/EX029azuLEWhWbHMOaXpWcIf/rtUs=; b=EOWseN7rePM7H1gkpc96IZ4INDmhudCXK5oayo52CuuCazRkHTkdFuyEqqPUhQ+cYB qDHERdsjja5dw3QLP5dceqnh2tKJAVXWiJMEp+5D30Ve+sADXM+PW0qGDnqiDwygT4G8 8YVncK6YzY8eNkMHxSdhTwAmqNJmlfZI3vuIMUAihzXN08gfIva2he32i6J3YPR+wu1I MtLnxN4ExX0dP4bvrMWgvXqIWhfFjCEt3meF+wEFnPzUDDKxVHYWi1+Fr+xA/bO1gxbl IONkw2QEGiB85+eih1pUrmFe+0iewxU1qeXWWzlCMSS/P7R6AZUEd7ZRJr7ly32MUiV9 zQ9w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o3si12950205pgm.441.2019.01.21.13.25.38; Mon, 21 Jan 2019 13:25:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728219AbfAUVYF (ORCPT + 99 others); Mon, 21 Jan 2019 16:24:05 -0500 Received: from mail.ispras.ru ([83.149.199.45]:33784 "EHLO mail.ispras.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727137AbfAUVYE (ORCPT ); Mon, 21 Jan 2019 16:24:04 -0500 Received: from localhost.localdomain (unknown [85.140.183.8]) by mail.ispras.ru (Postfix) with ESMTPSA id 3ABAE54006B; Tue, 22 Jan 2019 00:24:01 +0300 (MSK) From: Alexey Khoroshilov To: Marek Szyprowski , Felipe Balbi Cc: Alexey Khoroshilov , Kukjin Kim , Krzysztof Kozlowski , linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, ldv-project@linuxtesting.org Subject: [PATCH v2] usb: dwc3: exynos: Fix error handling of clk_prepare_enable Date: Tue, 22 Jan 2019 00:23:50 +0300 Message-Id: <1548105830-26376-1-git-send-email-khoroshilov@ispras.ru> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If clk_prepare_enable() fails in dwc3_exynos_probe() or in dwc3_exynos_resume(), exynos->clks[0] is left undisabled because of usage preincrement in while condition. Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov Fixes: 9f2168367a0a ("usb: dwc3: exynos: Rework clock handling and prepare for new variants") --- v2: Add fix for the second instance in dwc3_exynos_resume() per Marek Szyprowski note. drivers/usb/dwc3/dwc3-exynos.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c index cb7fcd7c0ad8..c1e9ea621f41 100644 --- a/drivers/usb/dwc3/dwc3-exynos.c +++ b/drivers/usb/dwc3/dwc3-exynos.c @@ -78,7 +78,7 @@ static int dwc3_exynos_probe(struct platform_device *pdev) for (i = 0; i < exynos->num_clks; i++) { ret = clk_prepare_enable(exynos->clks[i]); if (ret) { - while (--i > 0) + while (i-- > 0) clk_disable_unprepare(exynos->clks[i]); return ret; } @@ -223,7 +223,7 @@ static int dwc3_exynos_resume(struct device *dev) for (i = 0; i < exynos->num_clks; i++) { ret = clk_prepare_enable(exynos->clks[i]); if (ret) { - while (--i > 0) + while (i-- > 0) clk_disable_unprepare(exynos->clks[i]); return ret; } -- 2.7.4