rtl_fw_cb);
        if (err) {
                pr_info("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
 
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
 
        err = request_firmware_nowait(THIS_MODULE, 1,
                                      fw_name, rtlpriv->io.dev,
                                      GFP_KERNEL, hw, rtl_fw_cb);
+       if (err) {
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
+       }
        return err;
 }
 
 
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
 
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
 
                                      rtl92se_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
 
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
        return 0;
 
                                              rtl_fw_cb);
                if (err) {
                        pr_err("Failed to request firmware!\n");
+                       vfree(rtlpriv->rtlhal.pfirmware);
+                       rtlpriv->rtlhal.pfirmware = NULL;
                        return 1;
                }
        }
 
        rtlpriv->rtlhal.wowlan_firmware = vzalloc(0x8000);
        if (!rtlpriv->rtlhal.wowlan_firmware) {
                pr_err("Can't alloc buffer for wowlan fw.\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
                                              rtl_fw_cb);
                if (err) {
                        pr_err("Failed to request normal firmware!\n");
+                       vfree(rtlpriv->rtlhal.wowlan_firmware);
+                       vfree(rtlpriv->rtlhal.pfirmware);
                        return 1;
                }
        }
                                      rtl_wowlan_fw_cb);
        if (err) {
                pr_err("Failed to request wowlan firmware!\n");
+               vfree(rtlpriv->rtlhal.wowlan_firmware);
+               vfree(rtlpriv->rtlhal.pfirmware);
                return 1;
        }
        return 0;