Calling release_attributes_data() while holding the "wmi_priv.mutex"
will lead to a dead lock. The other problem is that if kzalloc() fails
then this should return -ENOMEM but currently it returns success.
Fixes: e8a60aa7404b ("platform/x86: Introduce support for Systems Management Driver over WMI for Dell Systems")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/20201103101735.GB1127762@mwanda
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
/* build attribute */
attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL);
- if (!attr_name_kobj)
+ if (!attr_name_kobj) {
+ retval = -ENOMEM;
goto err_attr_init;
+ }
attr_name_kobj->kset = tmp_set;
elements = obj ? obj->package.elements : NULL;
}
- goto out;
+ mutex_unlock(&wmi_priv.mutex);
+ return 0;
err_attr_init:
+ mutex_unlock(&wmi_priv.mutex);
release_attributes_data();
kfree(obj);
-out:
- mutex_unlock(&wmi_priv.mutex);
return retval;
}