Re: [PATCH 5.10 1/1] s390/pci: fix zpci_zdev_put() on reserve

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2021-10-25 at 11:11 +0200, Greg KH wrote:
> On Mon, Oct 25, 2021 at 11:00:26AM +0200, Niklas Schnelle wrote:
> > commit a46044a92add6a400f4dada7b943b30221f7cc80 upstream.
> > 
> > Since commit 2a671f77ee49 ("s390/pci: fix use after free of zpci_dev")
> > the reference count of a zpci_dev is incremented between
> > pcibios_add_device() and pcibios_release_device() which was supposed to
> > prevent the zpci_dev from being freed while the common PCI code has
> > access to it. It was missed however that the handling of zPCI
> > availability events assumed that once zpci_zdev_put() was called no
> > later availability event would still see the device. With the previously
> > mentioned commit however this assumption no longer holds and we must
> > make sure that we only drop the initial long-lived reference the zPCI
> > subsystem holds exactly once.
> > 
> > Do so by introducing a zpci_device_reserved() function that handles when
> > a device is reserved. Here we make sure the zpci_dev will not be
> > considered for further events by removing it from the zpci_list.
> > 
> > This also means that the device actually stays in the
> > ZPCI_FN_STATE_RESERVED state between the time we know it has been
> > reserved and the final reference going away. We thus need to consider it
> > a real state instead of just a conceptual state after the removal. The
> > final cleanup of PCI resources, removal from zbus, and destruction of
> > the IOMMU stays in zpci_release_device() to make sure holders of the
> > reference do see valid data until the release.
> > 
> > Fixes: 2a671f77ee49 ("s390/pci: fix use after free of zpci_dev")
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Niklas Schnelle <schnelle@xxxxxxxxxxxxx>
> > Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> > Link: https://lore.kernel.org/r/20211012093425.2247924-1-schnelle@xxxxxxxxxxxxx
> > ---
> >  arch/s390/include/asm/pci.h        |  3 ++
> >  arch/s390/pci/pci.c                | 45 ++++++++++++++++++++++++++----
> >  arch/s390/pci/pci_event.c          |  4 +--
> >  drivers/pci/hotplug/s390_pci_hpc.c |  9 +-----
> >  4 files changed, 46 insertions(+), 15 deletions(-)
> 
> Does not apply:
> 
> Applying patch s390-pci-fix-zpci_zdev_put-on-reserve.patch
> patching file arch/s390/include/asm/pci.h
> patching file arch/s390/pci/pci.c
> Hunk #3 FAILED at 835.
> Hunk #4 succeeded at 843 (offset 1 line).
> 1 out of 4 hunks FAILED -- rejects in file arch/s390/pci/pci.c
> patching file arch/s390/pci/pci_event.c
> patching file drivers/pci/hotplug/s390_pci_hpc.c
> 
> 
> What did you make this against?
> 
> Ah, that's due to another patch we have in the queue right now.  I'll go
> fix this up by hand, thanks!
> 
> greg k-h

Yes it's due to "s390/pci: cleanup resources only if necessary" you
need to drop that and keep this one.





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux