Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1384411imm; Sat, 4 Aug 2018 02:18:20 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfJq62VcyiXRBmzRqTT+7oSev0xbe0y9lxPCtX3zvqm0DYYvtCDoIvdTMsbXzSWiZX35VfI X-Received: by 2002:a62:d8c:: with SMTP id 12-v6mr8376395pfn.202.1533374300490; Sat, 04 Aug 2018 02:18:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533374300; cv=none; d=google.com; s=arc-20160816; b=tspeHdsqfI2f6wT/kAhViTVbwU1vuAlrJRG4nmZyW+XheDKf3J1vyXpSkG/HCE4ojD NpkjxME7O2A3S/Qgn0MIyjMHUOJkuxStD020Q4ZfcYVEJHS5KHq8pmTag0pe4ClCrYqF 4jgOuHptZWPp+TAAekXxZduwBRIdC2dndfErm2DPd/jK/RVPW2XdVsjqn7GtcWx8Cf/1 vydOnHE00c0+IZZgOAVnZLnO2S4Acq3z/k8JD5hsIiTpb8Z17RNjuph8IFQkXVGIfxyo P7XDXxkGn1wgHwzskMSg880c95h0ziuqZ3L8dxQyEWsk1zJkywcwRhyVvFPfwBO9Et9r M2Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=SZSzzWjay35Keu41YLhuo68Vvon+s0hs6HJfnyh584s=; b=UIYKpVSMuHTtN1Tte7aRPT5/bOEiKH3soVscQP6YWNOBw7FLqMao24cfaq1NNzMnIH wWg/1DBxGN2+6zEx7uWLJTnUL/o2EYpRamUVRSANAn8NQTiOKFQgOhmui5TKSEvBqapz 6SjTRC5S+R3hYaXqAWwno9AfJK9E4w29lvajEyH/FTxZ4k5964aiNl6q3UEfeiCt6E+9 Ul19tlaTsCiF57adoLV/8H3gOMaZvmn2F0fo3k3Udhg7FEWG4ubP3AnrEYJ00P8aS3TH /xrk6Yv9BcdLnfDoZoSvyY1nUn8eKNUzjEXUX+y9JzTBojgoTjFtaVyd5zQWq9o/D7vu F3ng== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b6-v6si2153282pls.267.2018.08.04.02.18.04; Sat, 04 Aug 2018 02:18:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387757AbeHDLIE (ORCPT + 99 others); Sat, 4 Aug 2018 07:08:04 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:49506 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732384AbeHDLID (ORCPT ); Sat, 4 Aug 2018 07:08:03 -0400 Received: from localhost (D57E6652.static.ziggozakelijk.nl [213.126.102.82]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 2F27F89C; Sat, 4 Aug 2018 09:08:04 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christoph Hellwig , Bjorn Helgaas , Johannes Thumshirn , Keith Busch , Sasha Levin Subject: [PATCH 4.4 036/124] PCI: Prevent sysfs disable of device while driver is attached Date: Sat, 4 Aug 2018 11:00:25 +0200 Message-Id: <20180804082703.786363458@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180804082702.434482435@linuxfoundation.org> References: <20180804082702.434482435@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Christoph Hellwig [ Upstream commit 6f5cdfa802733dcb561bf664cc89d203f2fd958f ] Manipulating the enable_cnt behind the back of the driver will wreak complete havoc with the kernel state, so disallow it. Signed-off-by: Christoph Hellwig Signed-off-by: Bjorn Helgaas Reviewed-by: Johannes Thumshirn Acked-by: Keith Busch Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/pci/pci-sysfs.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -180,13 +180,16 @@ static ssize_t enable_store(struct devic if (!capable(CAP_SYS_ADMIN)) return -EPERM; - if (!val) { - if (pci_is_enabled(pdev)) - pci_disable_device(pdev); - else - result = -EIO; - } else + device_lock(dev); + if (dev->driver) + result = -EBUSY; + else if (val) result = pci_enable_device(pdev); + else if (pci_is_enabled(pdev)) + pci_disable_device(pdev); + else + result = -EIO; + device_unlock(dev); return result < 0 ? result : count; }