[alsa-devel] [PATCH 2/2] ASoC: pcm: update module refcount if module_get_upon_open is set

Ranjani Sridharan ranjani.sridharan at linux.intel.com
Fri Apr 5 18:59:49 CEST 2019


On Thu, 2019-04-04 at 20:06 -0700, Ranjani Sridharan wrote:
> Setting the module_get_upon_open field for component driver
> prevents the module refcount from being incremented during
> component probe(). This could lead to the module being
> allowed to be unloaded when a pcm stream is open. So,
> if this field is set, the module's refcount should be
> incremented during pcm open to prevent module removal
> when the component is in use. And, the refcount should
> be decremented upon pcm close.
> 
> Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> ---
>  sound/soc/soc-pcm.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
> index 7fe5321000e8..d84a9a5b14c0 100644
> --- a/sound/soc/soc-pcm.c
> +++ b/sound/soc/soc-pcm.c
> @@ -15,6 +15,7 @@
>  #include <linux/delay.h>
>  #include <linux/pinctrl/consumer.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/module.h>
>  #include <linux/slab.h>
>  #include <linux/workqueue.h>
>  #include <linux/export.h>
> @@ -463,6 +464,9 @@ static int soc_pcm_components_close(struct
> snd_pcm_substream *substream,
>  			continue;
>  
>  		component->driver->ops->close(substream);
> +
> +		if (component->driver->module_get_upon_open)
> +			module_put(component->dev->driver->owner);
I made a minor fix to align the code similar to the one in soc-core.
I've sent a V2 version of the patch set with the fix. Sorry about the
noise.

Thanks,
Ranjani
>  	}
>  
>  	return 0;
> @@ -513,6 +517,10 @@ static int soc_pcm_open(struct snd_pcm_substream
> *substream)
>  		    !component->driver->ops->open)
>  			continue;
>  
> +		if (component->driver->module_get_upon_open)
> +			if (!try_module_get(component->dev->driver-
> >owner))
> +				return -ENODEV;
> +
>  		ret = component->driver->ops->open(substream);
>  		if (ret < 0) {
>  			dev_err(component->dev,



More information about the Alsa-devel mailing list