DF-1260 / fix.diff
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); |