• Takashi Iwai's avatar
    ALSA: control: Fix racy management of user ctl memory size account · 998f26f4
    Takashi Iwai authored
    We've got a report about the possible race in the user control element
    counts (card->user_ctl_count), and it was confirmed that the race
    wasn't serious in the old code up to 5.12.  There, the value
    modification itself was exclusive and protected via a write semaphore,
    hence it's at most concurrent reads and evaluations before the
    increment.  Since it's only about the soft-limit to avoid the
    exhausting memory usage, one-off isn't a big problem at all.
    
    Meanwhile, the relevant code has been largely modified recently, and
    now card->user_ctl_count was replaced with card->user_ctl_alloc_size,
    and a few more places were added to access this field.  And, in this
    new code, it turned out to be more serious: the modifications are
    scattered in various places, and a few of them are without protection.
    It implies that it may lead to an inconsistent value by racy
    accesses.
    
    For addressing it, this patch extends the range covered by the
    card->controls_rwsem write lock at snd_ctl_elem_add() so that the all
    code paths that modify and refer to card->user_ctl_alloc_size are
    protected by the rwsem properly.
    
    The patch adds also comments in a couple of functions to indicate that
    they are under the rwsem lock.
    
    Fixes: 66c6d1ef ("ALSA: control: Add memory consumption limit to user controls")
    Link: https://lore.kernel.org/r/FEEBF384-44BE-42CF-8FB3-93470933F64F@purdue.edu
    Link: https://lore.kernel.org/r/20210415131856.13113-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    998f26f4
control.c 60.2 KB