From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 884F23D3303 for ; Tue, 20 Jan 2026 09:34:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768901656; cv=none; b=MJbivDiF7/9BwtAr8STvxKgiPCLdW7fCY58CKVwB+E1f404pXaR3jgd8zUpBj12D0sSUQx5CF0wjwl2LpcNYQBC5JpHemLHvKhsal6wAv7jUSGtjnhzwfv1dJZtd4RoM3imODsb9o94ptyv6qQl2dV+lX2jKXoAAxktpP5+J0ug= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768901656; c=relaxed/simple; bh=0MT/Xzg90lykiotnr2ciH+dexYItlUk+EgRXkUgzA/0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=cE6oii9ucIygtKSFZ2OIwC5dCXndSEbEja+U49Rc7fz4ipT1vtLz5lA3AqjE0J0AuYKeIbND1kc48581Cqq/IkMpaE4YHMix8aIzRtdpvzeiLbEv12FLM63egkOUyZKUF14g0tqwdGf807fB5RvHGFL5VPhJO5kaEMbIRWkqKio= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=nJCrlpc1; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="nJCrlpc1" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 1783F1A2959; Tue, 20 Jan 2026 09:34:12 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id DF445606AB; Tue, 20 Jan 2026 09:34:11 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 86C3810B6B326; Tue, 20 Jan 2026 10:34:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1768901650; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:content-language:in-reply-to:references; bh=qe+AEfahHk01ESKOwWCf+etHu+G8g7lg5aM33wBfgds=; b=nJCrlpc18FXIy+bDpEEMXn4qNKxag0+u++JGb4SDI3RuVG39aAkNNU014A4ynQFp4NRsDf kX75Q/+VlVjI4m/zOvIMtZqwCWx9n4BBH8qn/6ln+fj6pOprXI4gwCLzjHUvFy3ud0quK2 wFy7eBluAreoBU1sVYYEgTFKaz7olwUKkpX1mGxaYzXor4Qn4ValPWD4tHk6t8De38TiZH onOHYWqxz3ZdapsM4WQBLXRclGdUqp+G+B+GWSDCUMmbKOLKU52ooqNBKZysaAO1vg4j3T c0gv1Qvy/afBIBf9ZTLXldGYglRe2EMGhRk7uFC65bwKR0HdArnsg+dDwNoCrg== Message-ID: Date: Tue, 20 Jan 2026 10:34:30 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3] drm/bridge: synopsys: dw-dp: fix error paths of dw_dp_bind To: Osama Abdelkader , luca.ceresoli@bootlin.com, Andy Yan Cc: stable@vger.kernel.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dmitry Baryshkov , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20260102155553.13243-1-osama.abdelkader@gmail.com> From: Louis Chauvet Content-Language: en-US In-Reply-To: <20260102155553.13243-1-osama.abdelkader@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Last-TLS-Session-Version: TLSv1.3 On 1/2/26 16:55, Osama Abdelkader wrote: > Fix several issues in dw_dp_bind() error handling: > > 1. Missing return after drm_bridge_attach() failure - the function > continued execution instead of returning an error. > > 2. Resource leak: drm_dp_aux_register() is not a devm function, so > drm_dp_aux_unregister() must be called on all error paths after > aux registration succeeds. This affects errors from: > - drm_bridge_attach() > - phy_init() > - devm_add_action_or_reset() > - platform_get_irq() > - devm_request_threaded_irq() > > 3. Bug fix: platform_get_irq() returns the IRQ number or a negative > error code, but the error path was returning ERR_PTR(ret) instead > of ERR_PTR(dp->irq). > > Use a goto label for cleanup to ensure consistent error handling. > > Fixes: 86eecc3a9c2e ("drm/bridge: synopsys: Add DW DPTX Controller support library") > Cc: stable@vger.kernel.org > > Signed-off-by: Osama Abdelkader Reviewed-by: Louis Chauvet > --- > v3: > - Add resource leak fixes for all error paths after drm_dp_aux_register() > - Fix platform_get_irq() error handling bug > - Use goto pattern for cleanup as suggested by reviewer > > v2: > - use concise error message > - add Fixes and Cc tags > --- > drivers/gpu/drm/bridge/synopsys/dw-dp.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c b/drivers/gpu/drm/bridge/synopsys/dw-dp.c > index 82aaf74e1bc0..432342452484 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c > @@ -2062,33 +2062,41 @@ struct dw_dp *dw_dp_bind(struct device *dev, struct drm_encoder *encoder, > } > > ret = drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); > - if (ret) > + if (ret) { > dev_err_probe(dev, ret, "Failed to attach bridge\n"); > + goto unregister_aux; > + } > > dw_dp_init_hw(dp); > > ret = phy_init(dp->phy); > if (ret) { > dev_err_probe(dev, ret, "phy init failed\n"); > - return ERR_PTR(ret); > + goto unregister_aux; > } > > ret = devm_add_action_or_reset(dev, dw_dp_phy_exit, dp); > if (ret) > - return ERR_PTR(ret); > + goto unregister_aux; > > dp->irq = platform_get_irq(pdev, 0); > - if (dp->irq < 0) > - return ERR_PTR(ret); > + if (dp->irq < 0) { > + ret = dp->irq; > + goto unregister_aux; > + } > > ret = devm_request_threaded_irq(dev, dp->irq, NULL, dw_dp_irq, > IRQF_ONESHOT, dev_name(dev), dp); > if (ret) { > dev_err_probe(dev, ret, "failed to request irq\n"); > - return ERR_PTR(ret); > + goto unregister_aux; > } > > return dp; > + > +unregister_aux: > + drm_dp_aux_unregister(&dp->aux); > + return ERR_PTR(ret); > } > EXPORT_SYMBOL_GPL(dw_dp_bind); >