Re: [PATCH v6 05/14] platform/x86: dell-wmi-descriptor: split WMI descriptor into it's own driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday 09 October 2017 17:51:43 Mario Limonciello wrote:
> +bool dell_wmi_get_interface_version(u32 *version)
> +{
> +	struct descriptor_priv *priv;
> +
> +	priv = list_first_entry_or_null(&wmi_list,
> +					struct descriptor_priv,
> +					list);
> +	if (!priv)
> +		return false;

This introduce race condition. In case callee of this function is
executed before binding 8D9DDCBC-A997-11DA-B012-B622A1EF5492 WMI device
into this dell-wmi-descriptor driver, then this function
dell_wmi_get_interface_version() returns false. Even it is running on
supported machine.

Loading of modulus and also binding devices to drivers (registered by
modules) is is asynchronous.

In case everything is linked into vmlinux binary, this problem could
happen too. Binding & initialization of WMI device to this driver can be
postponed and callee (dell-wmi) would get false.

> +	*version = priv->interface_version;
> +	return true;
> +}
> +EXPORT_SYMBOL_GPL(dell_wmi_get_interface_version);
> +
> +bool dell_wmi_get_size(u32 *size)
> +{
> +	struct descriptor_priv *priv;
> +
> +	priv = list_first_entry_or_null(&wmi_list,
> +					struct descriptor_priv,
> +					list);
> +	if (!priv)
> +		return false;

And same there.

> +	*size = priv->size;
> +	return true;
> +}
> +EXPORT_SYMBOL_GPL(dell_wmi_get_size);

-- 
Pali Rohár
pali.rohar@xxxxxxxxx



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux