diff
+	int error = 0;
 	...
50 	ret = qca_tlv_check_data(hdev, config, data, size, soc_type);
51 	if (ret) {
-52 		return ret;
+52 		error = ret;
+53 		goto cleanup;
54 	}
 	...
84 out:
85 	vfree(data);
-86 	return ret;
+86 cleanup:
+87 	if (data)
+88 		vfree(data);
+89 	return error ? error : ret;
