patch
+static void cleanup_firmware_data(void *data)
+{
+	vfree(data);
+}
+
 static int qca_download_firmware(struct hci_dev *hdev,
 				 struct qca_fw_config *config,
 				 enum qca_btsoc_type soc_type,
@@ -49,8 +54,10 @@ static int qca_download_firmware(struct hci_dev *hdev,
 
 	ret = qca_tlv_check_data(hdev, config, data, size, soc_type);
 	if (ret) {
+		cleanup_firmware_data(data);
 		return ret;
 	}
+
 	segment = data;
 	remain = size;
