Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
sys/uvideo: fix crash on close isochronous endpoint's webcam
To:
OpenBSD tech <tech@openbsd.org>
Cc:
Marcus Glocker <mglocker@openbsd.org>
Date:
Thu, 06 Mar 2025 09:12:55 +0100

Download raw body.

Thread
tech@,

I'd like to fix a crash in uvide when I detach my Elgato webcam when
it's streamming.

uvideo_vs_close is called from videoclose and by VIDIOC_STREAMOFF. When
it's happened on detached webcam with isochronous endpoint, the system
crashes inside usbd_set_interface.

Ok?

Index: sys/dev/usb/uvideo.c
===================================================================
RCS file: /home/cvs/src/sys/dev/usb/uvideo.c,v
diff -u -p -r1.249 uvideo.c
--- sys/dev/usb/uvideo.c	4 Mar 2025 22:59:01 -0000	1.249
+++ sys/dev/usb/uvideo.c	5 Mar 2025 22:40:46 -0000
@@ -2169,8 +2163,9 @@ uvideo_vs_close(struct uvideo_softc *sc)
 		 */
 		usbd_delay_ms(sc->sc_udev, 100);
 
-		/* switch back to default interface (turns off cam LED) */
-		(void)usbd_set_interface(sc->sc_vs_cur->ifaceh, 0);
+		if (!usbd_is_dying(sc->sc_udev))
+			/* switch back to default interface (turns off cam LED) */
+			(void)usbd_set_interface(sc->sc_vs_cur->ifaceh, 0);
 	}
 }