platform/x86: dell-smbios-wmi: release mutex lock on WMI call failure
authorMario Limonciello <mario.limonciello@dell.com>
Mon, 6 Nov 2017 03:34:34 +0000 (21:34 -0600)
committerDarren Hart (VMware) <dvhart@infradead.org>
Wed, 8 Nov 2017 20:58:37 +0000 (12:58 -0800)
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>
drivers/platform/x86/dell-smbios-wmi.c

index 35c13815b24cbcb9e717b6b421327e469482f63d..5cf9b13ce6e6f295ddd4ce8b838d12c24f5e0feb 100644 (file)
@@ -91,8 +91,10 @@ int dell_smbios_wmi_call(struct calling_interface_buffer *buffer)
 
        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;
@@ -101,6 +103,7 @@ int dell_smbios_wmi_call(struct calling_interface_buffer *buffer)
        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;