In fcoe_if_init, if fc_attach_transport(&fcoe_vport_fc_functions)
fails, need to free the previously memory and return fail,
otherwise will trigger null-ptr-deref Read in fc_release_transport.

fcoe_exit
  fcoe_if_exit
    fc_release_transport(fcoe_vport_scsi_transport)

Reported-by: Hulk Robot <hul...@huawei.com>
Signed-off-by: zhengbin <zhengbi...@huawei.com>
---
 drivers/scsi/fcoe/fcoe.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 00dd47b..2f82e56 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -1250,15 +1250,21 @@ static int __init fcoe_if_init(void)
        /* attach to scsi transport */
        fcoe_nport_scsi_transport =
                fc_attach_transport(&fcoe_nport_fc_functions);
+       if (!fcoe_nport_scsi_transport)
+               goto err;
+
        fcoe_vport_scsi_transport =
                fc_attach_transport(&fcoe_vport_fc_functions);
-
-       if (!fcoe_nport_scsi_transport) {
-               printk(KERN_ERR "fcoe: Failed to attach to the FC transport\n");
-               return -ENODEV;
-       }
+       if (!fcoe_vport_scsi_transport)
+               goto err_vport;

        return 0;
+
+err_vport:
+       fc_release_transport(fcoe_nport_scsi_transport);
+err:
+       printk(KERN_ERR "fcoe: Failed to attach to the FC transport\n");
+       return -ENODEV;
 }

 /**
--
2.7.4

Reply via email to