From nobody Sun May 24 18:42:27 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 6FDB43438B5 for ; Sun, 24 May 2026 06:42:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779604942; cv=none; b=X+0iM/t5p36Bi5ML7mtmWVXUR/JPwMyGmG9xIaxp5BZEKLXEwlYVWdSIufjmgDjGU/6VZsPXKYUSUwYN7J1xlD8Zzx8hQvG2zVZdktxgHnQLK2RcniP6DwshHI+DAoV07DSIFaNpj/NFnbdw9EDlzth7dy7/wD/JiLyMd44wS6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779604942; c=relaxed/simple; bh=lHwyEJgFw4OE9LRGWpTEQ6xFPPU5Y0dHMJutQ4KxLeY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=tlJJ+jpbmXiE8HAdI9Qu5e5NIO3+va4s3eKmBr22r4SexH9oz4kT+J29jLbFitz+iq0QPhH5f/H4vR1SkAKO0VREzlNtcvpI1DTdhoId5rO/iJvQljbSY8x9qvci1q6z7J/TOWmI0N3b82gsceser1YrmFU4MnKrgsMeCRQ+wYs= 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=sHNvekb3; arc=none smtp.client-ip=209.85.214.176 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="sHNvekb3" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2babfd18435so38351035ad.1 for ; Sat, 23 May 2026 23:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779604941; x=1780209741; 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=xkftP+Op/c8v58DKWgVPqjSk1fdvRHWO8kLTuLloiiI=; b=sHNvekb3ZQ9lDNiVhZt8u5UynVrQCWdZTg/HWJ3C0TwgR6YLbsDNHpZyTYB7Iz2fQc 9gCjHDxZVNW95clEXw+9YZSTtxJ491WLgKYzVegb6c2V2gLDmfQ6qSRx9Ko4aGVBbmkA +3W53r1Evn1CbJJj464Lywm6WWIogUc+R8EMhsQfbopiHv6raxPKauPs+8kCPaOeGyXv WTAINWby4N1DBk5oPED/3Ekl0WCQHectOe5TfDgpXOd/124yRn2s1Tvl1S+TqSyXMpMW J+GWQl3H5/1Yhq/qYCKOr73c9k3bsHezONoNTv49Y5j8XPi/rINBAGDNxCA+UvGNx7hd RXhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779604941; x=1780209741; 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=xkftP+Op/c8v58DKWgVPqjSk1fdvRHWO8kLTuLloiiI=; b=cv277Q/y2Kx/TL2jNn7fbm0KCNAcwKVks5QwJ/SJq4a3ydmsRFDVb/+SC7OG/PVGzc pWHvSklVcxZK2m6FihFshK7evJL/SIZdZeD2piANjHqUBftASnzvrd1+ZID4s3I/8NKD BBZbR9HXXAxqrYKKusZN0Ld12rvyugpN2Sxm5JS9gkqjd/Yw2LAv4pvB4llhuOStXgPa aEOZ8nNiH1TbhH4pSiRXFq9DHNi+AJXTDk1hueR6NYUkojwgOxOAmn+nb8YRZm6hHbih okyYtagPaK/kBljGAXduZ/ak+D5aDrlSMK0DiOq7XuvRvYiqk9iL0Y/GdrlGm/E9lMOm dA9g== X-Forwarded-Encrypted: i=1; AFNElJ8D/8vZ4Jc9wKq49ep5YBvJG3HrUdRbjAZaQXaMmAe7rKkhxrLwBNxKIwQaNwma3M4ONSaoTcULhADnsmg=@vger.kernel.org X-Gm-Message-State: AOJu0Yyi6Jcj1prLajLz1SZZwmp/IFIw0PqzfYjy6U45l2AP4GN2Vo1z B2v18J9JWCw5IYMHVP/hJo1BigHr2dgikI0T/RnpQGxsccCpN05ZS6wQ X-Gm-Gg: Acq92OG4DNRSUrmGd56OYUXYBWD4KLHd9ykt60JPKnFeyCovJB1Cq0JB6SHI7SxMImD QB1liSwQ5Lv5kt4a95NaJB9sjtx2ew2nunN8soroHRsGOzPIWmXixbUyGdYgVjbvkoAh+SugOfE gzRYDSv+I/R1B9sIAbrllmiw31Pg93j4CyNe4DWq2kr4fIbOW7Fewd1Po+IoeZzv1fE7gNs0CW/ mDmTExYRfafWahqb9y5VGLp9c4Y4EQqChuao/zG4GtXRgnEUe0L3fgIYRiKD9oXwIxuOvyU+iuR 9rWpw0kBVsM53/YSjqFI5NMOaHR0gwzNdtlY1QH/+NysRrodBcmBXry4pp1Q/Y1DWfpptbELzUV WJ+0Y3QdGD+QxmDXg9Lfc1FZQBmTddduBELovIwhHPXVlhMiXcle1jE6IQnjDBi/dgHRWnCGZIz wo6VSQDMeM0irW0e/tkHmT2KTPcJTvewZqEw== X-Received: by 2002:a17:902:d4c9:b0:2ba:4eee:6c1e with SMTP id d9443c01a7336-2beb037693fmr106201015ad.15.1779604940712; Sat, 23 May 2026 23:42:20 -0700 (PDT) Received: from lgs.. ([118.193.33.13]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2beb5695f3dsm60218115ad.1.2026.05.23.23.42.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 23:42:20 -0700 (PDT) From: Guangshuo Li To: Greg Kroah-Hartman , Yaxing Guo , linux-kernel@vger.kernel.org Cc: Guangshuo Li , stable@vger.kernel.org Subject: [PATCH v2] uio: fix IRQ vector leak on probe failure and remove Date: Sun, 24 May 2026 14:42:01 +0800 Message-ID: <20260524064201.1177225-1-lgs201920130244@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" probe() allocates MSI/MSI-X vectors with pci_alloc_irq_vectors(), but neither the error path nor remove() releases them with pci_free_irq_vectors(). Unlike drivers using pcim_enable_device(), this driver uses pci_enable_device(), so the IRQ vectors are not managed automatically and must be freed explicitly. Add pci_free_irq_vectors() to the probe error path after successful vector allocation and to remove(). The issue was identified by a static analysis tool I developed. Fixes: 3397c3cd859a ("uio: Add SVA support for PCI devices via uio_pci_gene= ric_sva.c") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li --- v2: - Change have_irq_vectors from int to bool. - Set have_irq_vectors immediately after successful IRQ vector allocation. drivers/uio/uio_pci_generic_sva.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/uio/uio_pci_generic_sva.c b/drivers/uio/uio_pci_generi= c_sva.c index 4a46acd994a8..e216436c9116 100644 --- a/drivers/uio/uio_pci_generic_sva.c +++ b/drivers/uio/uio_pci_generic_sva.c @@ -63,6 +63,7 @@ static int probe(struct pci_dev *pdev, const struct pci_d= evice_id *id) { struct uio_pci_sva_dev *udev; int ret, i, irq =3D 0; + bool have_irq_vectors =3D false; =20 ret =3D pci_enable_device(pdev); if (ret) { @@ -78,6 +79,8 @@ static int probe(struct pci_dev *pdev, const struct pci_d= evice_id *id) =20 ret =3D pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX | PCI_IRQ_MSI); if (ret > 0) { + have_irq_vectors =3D true; + irq =3D pci_irq_vector(pdev, 0); if (irq < 0) { dev_err(&pdev->dev, "Failed to get MSI vector\n"); @@ -139,6 +142,8 @@ static int probe(struct pci_dev *pdev, const struct pci= _device_id *id) out_free: kfree(udev); out_disable: + if (have_irq_vectors) + pci_free_irq_vectors(pdev); pci_disable_device(pdev); =20 return ret; @@ -148,6 +153,7 @@ static void remove(struct pci_dev *pdev) { struct uio_pci_sva_dev *udev =3D pci_get_drvdata(pdev); =20 + pci_free_irq_vectors(pdev); pci_release_regions(pdev); pci_disable_device(pdev); kfree(udev); --=20 2.43.0