All of lore.kernel.org
 help / color / mirror / Atom feed
* [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
@ 2017-02-24 21:49 ` Long Li
  0 siblings, 0 replies; 7+ messages in thread
From: Long Li @ 2017-02-24 21:49 UTC (permalink / raw)
  To: KY Srinivasan, Haiyang Zhang, Bjorn Helgaas
  Cc: devel, linux-pci, linux-kernel

A PCI_EJECT message can arrive at the same time we are calling pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS message or in create_root_hv_pci_bus(), in this case we could potentailly modify the bus from multiple places. Properly lock the bus access.

Thanks Dexuan Cui <decui@microsoft.com> for pointing out the race condition in create_root_hv_pci_bus().

Signed-off-by: Long Li <longli@microsoft.com>
Reported-by: Xiaofeng Wang <xiaofwan@redhat.com>
Acked-by: K. Y. Srinivasan <kys@microsoft.com>
---
 drivers/pci/host/pci-hyperv.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
index 4a37598..33c75c9 100644
--- a/drivers/pci/host/pci-hyperv.c
+++ b/drivers/pci/host/pci-hyperv.c
@@ -1198,9 +1198,11 @@ static int create_root_hv_pci_bus(struct hv_pcibus_device *hbus)
 	hbus->pci_bus->msi = &hbus->msi_chip;
 	hbus->pci_bus->msi->dev = &hbus->hdev->device;
 
+	pci_lock_rescan_remove();
 	pci_scan_child_bus(hbus->pci_bus);
 	pci_bus_assign_resources(hbus->pci_bus);
 	pci_bus_add_devices(hbus->pci_bus);
+	pci_unlock_rescan_remove();
 	hbus->state = hv_pcibus_installed;
 	return 0;
 }
@@ -1590,8 +1592,10 @@ static void hv_eject_device_work(struct work_struct *work)
 	pdev = pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain, 0,
 					   wslot);
 	if (pdev) {
+		pci_lock_rescan_remove();
 		pci_stop_and_remove_bus_device(pdev);
 		pci_dev_put(pdev);
+		pci_unlock_rescan_remove();
 	}
 
 	memset(&ctxt, 0, sizeof(ctxt));
-- 
1.8.5.6

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
@ 2017-02-24 21:49 ` Long Li
  0 siblings, 0 replies; 7+ messages in thread
From: Long Li @ 2017-02-24 21:49 UTC (permalink / raw)
  To: KY Srinivasan, Haiyang Zhang, Bjorn Helgaas
  Cc: devel, linux-pci, linux-kernel

A PCI_EJECT message can arrive at the same time we are calling pci_scan_chi=
ld_bus in the workqueue for the previous PCI_BUS_RELATIONS message or in cr=
eate_root_hv_pci_bus(), in this case we could potentailly modify the bus fr=
om multiple places. Properly lock the bus access.

Thanks Dexuan Cui <decui@microsoft.com> for pointing out the race condition=
 in create_root_hv_pci_bus().

Signed-off-by: Long Li <longli@microsoft.com>
Reported-by: Xiaofeng Wang <xiaofwan@redhat.com>
Acked-by: K. Y. Srinivasan <kys@microsoft.com>
---
 drivers/pci/host/pci-hyperv.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
index 4a37598..33c75c9 100644
--- a/drivers/pci/host/pci-hyperv.c
+++ b/drivers/pci/host/pci-hyperv.c
@@ -1198,9 +1198,11 @@ static int create_root_hv_pci_bus(struct hv_pcibus_d=
evice *hbus)
 	hbus->pci_bus->msi =3D &hbus->msi_chip;
 	hbus->pci_bus->msi->dev =3D &hbus->hdev->device;
=20
+	pci_lock_rescan_remove();
 	pci_scan_child_bus(hbus->pci_bus);
 	pci_bus_assign_resources(hbus->pci_bus);
 	pci_bus_add_devices(hbus->pci_bus);
+	pci_unlock_rescan_remove();
 	hbus->state =3D hv_pcibus_installed;
 	return 0;
 }
@@ -1590,8 +1592,10 @@ static void hv_eject_device_work(struct work_struct =
*work)
 	pdev =3D pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain, 0,
 					   wslot);
 	if (pdev) {
+		pci_lock_rescan_remove();
 		pci_stop_and_remove_bus_device(pdev);
 		pci_dev_put(pdev);
+		pci_unlock_rescan_remove();
 	}
=20
 	memset(&ctxt, 0, sizeof(ctxt));
--=20
1.8.5.6

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
  2017-02-24 21:49 ` Long Li
  (?)
@ 2017-02-25  8:02 ` Greg KH
  2017-02-27 21:51     ` Long Li
  -1 siblings, 1 reply; 7+ messages in thread
From: Greg KH @ 2017-02-25  8:02 UTC (permalink / raw)
  To: Long Li
  Cc: KY Srinivasan, Haiyang Zhang, Bjorn Helgaas, devel, linux-kernel,
	linux-pci

On Fri, Feb 24, 2017 at 09:49:17PM +0000, Long Li wrote:
> A PCI_EJECT message can arrive at the same time we are calling pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS message or in create_root_hv_pci_bus(), in this case we could potentailly modify the bus from multiple places. Properly lock the bus access.

Properly wrap your changelog comments at 72 columns like your editor is
telling you to do...

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
  2017-02-25  8:02 ` Greg KH
@ 2017-02-27 21:51     ` Long Li
  0 siblings, 0 replies; 7+ messages in thread
From: Long Li @ 2017-02-27 21:51 UTC (permalink / raw)
  To: Greg KH
  Cc: KY Srinivasan, Haiyang Zhang, Bjorn Helgaas, devel, linux-kernel,
	linux-pci

Ok, I will resend.

> -----Original Message-----
> From: Greg KH [mailto:greg@kroah.com]
> Sent: Saturday, February 25, 2017 12:02 AM
> To: Long Li <longli@microsoft.com>
> Cc: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Bjorn Helgaas <bhelgaas@google.com>;
> devel@linuxdriverproject.org; linux-kernel@vger.kernel.org; linux-
> pci@vger.kernel.org
> Subject: Re: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
> 
> On Fri, Feb 24, 2017 at 09:49:17PM +0000, Long Li wrote:
> > A PCI_EJECT message can arrive at the same time we are calling
> pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS
> message or in create_root_hv_pci_bus(), in this case we could potentailly
> modify the bus from multiple places. Properly lock the bus access.
> 
> Properly wrap your changelog comments at 72 columns like your editor is
> telling you to do...

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
@ 2017-02-27 21:51     ` Long Li
  0 siblings, 0 replies; 7+ messages in thread
From: Long Li @ 2017-02-27 21:51 UTC (permalink / raw)
  To: Greg KH
  Cc: KY Srinivasan, Haiyang Zhang, Bjorn Helgaas, devel, linux-kernel,
	linux-pci

Ok, I will resend.

> -----Original Message-----
> From: Greg KH [mailto:greg@kroah.com]
> Sent: Saturday, February 25, 2017 12:02 AM
> To: Long Li <longli@microsoft.com>
> Cc: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Bjorn Helgaas <bhelgaas@google.com>;
> devel@linuxdriverproject.org; linux-kernel@vger.kernel.org; linux-
> pci@vger.kernel.org
> Subject: Re: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eje=
ct
>=20
> On Fri, Feb 24, 2017 at 09:49:17PM +0000, Long Li wrote:
> > A PCI_EJECT message can arrive at the same time we are calling
> pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS
> message or in create_root_hv_pci_bus(), in this case we could potentailly
> modify the bus from multiple places. Properly lock the bus access.
>=20
> Properly wrap your changelog comments at 72 columns like your editor is
> telling you to do...

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
       [not found] <1485236759-27699-1-git-send-email-longli@exchange.microsoft.com>
@ 2017-01-27 18:42   ` KY Srinivasan
  0 siblings, 0 replies; 7+ messages in thread
From: KY Srinivasan @ 2017-01-27 18:42 UTC (permalink / raw)
  To: Long Li, Haiyang Zhang, Bjorn Helgaas
  Cc: devel, linux-pci, linux-kernel, Long Li



> -----Original Message-----
> From: Long Li [mailto:longli@exchange.microsoft.com]
> Sent: Monday, January 23, 2017 9:46 PM
> To: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Bjorn Helgaas <bhelgaas@google.com>
> Cc: devel@linuxdriverproject.org; linux-pci@vger.kernel.org; linux-
> kernel@vger.kernel.org; Long Li <longli@microsoft.com>
> Subject: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
> 
> [This sender failed our fraud detection checks and may not be who they
> appear to be. Learn about spoofing at http://aka.ms/LearnAboutSpoofing]
> 
> From: Long Li <longli@microsoft.com>
> 
> A PCI_EJECT message can arrive at the same time we are calling
> pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS
> message or in create_root_hv_pci_bus(), in this case we could potentailly
> modify the bus from multiple places. Properly lock the bus access.
> 
> Thanks Dexuan Cui <decui@microsoft.com> for pointing out the race
> condition in create_root_hv_pci_bus().
> 
> Signed-off-by: Long Li <longli@microsoft.com>
> Reported-by: Xiaofeng Wang <xiaofwan@redhat.com>

Acked-by: K. Y. Srinivasan <kys@microsoft.com>

> ---
>  drivers/pci/host/pci-hyperv.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
> index 4a37598..33c75c9 100644
> --- a/drivers/pci/host/pci-hyperv.c
> +++ b/drivers/pci/host/pci-hyperv.c
> @@ -1198,9 +1198,11 @@ static int create_root_hv_pci_bus(struct
> hv_pcibus_device *hbus)
>         hbus->pci_bus->msi = &hbus->msi_chip;
>         hbus->pci_bus->msi->dev = &hbus->hdev->device;
> 
> +       pci_lock_rescan_remove();
>         pci_scan_child_bus(hbus->pci_bus);
>         pci_bus_assign_resources(hbus->pci_bus);
>         pci_bus_add_devices(hbus->pci_bus);
> +       pci_unlock_rescan_remove();
>         hbus->state = hv_pcibus_installed;
>         return 0;
>  }
> @@ -1590,8 +1592,10 @@ static void hv_eject_device_work(struct
> work_struct *work)
>         pdev = pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain,
> 0,
>                                            wslot);
>         if (pdev) {
> +               pci_lock_rescan_remove();
>                 pci_stop_and_remove_bus_device(pdev);
>                 pci_dev_put(pdev);
> +               pci_unlock_rescan_remove();
>         }
> 
>         memset(&ctxt, 0, sizeof(ctxt));
> --
> 1.8.5.6

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
@ 2017-01-27 18:42   ` KY Srinivasan
  0 siblings, 0 replies; 7+ messages in thread
