staging: wilc1000: added complete() call for error scenario in handle_key()
authorAjay Singh <ajay.kathat@microchip.com>
Fri, 11 May 2018 08:13:02 +0000 (13:43 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 May 2018 12:03:46 +0000 (14:03 +0200)
During memory allocation failure in handle_key() the complete() was not
called for comp_test_key_block event. So now added the code to call
complete() for event during error scenario.

Signed-off-by: Ajay Singh <ajay.kathat@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wilc1000/host_interface.c

index b5f3829e9903b34cfb56420b1c40b09b76b697b4..652f51cbf44f0f36eee7b95ac14017abdbc86953 100644 (file)
@@ -1513,8 +1513,10 @@ static int handle_key(struct wilc_vif *vif, struct key_attr *hif_key)
 
                        key_buf = kmalloc(hif_key->attr.wep.key_len + 2,
                                          GFP_KERNEL);
-                       if (!key_buf)
-                               return -ENOMEM;
+                       if (!key_buf) {
+                               result = -ENOMEM;
+                               goto out_wep;
+                       }
 
                        key_buf[0] = hif_key->attr.wep.index;
                        key_buf[1] = hif_key->attr.wep.key_len;
@@ -1535,8 +1537,10 @@ static int handle_key(struct wilc_vif *vif, struct key_attr *hif_key)
                        kfree(key_buf);
                } else if (hif_key->action & ADDKEY) {
                        key_buf = kmalloc(hif_key->attr.wep.key_len + 2, GFP_KERNEL);
-                       if (!key_buf)
-                               return -ENOMEM;
+                       if (!key_buf) {
+                               result = -ENOMEM;
+                               goto out_wep;
+                       }
                        key_buf[0] = hif_key->attr.wep.index;
                        memcpy(key_buf + 1, &hif_key->attr.wep.key_len, 1);
                        memcpy(key_buf + 2, hif_key->attr.wep.key,
@@ -1573,6 +1577,7 @@ static int handle_key(struct wilc_vif *vif, struct key_attr *hif_key)
                                                      &wid, 1,
                                                      wilc_get_vif_idx(vif));
                }
+out_wep:
                complete(&hif_drv->comp_test_key_block);
                break;
 
@@ -1607,7 +1612,6 @@ static int handle_key(struct wilc_vif *vif, struct key_attr *hif_key)
                                                      wilc_get_vif_idx(vif));
 
                        kfree(key_buf);
-                       complete(&hif_drv->comp_test_key_block);
                } else if (hif_key->action & ADDKEY) {
                        key_buf = kzalloc(RX_MIC_KEY_MSG_LEN, GFP_KERNEL);
                        if (!key_buf) {
@@ -1636,9 +1640,9 @@ static int handle_key(struct wilc_vif *vif, struct key_attr *hif_key)
                                                      wilc_get_vif_idx(vif));
 
                        kfree(key_buf);
-                       complete(&hif_drv->comp_test_key_block);
                }
 out_wpa_rx_gtk:
+               complete(&hif_drv->comp_test_key_block);
                kfree(hif_key->attr.wpa.key);
                kfree(hif_key->attr.wpa.seq);
                if (ret)
@@ -1674,7 +1678,6 @@ out_wpa_rx_gtk:
                                                      wid_list, 2,
                                                      wilc_get_vif_idx(vif));
                        kfree(key_buf);
-                       complete(&hif_drv->comp_test_key_block);
                } else if (hif_key->action & ADDKEY) {
                        key_buf = kmalloc(PTK_KEY_MSG_LEN, GFP_KERNEL);
                        if (!key_buf) {
@@ -1696,10 +1699,10 @@ out_wpa_rx_gtk:
                                                      &wid, 1,
                                                      wilc_get_vif_idx(vif));
                        kfree(key_buf);
-                       complete(&hif_drv->comp_test_key_block);
                }
 
 out_wpa_ptk:
+               complete(&hif_drv->comp_test_key_block);
                kfree(hif_key->attr.wpa.key);
                if (ret)
                        return ret;