diff mbox

aic94xx: set error code on an error path in aic94xx_init

Message ID 1527791294-21600-1-git-send-email-melnichenko@ispras.ru (mailing list archive)
State Changes Requested
Headers show

Commit Message

Peter Melnichenko May 31, 2018, 6:28 p.m. UTC
When sas_domain_attach_transport returns NULL, aic94xx_init
frees acquired resources but returns err equal to 0, as
assigned by a previous statement.

The patch sets err to -ENOMEM before jumping to the error label.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Peter Melnichenko <melnichenko@ispras.ru>
---
 drivers/scsi/aic94xx/aic94xx_init.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Andy Shevchenko May 31, 2018, 7:15 p.m. UTC | #1
On Thu, May 31, 2018 at 9:28 PM, Peter Melnichenko
<melnichenko@ispras.ru> wrote:
> When sas_domain_attach_transport returns NULL, aic94xx_init
> frees acquired resources but returns err equal to 0, as
> assigned by a previous statement.
>
> The patch sets err to -ENOMEM before jumping to the error label.

Wouldn't be better to fix a callee to return proper error code and...

>         aic94xx_transport_template =
>                 sas_domain_attach_transport(&aic94xx_transport_functions);
> -       if (!aic94xx_transport_template)
> +       if (!aic94xx_transport_template) {
> +               err = -ENOMEM;
>                 goto out_destroy_caches;
> +       }

this becomes

err = _attach_();
if (err < 0)
 goto ;
_template = err;

?
diff mbox

Patch

diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index 6c83886..4a4746c 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -1030,8 +1030,10 @@  static int __init aic94xx_init(void)
 
 	aic94xx_transport_template =
 		sas_domain_attach_transport(&aic94xx_transport_functions);
-	if (!aic94xx_transport_template)
+	if (!aic94xx_transport_template) {
+		err = -ENOMEM;
 		goto out_destroy_caches;
+	}
 
 	err = pci_register_driver(&aic94xx_pci_driver);
 	if (err)