iwlwifi: return -ENOMEM instead of NULL when OOM in iwl_drv_start()
authorLuciano Coelho <luciano.coelho@intel.com>
Tue, 13 Aug 2013 07:34:55 +0000 (10:34 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 16 Aug 2013 10:12:03 +0000 (12:12 +0200)
The callers of iwl_drv_start() are probe functions.  If a probe
function returns 0, it means it succeeded.  So if NULL was returned by
iwl_drv_start(), it would be considered as a success.

Fix this by returning -ENOMEM if the driver struct allocation fails in
iwl_drv_start().

Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/iwl-drv.c
drivers/net/wireless/iwlwifi/pcie/drv.c

index e88397bd95ebaa9ac026d52a9b8edea092c5af3e..99e1da3123c9a07649008e48d2a2a56dc685d820 100644 (file)
@@ -1032,8 +1032,10 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans,
        int ret;
 
        drv = kzalloc(sizeof(*drv), GFP_KERNEL);
-       if (!drv)
-               return NULL;
+       if (!drv) {
+               ret = -ENOMEM;
+               goto err;
+       }
 
        drv->trans = trans;
        drv->dev = trans->dev;
@@ -1078,7 +1080,7 @@ err_free_dbgfs:
 err_free_drv:
 #endif
        kfree(drv);
-
+err:
        return ERR_PTR(ret);
 }
 
index e179efeddc8d88501250ba699330f4e5da82ee37..567ef014c30ad8a32040447f01966054e636b46c 100644 (file)
@@ -332,7 +332,7 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        trans_pcie = IWL_TRANS_GET_PCIE_TRANS(iwl_trans);
        trans_pcie->drv = iwl_drv_start(iwl_trans, cfg);
 
-       if (IS_ERR_OR_NULL(trans_pcie->drv)) {
+       if (IS_ERR(trans_pcie->drv)) {
                ret = PTR_ERR(trans_pcie->drv);
                goto out_free_trans;
        }