Re: [PATCH v2] media: pci: cx88: Fix missing pci_disable_device() when cx88_core_get() returns null

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

 



On 05/12/2022 14:13, gaochao wrote:
> From: Gao Chao <gaochao49@xxxxxxxxxx>
> 
> commit a8782f669c35 ("V4L/DVB (9796): drivers/media/video/cx88/cx88-alsa.c:
> Adjust error-handling code") added fail path. However, when cx88_core_get()
> returns null with chip->pci has not been setted, snd_cx88_dev_free() won't
> call a valid pci_disable_device() due to invalid chip->pci. Move the
> assignment of chip->pci forward to ensure snd_cx88_dev_free() can get
> valid chip->pci.
> 
> Fixes: b7f355d23c34 ("V4L/DVB (3293): Added digital support for cx88 (cx88-alsa)")
> Signed-off-by: Gao Chao <gaochao49@xxxxxxxxxx>
> 
> v2:
> - move the assignment of chip->pci after chip = card->private_data
> ---
>  drivers/media/pci/cx88/cx88-alsa.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --
> 2.17.1
> 
> diff --git a/drivers/media/pci/cx88/cx88-alsa.c b/drivers/media/pci/cx88/cx88-alsa.c
> index 29fb1311e443..22fe8c48a853 100644
> --- a/drivers/media/pci/cx88/cx88-alsa.c
> +++ b/drivers/media/pci/cx88/cx88-alsa.c
> @@ -861,6 +861,7 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci,
>  	pci_set_master(pci);
> 
>  	chip = card->private_data;
> +	chip->pci = pci;

This isn't sufficient. If the pci_enable_device fails, then this function
also returns an error and chip->pci is still not set.

The same problem actually occurs with chip->core: this too is used in snd_cx88_dev_free,
and it is set much later.

Regards,

	Hans

> 
>  	core = cx88_core_get(pci);
>  	if (!core) {
> @@ -877,7 +878,6 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci,
> 
>  	/* pci init */
>  	chip->card = card;
> -	chip->pci = pci;
>  	chip->irq = -1;
>  	spin_lock_init(&chip->reg_lock);
> 




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux