Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932891AbaBDVA5 (ORCPT ); Tue, 4 Feb 2014 16:00:57 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:55928 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932109AbaBDVAZ (ORCPT ); Tue, 4 Feb 2014 16:00:25 -0500 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Aristeu Rozanski , mark gross , Borislav Petkov , Jean Delvare Subject: [PATCH 3.4 03/37] e752x_edac: Fix pci_dev usage count Date: Tue, 4 Feb 2014 13:00:39 -0800 Message-Id: <20140204210056.105099797@linuxfoundation.org> X-Mailer: git-send-email 1.8.5.1.163.gd7aced9 In-Reply-To: <20140204210055.992134150@linuxfoundation.org> References: <20140204210055.992134150@linuxfoundation.org> User-Agent: quilt/0.61-1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Aristeu Rozanski commit 90ed4988b8c030d65b41b7d13140e9376dc6ec5a upstream. In case the device 0, function 1 is not found using pci_get_device(), pci_scan_single_device() will be used but, differently than pci_get_device(), it allocates a pci_dev but doesn't does bump the usage count on the pci_dev and after few module removals and loads the pci_dev will be freed. Signed-off-by: Aristeu Rozanski Reviewed-by: mark gross Link: http://lkml.kernel.org/r/20131205153755.GL4545@redhat.com Signed-off-by: Borislav Petkov Cc: Jean Delvare Signed-off-by: Greg Kroah-Hartman --- drivers/edac/e752x_edac.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/drivers/edac/e752x_edac.c +++ b/drivers/edac/e752x_edac.c @@ -1145,9 +1145,11 @@ static int e752x_get_devs(struct pci_dev pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, pvt->dev_info->err_dev, pvt->bridge_ck); - if (pvt->bridge_ck == NULL) + if (pvt->bridge_ck == NULL) { pvt->bridge_ck = pci_scan_single_device(pdev->bus, PCI_DEVFN(0, 1)); + pci_dev_get(pvt->bridge_ck); + } if (pvt->bridge_ck == NULL) { e752x_printk(KERN_ERR, "error reporting device not found:" -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/