• Takashi Sakamoto's avatar
    ALSA: control: Add memory consumption limit to user controls · 66c6d1ef
    Takashi Sakamoto authored
    ALSA control interface allows users to add arbitrary control elements
    (called "user controls" or "user elements"), and its resource usage is
    limited just by the max number of control sets (currently 32).  This
    limit, however, is quite loose: each allocation of control set may
    have 1028 elements, and each element may have up to 512 bytes (ILP32) or
    1024 bytes (LP64) of value data. Moreover, each control set may contain
    the enum strings and TLV data, which can be up to 64kB and 128kB,
    respectively.  Totally, the whole memory consumption may go over 38MB --
    it's quite large, and we'd rather like to reduce the size.
    
    OTOH, there have been other requests even to increase the max number
    of user elements; e.g. ALSA firewire stack require the more user
    controls, hence we want to raise the bar, too.
    
    For satisfying both requirements, this patch changes the management of
    user controls: instead of setting the upper limit of the number of
    user controls, we check the actual memory allocation size and set the
    upper limit of the total allocation in bytes.  As long as the memory
    consumption stays below the limit, more user controls are allowed than
    the current limit 32. At the same time, we set the lower limit (8MB)
    as default than the current theoretical limit, in order to lower the
    risk of DoS.
    
    As a compromise for lowering the default limit, now the actual memory
    limit is defined as a module option, 'max_user_ctl_alloc_size', so that
    user can increase/decrease the limit if really needed, too.
    
    Link: https://lore.kernel.org/r/s5htur3zl5e.wl-tiwai@suse.deCo-developed-by: default avatarTakashi Iwai <tiwai@suse.de>
    Reviewed-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Tested-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20210408103149.40357-1-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    66c6d1ef
core.h 13.6 KB