ALSA: timer: Fix leak in events via snd_timer_user_tinterrupt 56/154956/1
authorKangjie Lu <kangjielu@gmail.com>
Tue, 3 May 2016 20:44:32 +0000 (16:44 -0400)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 11 Oct 2017 12:32:08 +0000 (21:32 +0900)
commit e4ec8cc8039a7063e24204299b462bd1383184a5 upstream.

The stack object â\80\9cr1â\80\9d has a total size of 32 bytes. Its field
â\80\9ceventâ\80\9d and â\80\9cvalâ\80\9d both contain 4 bytes padding. These 8 bytes
padding bytes are sent to user without being initialized.

Signed-off-by: Kangjie Lu <kjlu@gatech.edu>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Willy Tarreau <w@1wt.eu>
[sw0312.kim: cherry-pick from linux-3.10.y to fix CVE-2016-4578]
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Change-Id: I19dd2f10f3bac21d77b74d439191f8804b242e10

sound/core/timer.c

index 1c340e7..b9cbf20 100644 (file)
@@ -1219,6 +1219,7 @@ 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;