• Yuan Can's avatar
    fm10k: Fix error handling in fm10k_init_module() · 771a794c
    Yuan Can authored
    A problem about modprobe fm10k failed is triggered with the following log
    given:
    
     Intel(R) Ethernet Switch Host Interface Driver
     Copyright(c) 2013 - 2019 Intel Corporation.
     debugfs: Directory 'fm10k' with parent '/' already present!
    
    The reason is that fm10k_init_module() returns fm10k_register_pci_driver()
    directly without checking its return value, if fm10k_register_pci_driver()
    failed, it returns without removing debugfs and destroy workqueue,
    resulting the debugfs of fm10k can never be created later and leaks the
    workqueue.
    
     fm10k_init_module()
       alloc_workqueue()
       fm10k_dbg_init() # create debugfs
       fm10k_register_pci_driver()
         pci_register_driver()
           driver_register()
             bus_add_driver()
               priv = kzalloc(...) # OOM happened
       # return without remove debugfs and destroy workqueue
    
    Fix by remove debugfs and destroy workqueue when
    fm10k_register_pci_driver() returns error.
    
    Fixes: 7461fd91 ("fm10k: Add support for debugfs")
    Fixes: b382bb1b ("fm10k: use separate workqueue for fm10k driver")
    Signed-off-by: default avatarYuan Can <yuancan@huawei.com>
    Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    771a794c
fm10k_main.c 53.2 KB