git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ALSA: timer: Fix leak in events via snd_timer_user_ccallback
[pandora-kernel.git]
/
sound
/
core
/
timer.c
diff --git
a/sound/core/timer.c
b/sound/core/timer.c
index
beb41ec
..
08a38be
100644
(file)
--- a/
sound/core/timer.c
+++ b/
sound/core/timer.c
@@
-1017,8
+1017,8
@@
static int snd_timer_s_start(struct snd_timer * timer)
njiff += timer->sticks - priv->correction;
priv->correction = 0;
}
njiff += timer->sticks - priv->correction;
priv->correction = 0;
}
- priv->last_expires =
priv->tlist.expires =
njiff;
-
add_timer(&priv->tlist
);
+ priv->last_expires = njiff;
+
mod_timer(&priv->tlist, njiff
);
return 0;
}
return 0;
}
@@
-1213,6
+1213,7
@@
static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
tu->tstamp = *tstamp;
if ((tu->filter & (1 << event)) == 0 || !tu->tread)
return;
tu->tstamp = *tstamp;
if ((tu->filter & (1 << event)) == 0 || !tu->tread)
return;
+ memset(&r1, 0, sizeof(r1));
r1.event = event;
r1.tstamp = *tstamp;
r1.val = resolution;
r1.event = event;
r1.tstamp = *tstamp;
r1.val = resolution;
@@
-1712,6
+1713,7
@@
static int snd_timer_user_params(struct file *file,
if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
if (tu->tread) {
struct snd_timer_tread tread;
if (tu->timeri->flags & SNDRV_TIMER_IFLG_EARLY_EVENT) {
if (tu->tread) {
struct snd_timer_tread tread;
+ memset(&tread, 0, sizeof(tread));
tread.event = SNDRV_TIMER_EVENT_EARLY;
tread.tstamp.tv_sec = 0;
tread.tstamp.tv_nsec = 0;
tread.event = SNDRV_TIMER_EVENT_EARLY;
tread.tstamp.tv_sec = 0;
tread.tstamp.tv_nsec = 0;
@@
-1923,6
+1925,7
@@
static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
qhead = tu->qhead++;
tu->qhead %= tu->queue_size;
qhead = tu->qhead++;
tu->qhead %= tu->queue_size;
+ tu->qused--;
spin_unlock_irq(&tu->qlock);
if (tu->tread) {
spin_unlock_irq(&tu->qlock);
if (tu->tread) {
@@
-1936,7
+1939,6
@@
static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
}
spin_lock_irq(&tu->qlock);
}
spin_lock_irq(&tu->qlock);
- tu->qused--;
if (err < 0)
goto _error;
result += unit;
if (err < 0)
goto _error;
result += unit;