From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 59EAD3A4F2F for ; Tue, 23 Jun 2026 07:53:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782201195; cv=none; b=Yt/hRru1qpnegVOCw8VK86Lh33dsVwlmZ4dOUKofQaCCQf6gVdFIK0InGmExYtbeEqIpXzhAE5j5vnzSpBzYbrTIfASiEYuMlNOSL8mChfKY/qndOkTAxh9jBEvPds+K5KExg/02ojnrpLGv5ZgdqYq49AqbrQc/XFHxToMerGQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782201195; c=relaxed/simple; bh=GWzA7u1AASZYvNvnO97xJpes+YKRCYE/yr8wHOikjPs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=og6mNCpvczQKCvLY1NFxu9gCl5tNiWpPu6TNHih5KI8c+LM9EqFkdoUW4gKbL8aMV74Akb4YrLdtExrzNE2cVUAeCIOgxKpy8LXNV4MtxkQMLbXqZ1lrX9s41NxziW6GWZH0AjjESHTzVkj2yscvVczzNrRM9CPdLksq0Q9puNs= 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=VF9iOIZh; arc=none smtp.client-ip=209.85.216.47 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="VF9iOIZh" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-36d98b9aa9aso4711597a91.3 for ; Tue, 23 Jun 2026 00:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782201193; x=1782805993; 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=VZgAgjNrkl8Ay4q6R6GNuKVsTA4VTE1lITDaFE3IZhg=; b=VF9iOIZhsW0yLGKni1fvbInQMZepCBq01euEXzvGNi3f2KQfunUsZ+N+42LXeiQxhd l8+ojSw5r86RWGOeYNQj24lDw/0Tr/IXNkiEOaPQNCJoVRscTFKr4V1knGPOtO+fWOcj ucEak00bXOO8sJ5nZ+FuqCXMXKKLEparMtPfWBT7RHyZ3wMEAHFgcirj+7Fwgb5Ri90z ADhJEyEP6KlJOfsGP4jEAb+Iu+99mQmHMoMjTlLybCVkSY5N96v0xx5Bc7kXdxy7H9nD zijKijzhcir6GZQBYgVVKlREZiWhVjoFwKivl0r9e7sCHXGyltWUbbq3VbKRkwLlY69M Y1AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782201193; x=1782805993; 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=VZgAgjNrkl8Ay4q6R6GNuKVsTA4VTE1lITDaFE3IZhg=; b=PE/4K80WRdFbin1xCdJZqYR4WHJYjSjaIVXdgn2EXPTosReIqg/0eVkiJ1jf5GJLqO cItM6SkY08SnHcJ14XzDmtWaPGWk4dEisBaOyR0MK24WwKoJ4RBrx195vGXY0h4dfvux GgVAxJvMPty8oW9pjktJlG4HBNHgSyE/CFbVXcOVzfhteDSxkxasE6AuADbFcqi5fHjr keerYz489l9+UE2xnkkoX12bu6FYtT45Ir7hWnrdm+6LanDfjfgEF7Kk2sgv9usRtPvH jUu4vr1jJGeIHWX41DkmgNHKffVB0ByP8ucCYv3+NAefZHHYI7IvHE2wPIfwa60+58+e zfFA== X-Forwarded-Encrypted: i=1; AHgh+RoW5PnB80zoz5k89UKZJSDce8RpWitbx5cdQBn+HTaeKONz9JX/h8wFKStt1vy/SYm3VLFI5MJUFm6cmvA=@vger.kernel.org X-Gm-Message-State: AOJu0YxA053hnYpHDg+ai3Ik75lRaza/BQrJ8FH5kUajfoXbgaPXfTtH YldWflL3G/NGcqCk3xp0OG48h3deHUxmOYHKh+LqfvV5mSRGcjZ/DZA= X-Gm-Gg: AfdE7cldVas/BFud678XI6hR5WEnZWiyhSajyqG4N0Lpz39OLF4JNF+j5vF2evpUqHz iPoq4hyMaRD7ebLrSJkuJWcv4ROqPqoyd3gsC9/612+fCQ99CjQKBwc+ByWHYPBvDCP3u8z7lQ9 EJSwixIz46K8g8+i36/IuXj4rtbAKOsKFhUWkdqLIkxs/6A7xxzVd43IvLyI9sZnuljPqQrS32L qQDZVcY0cAu1aFRBKXbOaIuBOmp820/lfGkCihQ6xv+GvRRMGKCc/bWfvvSKGL4WxH5oEZwbo0Y L1TSFZF7RYt4+4d0HmBkCZkp2JKM3hOAHy3+z0YR0/OD+PCrEt0gxKCYbfxo3Nd+M2uRCFPMarA JTFp3fbtjByYOC2OST4K8xxRoYZ7sJzK805Qqew83YvRnXJW/Mm8o76mf6rmHtCKSoPQd0DogYY +YsXQ0kPDIKjI3FkQEC8oyl3JNBxJg/96x017BJaDxyT7/MxjLZytqroFiK6inrfv/W2odGflM1 Wk= X-Received: by 2002:a17:90b:5650:b0:369:7421:75c3 with SMTP id 98e67ed59e1d1-37dd0db4122mr1941411a91.16.1782201193481; Tue, 23 Jun 2026 00:53:13 -0700 (PDT) Received: from localhost.localdomain ([14.5.152.27]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37dcf19ee47sm656298a91.1.2026.06.23.00.53.11 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 23 Jun 2026 00:53:12 -0700 (PDT) From: Myeonghun Pak To: David Airlie Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Myeonghun Pak , Ijae Kim Subject: [PATCH] agp: efficeon: Disable PCI device on probe failure Date: Tue, 23 Jun 2026 16:52:46 +0900 Message-ID: <20260623075300.42474-1-mhun512@gmail.com> X-Mailer: git-send-email 2.47.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit agp_efficeon_probe() enables the PCI device before checking whether the GART resource can be assigned and before registering the AGP bridge. If either of those later steps fails, the probe path can return without dropping the enable reference. Route the resource-assignment failure through a shared unwind path that puts the bridge before disabling the PCI device. Also check the return value from agp_add_bridge() explicitly, disabling the PCI device on failure while leaving the bridge cleanup to agp_add_bridge()'s failure handling. Balance the successful probe path by disabling the PCI device from remove() after the AGP bridge has been removed and released. This issue was identified during our ongoing static-analysis research while reviewing kernel code. Fixes: 46cfc58a77de ("agp: efficeon-agp: do not use PCI resources before pci_enable_device()") Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- drivers/char/agp/efficeon-agp.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/char/agp/efficeon-agp.c b/drivers/char/agp/efficeon-agp.c index 0d25bbdc7e..03804b08ef 100644 --- a/drivers/char/agp/efficeon-agp.c +++ b/drivers/char/agp/efficeon-agp.c @@ -346,6 +346,7 @@ static int agp_efficeon_probe(struct pci_dev *pdev, struct agp_bridge_data *bridge; u8 cap_ptr; struct resource *r; + int err; cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); if (!cap_ptr) @@ -388,8 +389,8 @@ static int agp_efficeon_probe(struct pci_dev *pdev, if (!r->start && r->end) { if (pci_assign_resource(pdev, 0)) { printk(KERN_ERR PFX "could not assign resource 0\n"); - agp_put_bridge(bridge); - return -ENODEV; + err = -ENODEV; + goto err_put_bridge; } } @@ -401,7 +402,17 @@ static int agp_efficeon_probe(struct pci_dev *pdev, } pci_set_drvdata(pdev, bridge); - return agp_add_bridge(bridge); + err = agp_add_bridge(bridge); + if (err) + goto err_disable_device; + + return 0; + +err_put_bridge: + agp_put_bridge(bridge); +err_disable_device: + pci_disable_device(pdev); + return err; } static void agp_efficeon_remove(struct pci_dev *pdev) @@ -410,6 +421,7 @@ static void agp_efficeon_remove(struct pci_dev *pdev) agp_remove_bridge(bridge); agp_put_bridge(bridge); + pci_disable_device(pdev); } static int agp_efficeon_resume(struct device *dev) -- 2.47.1