lkml.org 
[lkml]   [2021]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[GIT PULL] s390 updates for 5.14-rc7
Hello Linus,

please pull s390 fix for 5.14-rc7.

Thank you,
Vasily

The following changes since commit 7c60610d476766e128cc4284bb6349732cbd6606:

Linux 5.14-rc6 (2021-08-15 13:40:53 -1000)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git tags/s390-5.14-5

for you to fetch changes up to 2a671f77ee49f3e78997b77fdee139467ff6a598:

s390/pci: fix use after free of zpci_dev (2021-08-18 10:12:42 +0200)

----------------------------------------------------------------
s390 updates for 5.14-rc7

- fix use after free of zpci_dev in pci code

----------------------------------------------------------------
Niklas Schnelle (1):
s390/pci: fix use after free of zpci_dev

arch/s390/pci/pci.c | 6 ++++++
arch/s390/pci/pci_bus.h | 5 +++++
2 files changed, 11 insertions(+)

diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
index b0993e05affe..8fcb7ecb7225 100644
--- a/arch/s390/pci/pci.c
+++ b/arch/s390/pci/pci.c
@@ -560,9 +560,12 @@ static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)

int pcibios_add_device(struct pci_dev *pdev)
{
+ struct zpci_dev *zdev = to_zpci(pdev);
struct resource *res;
int i;

+ /* The pdev has a reference to the zdev via its bus */
+ zpci_zdev_get(zdev);
if (pdev->is_physfn)
pdev->no_vf_scan = 1;

@@ -582,7 +585,10 @@ int pcibios_add_device(struct pci_dev *pdev)

void pcibios_release_device(struct pci_dev *pdev)
{
+ struct zpci_dev *zdev = to_zpci(pdev);
+
zpci_unmap_resources(pdev);
+ zpci_zdev_put(zdev);
}

int pcibios_enable_device(struct pci_dev *pdev, int mask)
diff --git a/arch/s390/pci/pci_bus.h b/arch/s390/pci/pci_bus.h
index b877a97e6745..e359d2686178 100644
--- a/arch/s390/pci/pci_bus.h
+++ b/arch/s390/pci/pci_bus.h
@@ -22,6 +22,11 @@ static inline void zpci_zdev_put(struct zpci_dev *zdev)
kref_put(&zdev->kref, zpci_release_device);
}

+static inline void zpci_zdev_get(struct zpci_dev *zdev)
+{
+ kref_get(&zdev->kref);
+}
+
int zpci_alloc_domain(int domain);
void zpci_free_domain(int domain);
int zpci_setup_bus_resources(struct zpci_dev *zdev,
\
 
 \ /
  Last update: 2021-08-21 11:03    [W:0.026 / U:0.848 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site