Unbound devices may race with calling this function causing the mutex
to stay locked. This failure mode should have released the mutex too.
Signed-off-by: Mario Limonciello <mario.limonciello@dell.com>
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
mutex_lock(&call_mutex);
priv = get_first_smbios_priv();
- if (!priv)
- return -ENODEV;
+ if (!priv) {
+ ret = -ENODEV;
+ goto out_wmi_call;
+ }
size = sizeof(struct calling_interface_buffer);
difference = priv->req_buf_size - sizeof(u64) - size;
memcpy(&priv->buf->std, buffer, size);
ret = run_smbios_call(priv->wdev);
memcpy(buffer, &priv->buf->std, size);
+out_wmi_call:
mutex_unlock(&call_mutex);
return ret;