Patch "net: thunderbolt: Fix error handling in tbnet_init()" has been added to the 4.19-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: thunderbolt: Fix error handling in tbnet_init()

to the 4.19-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-thunderbolt-fix-error-handling-in-tbnet_init.patch
and it can be found in the queue-4.19 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5eb03a80b6c6a54fe5021367630625851bdc4794
Author: Yuan Can <yuancan@xxxxxxxxxx>
Date:   Mon Nov 14 14:22:25 2022 +0000

    net: thunderbolt: Fix error handling in tbnet_init()
    
    [ Upstream commit f524b7289bbb0c8ffaa2ba3c34c146e43da54fb2 ]
    
    A problem about insmod thunderbolt-net failed is triggered with following
    log given while lsmod does not show thunderbolt_net:
    
     insmod: ERROR: could not insert module thunderbolt-net.ko: File exists
    
    The reason is that tbnet_init() returns tb_register_service_driver()
    directly without checking its return value, if tb_register_service_driver()
    failed, it returns without removing property directory, resulting the
    property directory can never be created later.
    
     tbnet_init()
       tb_register_property_dir() # register property directory
       tb_register_service_driver()
         driver_register()
           bus_add_driver()
             priv = kzalloc(...) # OOM happened
       # return without remove property directory
    
    Fix by remove property directory when tb_register_service_driver() returns
    error.
    
    Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
    Signed-off-by: Yuan Can <yuancan@xxxxxxxxxx>
    Acked-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c
index 4b5af2413970..51b5442fbc66 100644
--- a/drivers/net/thunderbolt.c
+++ b/drivers/net/thunderbolt.c
@@ -1342,12 +1342,21 @@ static int __init tbnet_init(void)
 				  TBNET_MATCH_FRAGS_ID);
 
 	ret = tb_register_property_dir("network", tbnet_dir);
-	if (ret) {
-		tb_property_free_dir(tbnet_dir);
-		return ret;
-	}
+	if (ret)
+		goto err_free_dir;
+
+	ret = tb_register_service_driver(&tbnet_driver);
+	if (ret)
+		goto err_unregister;
 
-	return tb_register_service_driver(&tbnet_driver);
+	return 0;
+
+err_unregister:
+	tb_unregister_property_dir("network", tbnet_dir);
+err_free_dir:
+	tb_property_free_dir(tbnet_dir);
+
+	return ret;
 }
 module_init(tbnet_init);
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux