diff
+static void qca_cleanup(u8 *data)
+{
+	if (data)
+		vfree(data);
+}
+
 static int qca_download_firmware(struct hci_dev *hdev,
 				 struct qca_fw_config *config,
 				 enum qca_btsoc_type soc_type,
 				 u8 rom_ver)
 {
+	int ret = 0;
 	...
+	u8 *data = NULL;
 	...
50 	ret = qca_tlv_check_data(hdev, config, data, size, soc_type);
51 	if (ret)
-52 		return ret;
+52 		goto out;
 	...
84 out:
-85 	vfree(data);
-86 	return ret;
+85 	qca_cleanup(data);
+86 	return ret;
 }
