Linux Sound subsystem development
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Wesley Cheng <quic_wcheng@quicinc.com>
Cc: linux-sound@vger.kernel.org
Subject: [bug report] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support
Date: Tue, 15 Apr 2025 13:47:03 +0300	[thread overview]
Message-ID: <Z_45JyNuBhlwApX_@stanley.mountain> (raw)

Hello Wesley Cheng,

Commit 326bbc348298 ("ALSA: usb-audio: qcom: Introduce QC USB SND
offloading support") from Apr 9, 2025 (linux-next), leads to the
following Smatch static checker warning:

	sound/usb/qcom/qc_audio_offload.c:785 qmi_stop_session()
	error: we previously assumed 'chip' could be null (see line 761)

sound/usb/qcom/qc_audio_offload.c
    737 static void qmi_stop_session(void)
    738 {
    739         struct snd_usb_substream *subs;
    740         struct usb_host_endpoint *ep;
    741         struct snd_usb_audio *chip;
    742         struct intf_info *info;
    743         int pcm_card_num;
    744         int if_idx;
    745         int idx;
    746 
    747         mutex_lock(&qdev_mutex);
    748         /* find all active intf for set alt 0 and cleanup usb audio dev */
    749         for (idx = 0; idx < SNDRV_CARDS; idx++) {
    750                 if (!atomic_read(&uadev[idx].in_use))
    751                         continue;
    752 
    753                 chip = uadev[idx].chip;

We should check if chip is NULL here

    754                 for (if_idx = 0; if_idx < uadev[idx].num_intf; if_idx++) {
    755                         if (!uadev[idx].info || !uadev[idx].info[if_idx].in_use)
    756                                 continue;
    757                         info = &uadev[idx].info[if_idx];
    758                         pcm_card_num = info->pcm_card_num;
    759                         subs = find_substream(pcm_card_num, info->pcm_dev_num,
    760                                               info->direction);
    761                         if (!subs || !chip || atomic_read(&chip->shutdown)) {
                                              ^^^^
Instead of here.

    762                                 dev_err(&subs->dev->dev,
    763                                         "no sub for c#%u dev#%u dir%u\n",
    764                                         info->pcm_card_num,
    765                                         info->pcm_dev_num,
    766                                         info->direction);
    767                                 continue;
    768                         }
    769                         /* Release XHCI endpoints */
    770                         if (info->data_ep_pipe)
    771                                 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev,
    772                                                        info->data_ep_pipe);
    773                         xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, ep);
    774 
    775                         if (info->sync_ep_pipe)
    776                                 ep = usb_pipe_endpoint(uadev[pcm_card_num].udev,
    777                                                        info->sync_ep_pipe);
    778                         xhci_sideband_remove_endpoint(uadev[pcm_card_num].sb, ep);
    779 
    780                         disable_audio_stream(subs);
    781                 }
    782                 atomic_set(&uadev[idx].in_use, 0);
    783                 mutex_lock(&chip->mutex);
                                    ^^^^^
If it is NULL this will crash.

    784                 uaudio_dev_cleanup(&uadev[idx]);
--> 785                 mutex_unlock(&chip->mutex);
    786         }
    787         mutex_unlock(&qdev_mutex);
    788 }

regards,
dan carpenter

             reply	other threads:[~2025-04-15 10:47 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-15 10:47 Dan Carpenter [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-04-15 10:46 [bug report] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Dan Carpenter
2025-04-15 10:46 Dan Carpenter
2025-04-15 10:45 Dan Carpenter
2025-04-15 10:27 Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z_45JyNuBhlwApX_@stanley.mountain \
    --to=dan.carpenter@linaro.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=quic_wcheng@quicinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox