Message ID | 20191127110622.26105-1-andrew_gabbasov@mentor.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ALSA: aloop: Avoid pointer dereference before null-check | expand |
On Wed, 27 Nov 2019 12:06:22 +0100, Andrew Gabbasov wrote: > > Static analysis tools (cppcheck and PVS Studio) report an error > in loopback_snd_timer_period_elapsed() regarding dpcm_play pointer > dereference earlier than its null-check. And although this is a result > of a formal check, and the pointer correctness is also protected > by having a corresponding bit set in the "running" mask, re-ordering > of the lines can imake the code even formally correct and eliminate > those static analysis error reports. > > Fixes: 26c53379f98d ("ALSA: aloop: Support selection of snd_timer instead of jiffies") > Reported-by: Eugeniu Rosca <erosca@de.adit-jv.com> > Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com> Applied, thanks. Takashi
diff --git a/sound/drivers/aloop.c b/sound/drivers/aloop.c index 0ebfbe70db00..6bb46423f5ae 100644 --- a/sound/drivers/aloop.c +++ b/sound/drivers/aloop.c @@ -727,10 +727,6 @@ static void loopback_snd_timer_period_elapsed(struct loopback_cable *cable, dpcm_play = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]; dpcm_capt = cable->streams[SNDRV_PCM_STREAM_CAPTURE]; - substream_play = (running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) ? - dpcm_play->substream : NULL; - substream_capt = (running & (1 << SNDRV_PCM_STREAM_CAPTURE)) ? - dpcm_capt->substream : NULL; if (event == SNDRV_TIMER_EVENT_MSTOP) { if (!dpcm_play || @@ -741,6 +737,10 @@ static void loopback_snd_timer_period_elapsed(struct loopback_cable *cable, } } + substream_play = (running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) ? + dpcm_play->substream : NULL; + substream_capt = (running & (1 << SNDRV_PCM_STREAM_CAPTURE)) ? + dpcm_capt->substream : NULL; valid_runtime = (running & (1 << SNDRV_PCM_STREAM_PLAYBACK)) ? dpcm_play->substream->runtime : dpcm_capt->substream->runtime;
Static analysis tools (cppcheck and PVS Studio) report an error in loopback_snd_timer_period_elapsed() regarding dpcm_play pointer dereference earlier than its null-check. And although this is a result of a formal check, and the pointer correctness is also protected by having a corresponding bit set in the "running" mask, re-ordering of the lines can imake the code even formally correct and eliminate those static analysis error reports. Fixes: 26c53379f98d ("ALSA: aloop: Support selection of snd_timer instead of jiffies") Reported-by: Eugeniu Rosca <erosca@de.adit-jv.com> Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com> --- sound/drivers/aloop.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)