media: usbtv: prevent access to free'd resources
[firefly-linux-kernel-4.4.55.git] / drivers / media / usb / usbtv / usbtv-audio.c
index 78c12d22dfbb923d5c928bf42b0ed2a3a717ca2a..5dab02432e821af3d4750b923f55f0fe0cc20aa6 100644 (file)
@@ -278,6 +278,9 @@ static void snd_usbtv_trigger(struct work_struct *work)
 {
        struct usbtv *chip = container_of(work, struct usbtv, snd_trigger);
 
+       if (!chip->snd)
+               return;
+
        if (atomic_read(&chip->snd_stream))
                usbtv_audio_start(chip);
        else
@@ -378,6 +381,8 @@ err:
 
 void usbtv_audio_free(struct usbtv *usbtv)
 {
+       cancel_work_sync(&usbtv->snd_trigger);
+
        if (usbtv->snd && usbtv->udev) {
                snd_card_free(usbtv->snd);
                usbtv->snd = NULL;