* [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()
@ 2021-12-01 4:16 Igor Pylypiv
2021-12-02 8:17 ` Jinpu Wang
2021-12-03 3:03 ` Martin K. Petersen
0 siblings, 2 replies; 3+ messages in thread
From: Igor Pylypiv @ 2021-12-01 4:16 UTC (permalink / raw)
To: Jack Wang, James E.J. Bottomley, Martin K. Petersen
Cc: Vishakha Channapattan, Changyuan Lyu, linux-scsi, Viswas G,
Ruksar Devadi, Igor Pylypiv
Calling scsi_remove_host() before scsi_add_host() results in a crash:
BUG: kernel NULL pointer dereference, address: 0000000000000108
RIP: 0010:device_del+0x63/0x440
Call Trace:
device_unregister+0x17/0x60
scsi_remove_host+0xee/0x2a0
pm8001_pci_probe+0x6ef/0x1b90 [pm80xx]
local_pci_probe+0x3f/0x90
We cannot call scsi_remove_host() in pm8001_alloc() because
scsi_add_host() have not been called yet at that point of time.
Function call tree:
pm8001_pci_probe()
|
`- pm8001_pci_alloc()
| |
| `- pm8001_alloc()
| |
| `- scsi_remove_host()
|
`- scsi_add_host()
Fixes: 05c6c029a44d ("scsi: pm80xx: Increase number of supported queues")
Reviewed-by: Vishakha Channapattan <vishakhavc@google.com>
Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
---
drivers/scsi/pm8001/pm8001_init.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index bed8cc125544..fbfeb0b046dd 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -282,12 +282,12 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
if (rc) {
pm8001_dbg(pm8001_ha, FAIL,
"pm8001_setup_irq failed [ret: %d]\n", rc);
- goto err_out_shost;
+ goto err_out;
}
/* Request Interrupt */
rc = pm8001_request_irq(pm8001_ha);
if (rc)
- goto err_out_shost;
+ goto err_out;
count = pm8001_ha->max_q_num;
/* Queues are chosen based on the number of cores/msix availability */
@@ -423,8 +423,6 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
pm8001_tag_init(pm8001_ha);
return 0;
-err_out_shost:
- scsi_remove_host(pm8001_ha->shost);
err_out_nodev:
for (i = 0; i < pm8001_ha->max_memcnt; i++) {
if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) {
--
2.34.0.rc2.393.gf8c9666880-goog
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()
2021-12-01 4:16 [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc() Igor Pylypiv
@ 2021-12-02 8:17 ` Jinpu Wang
2021-12-03 3:03 ` Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Jinpu Wang @ 2021-12-02 8:17 UTC (permalink / raw)
To: Igor Pylypiv
Cc: Jack Wang, James E.J. Bottomley, Martin K. Petersen,
Vishakha Channapattan, Changyuan Lyu, linux-scsi, Viswas G,
Ruksar Devadi
On Wed, Dec 1, 2021 at 5:16 AM Igor Pylypiv <ipylypiv@google.com> wrote:
>
> Calling scsi_remove_host() before scsi_add_host() results in a crash:
>
> BUG: kernel NULL pointer dereference, address: 0000000000000108
> RIP: 0010:device_del+0x63/0x440
> Call Trace:
> device_unregister+0x17/0x60
> scsi_remove_host+0xee/0x2a0
> pm8001_pci_probe+0x6ef/0x1b90 [pm80xx]
> local_pci_probe+0x3f/0x90
>
> We cannot call scsi_remove_host() in pm8001_alloc() because
> scsi_add_host() have not been called yet at that point of time.
>
> Function call tree:
>
> pm8001_pci_probe()
> |
> `- pm8001_pci_alloc()
> | |
> | `- pm8001_alloc()
> | |
> | `- scsi_remove_host()
> |
> `- scsi_add_host()
>
> Fixes: 05c6c029a44d ("scsi: pm80xx: Increase number of supported queues")
> Reviewed-by: Vishakha Channapattan <vishakhavc@google.com>
> Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
Thanks!
Acked-by: Jack Wang <jinpu.wang@ionos.com>
> ---
> drivers/scsi/pm8001/pm8001_init.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index bed8cc125544..fbfeb0b046dd 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -282,12 +282,12 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
> if (rc) {
> pm8001_dbg(pm8001_ha, FAIL,
> "pm8001_setup_irq failed [ret: %d]\n", rc);
> - goto err_out_shost;
> + goto err_out;
> }
> /* Request Interrupt */
> rc = pm8001_request_irq(pm8001_ha);
> if (rc)
> - goto err_out_shost;
> + goto err_out;
>
> count = pm8001_ha->max_q_num;
> /* Queues are chosen based on the number of cores/msix availability */
> @@ -423,8 +423,6 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,
> pm8001_tag_init(pm8001_ha);
> return 0;
>
> -err_out_shost:
> - scsi_remove_host(pm8001_ha->shost);
> err_out_nodev:
> for (i = 0; i < pm8001_ha->max_memcnt; i++) {
> if (pm8001_ha->memoryMap.region[i].virt_ptr != NULL) {
> --
> 2.34.0.rc2.393.gf8c9666880-goog
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()
2021-12-01 4:16 [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc() Igor Pylypiv
2021-12-02 8:17 ` Jinpu Wang
@ 2021-12-03 3:03 ` Martin K. Petersen
1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2021-12-03 3:03 UTC (permalink / raw)
To: Igor Pylypiv, James E.J. Bottomley, Jack Wang
Cc: Martin K . Petersen, Viswas G, Changyuan Lyu, linux-scsi,
Vishakha Channapattan, Ruksar Devadi
On Tue, 30 Nov 2021 20:16:27 -0800, Igor Pylypiv wrote:
> Calling scsi_remove_host() before scsi_add_host() results in a crash:
>
> BUG: kernel NULL pointer dereference, address: 0000000000000108
> RIP: 0010:device_del+0x63/0x440
> Call Trace:
> device_unregister+0x17/0x60
> scsi_remove_host+0xee/0x2a0
> pm8001_pci_probe+0x6ef/0x1b90 [pm80xx]
> local_pci_probe+0x3f/0x90
>
> [...]
Applied to 5.16/scsi-fixes, thanks!
[1/1] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()
https://git.kernel.org/mkp/scsi/c/653926205741
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-12-03 3:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-01 4:16 [PATCH] scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc() Igor Pylypiv
2021-12-02 8:17 ` Jinpu Wang
2021-12-03 3:03 ` Martin K. Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).