From: KY Srinivasan @ 2017-01-27 18:42 UTC (permalink / raw)
  To: Long Li, Haiyang Zhang, Bjorn Helgaas
  Cc: devel, linux-pci, linux-kernel, Long Li



> -----Original Message-----
> From: Long Li [mailto:longli@exchange.microsoft.com]
> Sent: Monday, January 23, 2017 9:46 PM
> To: KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Bjorn Helgaas <bhelgaas@google.com>
> Cc: devel@linuxdriverproject.org; linux-pci@vger.kernel.org; linux-
> kernel@vger.kernel.org; Long Li <longli@microsoft.com>
> Subject: [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject
>=20
> [This sender failed our fraud detection checks and may not be who they
> appear to be. Learn about spoofing at http://aka.ms/LearnAboutSpoofing]
>=20
> From: Long Li <longli@microsoft.com>
>=20
> A PCI_EJECT message can arrive at the same time we are calling
> pci_scan_child_bus in the workqueue for the previous PCI_BUS_RELATIONS
> message or in create_root_hv_pci_bus(), in this case we could potentailly
> modify the bus from multiple places. Properly lock the bus access.
>=20
> Thanks Dexuan Cui <decui@microsoft.com> for pointing out the race
> condition in create_root_hv_pci_bus().
>=20
> Signed-off-by: Long Li <longli@microsoft.com>
> Reported-by: Xiaofeng Wang <xiaofwan@redhat.com>

Acked-by: K. Y. Srinivasan <kys@microsoft.com>

> ---
>  drivers/pci/host/pci-hyperv.c | 4 ++++
>  1 file changed, 4 insertions(+)
>=20
> diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.=
c
> index 4a37598..33c75c9 100644
> --- a/drivers/pci/host/pci-hyperv.c
> +++ b/drivers/pci/host/pci-hyperv.c
> @@ -1198,9 +1198,11 @@ static int create_root_hv_pci_bus(struct
> hv_pcibus_device *hbus)
>         hbus->pci_bus->msi =3D &hbus->msi_chip;
>         hbus->pci_bus->msi->dev =3D &hbus->hdev->device;
>=20
> +       pci_lock_rescan_remove();
>         pci_scan_child_bus(hbus->pci_bus);
>         pci_bus_assign_resources(hbus->pci_bus);
>         pci_bus_add_devices(hbus->pci_bus);
> +       pci_unlock_rescan_remove();
>         hbus->state =3D hv_pcibus_installed;
>         return 0;
>  }
> @@ -1590,8 +1592,10 @@ static void hv_eject_device_work(struct
> work_struct *work)
>         pdev =3D pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain,
> 0,
>                                            wslot);
>         if (pdev) {
> +               pci_lock_rescan_remove();
>                 pci_stop_and_remove_bus_device(pdev);
>                 pci_dev_put(pdev);
> +               pci_unlock_rescan_remove();
>         }
>=20
>         memset(&ctxt, 0, sizeof(ctxt));
> --
> 1.8.5.6

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-02-27 21:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-24 21:49 [Resend PATCH 2/2 v3] pci-hyperv: lock pci bus on device eject Long Li
2017-02-24 21:49 ` Long Li
2017-02-25  8:02 ` Greg KH
2017-02-27 21:51   ` Long Li
2017-02-27 21:51     ` Long Li
     [not found] <1485236759-27699-1-git-send-email-longli@exchange.microsoft.com>
2017-01-27 18:42 ` KY Srinivasan
2017-01-27 18:42   ` KY Srinivasan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.