diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2017-03-31 18:22:23 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-03-31 17:27:05 +0200 |
commit | a8c006aafead3c45ae5d5601e3717055bccf41bc (patch) | |
tree | c7a685313111ffdc4c3e8e365b4eb849e341447f | |
parent | e8ed68205f39a7a934901eab80a5cbf3a062b7b4 (diff) | |
download | op-kernel-dev-a8c006aafead3c45ae5d5601e3717055bccf41bc.zip op-kernel-dev-a8c006aafead3c45ae5d5601e3717055bccf41bc.tar.gz |
ALSA: timer: Info leak in snd_timer_user_tinterrupt()
The "r1" struct has memory holes. We clear it with memset on one path
where it is used but not the other. Let's just memset it at the start
of the function so it's always safe.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/core/timer.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c index 8b9e794..2f836ca 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -1277,6 +1277,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, struct timespec tstamp; int prev, append = 0; + memset(&r1, 0, sizeof(r1)); memset(&tstamp, 0, sizeof(tstamp)); spin_lock(&tu->qlock); if ((tu->filter & ((1 << SNDRV_TIMER_EVENT_RESOLUTION) | @@ -1292,7 +1293,6 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri, } if ((tu->filter & (1 << SNDRV_TIMER_EVENT_RESOLUTION)) && tu->last_resolution != resolution) { - memset(&r1, 0, sizeof(r1)); r1.event = SNDRV_TIMER_EVENT_RESOLUTION; r1.tstamp = tstamp; r1.val = resolution; |