DragonFlyBSD Kernel Audit
DF-1260 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -1310,7 +1310,11 @@
 				p->formats |= (dsp_get_flags(i_dev) & SD_F_SIMPLEX)? 0 : AFMT_FULLDUPLEX;
 			pdev = d->mixer_dev;
 	    		p->mixers = 1; /* default: one mixer */
-	    		p->inputs = pdev->si_drv1? mix_getdevs(pdev->si_drv1) : 0;
+	    		/* Guard pdev itself, not only pdev->si_drv1 (DF-1260):
+	    		 * mixer_dev can be NULL if mixer_init failed or during a
+	    		 * detach race; all sibling ioctls already check it. */
+	    		p->inputs = (pdev != NULL && pdev->si_drv1 != NULL)
+	    			? mix_getdevs(pdev->si_drv1) : 0;
 	    		p->left = p->right = 100;
 			if (wrch)
 				CHN_UNLOCK(wrch);