From nobody Tue Feb 10 06:05:07 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 813893A0B33 for ; Mon, 9 Feb 2026 18:41:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770662499; cv=none; b=XsanuXzYm0bmAdU+eqj4OhRigg4cxKsFReZ7EUtAL9/3Du2gY210QlCGseSq2GISTPn89vu/mXNm6Goj/lijMLvMQvv8K/n8qx/KLQMoZynhgDDYBrn3wzQcOJ23MXFaFIdV7hJrYbtdQvTgyWJZKfmI3bPYU+B3ZGB3bMfsn/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770662499; c=relaxed/simple; bh=3GP9kGliJ2oojzVQ9MFLDO3yhh3m+PSMwjdrVQvrrxo=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=S0Xr0RBt/mzlIYpy51RG9LugwAYmwjh06KVaGbxX6YsQQBnLRWimX4Q0VcH8lAZRtagf2kqYe2lIkE/er/fOXKRgt7QHAmOee6cd1GWdaEUMtnM9jBH2R0p2x7KKN1Bjf89JO1x1stTKDLVQrxmRlIIUrnPVvSNnvsdircEvl3c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=F6kb6tbk; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com 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="F6kb6tbk" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4801eb2c0a5so45792485e9.3 for ; Mon, 09 Feb 2026 10:41:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770662498; x=1771267298; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=oMtozXDIGyj09zGXANkEQgHzJkoyCjXc2a15Zop0B9Q=; b=F6kb6tbkO2dZNUWuNJmPwmAfY+IQ6ykoCbLCOuv7KwhdiXh1omhzCKshdmqCRd9ga3 Fq55AVNzHjXCqgHSEV99BV3sSS/pbQuCXvIMpTzNtCzAViXXLG7r6adCWRpOGwml91wz TqLSnCPSMJs3JEemlNqWV9RitXRyVh3stYh7F4ub4G+eB9Fp17/RTyYUl7baEo/Y+Z2k 3QJ6Zbj1fYksz8TJD4aPKOHIwIu2O7mQ8DScAFPteBo786Xe3ve1au0FxYb1c9cehNkr sHR6SQnSORuHXEB0rkvkbgoj46q552vkFaEavRFRcQ3JKY1pvxEF2IAsa8cIi62lrz5J +ajg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770662498; x=1771267298; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=oMtozXDIGyj09zGXANkEQgHzJkoyCjXc2a15Zop0B9Q=; b=cU02LuTB6lqCRn63UW4YZ48lk0BtG/vjL1CXB56W//cGwJqXRprX9XSo1lJv+0VrVu DOYr99frOAN40jq6/J3/YUO/GdOn942RizlPIEibIfacnnHD2iKpLpGqfat/dvBrRfgB /3SZcfDxUPA/DIUqm/uuqdFBXGCtFjKhwklWnbc7DZ3DbXkp9wdnMIfHaCs6PFRQQM2V vpEPXhA8UbhFu/6oXerg3WTzgiYZndIopKDSo+FYA7qUassy6lPqd2T9cgdJQv3H0mO1 yPcSudzjQdN5iX2mIO2ZcyJVGEeHPbLOWYjFRo54l7Me80sZOn191H28okOWsB5XdIB7 /WTg== X-Forwarded-Encrypted: i=1; AJvYcCUQR+uB+XBDRLuaMhrGa4aHjVdueyHvsVY4QZPT8cQXwkA9V2BrWyCKB5sWATjkPXPInUiOuVQn4vA52Z0=@vger.kernel.org X-Gm-Message-State: AOJu0YyIK+EAmXZQerPuIaXBCM/nBelNEtfxTWn5dhXQfseDNR3DWjVC zVeglkIklKobEIg5jS0n+YyNWnGfjOzzAB1vptVn4vDS54B6A54iWmjo X-Gm-Gg: AZuq6aKtYpIknicR6SGNGOGUAK6QOz9FN0DKTwBYzkV/IVqXF7/62923ekOr/11ZgMv TGcjmOKUqS1sxGiMELW74yGIW1DaWnlWnnvvJFrF/P+kLKjnQ9OBrDZwUtgwZgSybM+ksi7NHNW uNhenfrNV4u+B0TaTC9uwXhzBLIdWqplC+YuxUX9NFi0dlU+QCJh9BQt4WaPoS1s+CMmbjJJBVR k/HpUfQ2YR2Yex4bUiI2CAChiNvZrZQSBbzzTABE5O/i5yEjp0nMXinQGgJ2v9TyL5PUCHJD357 kOSlEsOVC5o3NsROTzp2JpGKqYZlt+gPT+4cArTpG8s35l+we/3Er9lhIRaABkT4i/KoTBLKgkC se5DtzpgNxloPa8VRdllZmftXVlm81kKl3YXJtLek++5FRaeWo56TIHTZaBGeqt2fVym5C8NzxZ +5jixEFCQ2QejXtxfWNinTRzLQaKeTd4qzDalivJodXE8= X-Received: by 2002:a05:600c:4fc8:b0:46f:c55a:5a8d with SMTP id 5b1f17b1804b1-483201dc396mr187849515e9.4.1770662497594; Mon, 09 Feb 2026 10:41:37 -0800 (PST) Received: from osama.. ([102.47.82.62]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-436297455eesm28931232f8f.29.2026.02.09.10.41.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Feb 2026 10:41:37 -0800 (PST) From: Osama Abdelkader To: luca.ceresoli@bootlin.com, Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Marek Vasut , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Osama Abdelkader , stable@vger.kernel.org Subject: [PATCH] drm/bridge: samsung-dsim: Fix memory leak in error path Date: Mon, 9 Feb 2026 19:41:14 +0100 Message-ID: <20260209184115.10937-1-osama.abdelkader@gmail.com> X-Mailer: git-send-email 2.43.0 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" In samsung_dsim_host_attach(), drm_bridge_add() is called to add the bridge. However, if samsung_dsim_register_te_irq() or pdata->host_ops->attach() fails afterwards, the function returns without removing the bridge, causing a memory leak. Fix this by adding proper error handling with goto labels to ensure drm_bridge_remove() is called in all error paths. Also ensure that samsung_dsim_unregister_te_irq() is called if the attach operation fails after the TE IRQ has been registered. samsung_dsim_unregister_te_irq() function is moved without changes to be before samsung_dsim_host_attach() to avoid forward declaration. Fixes: e7447128ca4a ("drm: bridge: Generalize Exynos-DSI driver into a Sams= ung DSIM bridge") Cc: stable@vger.kernel.org Signed-off-by: Osama Abdelkader --- v2:=20 - Move samsung_dsim_unregister_te_irq() function - Add Fixes tag - Add Cc tag --- drivers/gpu/drm/bridge/samsung-dsim.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index eabc4c32f6ab..ad8c6aa49d48 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1881,6 +1881,14 @@ static int samsung_dsim_register_te_irq(struct samsu= ng_dsim *dsi, struct device return 0; } =20 +static void samsung_dsim_unregister_te_irq(struct samsung_dsim *dsi) +{ + if (dsi->te_gpio) { + free_irq(gpiod_to_irq(dsi->te_gpio), dsi); + gpiod_put(dsi->te_gpio); + } +} + static int samsung_dsim_host_attach(struct mipi_dsi_host *host, struct mipi_dsi_device *device) { @@ -1955,13 +1963,13 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) { ret =3D samsung_dsim_register_te_irq(dsi, &device->dev); if (ret) - return ret; + goto err_remove_bridge; } =20 if (pdata->host_ops && pdata->host_ops->attach) { ret =3D pdata->host_ops->attach(dsi, device); if (ret) - return ret; + goto err_unregister_te_irq; } =20 dsi->lanes =3D device->lanes; @@ -1969,14 +1977,13 @@ static int samsung_dsim_host_attach(struct mipi_dsi= _host *host, dsi->mode_flags =3D device->mode_flags; =20 return 0; -} =20 -static void samsung_dsim_unregister_te_irq(struct samsung_dsim *dsi) -{ - if (dsi->te_gpio) { - free_irq(gpiod_to_irq(dsi->te_gpio), dsi); - gpiod_put(dsi->te_gpio); - } +err_unregister_te_irq: + if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) + samsung_dsim_unregister_te_irq(dsi); +err_remove_bridge: + drm_bridge_remove(&dsi->bridge); + return ret; } =20 static int samsung_dsim_host_detach(struct mipi_dsi_host *host, --=20 2.43.0