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, 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



[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