[alsa-devel] [PATCH] Revert "ALSA: echoaudio: purge contradictions between dimension matrix members and total number of members"

Takashi Iwai tiwai at suse.de
Mon Oct 2 14:31:48 CEST 2017


On Tue, 26 Sep 2017 02:11:49 +0200,
Takashi Sakamoto wrote:
> 
> This reverts commit 275353bb684e to fix a regression which can abort
> 'alsactl' program in alsa-utils due to assertion in alsa-lib.
> 
> alsactl: control.c:2513: snd_ctl_elem_value_get_integer: Assertion `idx < sizeof(obj->value.integer.value) / sizeof(obj->value.integer.value[0])' failed.
> 
> alsactl: control.c:2976: snd_ctl_elem_value_get_integer: Assertion `idx < ARRAY_SIZE(obj->value.integer.value)' failed.
> 
> This commit is a band-aid. In a point of usage of ALSA control interface,
> the drivers still bring an issue that they prevent userspace applications
> to have a consistent way to parse each levels of the dimension information
> via ALSA control interface.
> 
> Let me investigate this issue. Current implementation of the drivers
> have three control element sets with dimension information:
>  * 'Monitor Mixer Volume' (type: integer)
>  * 'VMixer Volume' (type: integer)
>  * 'VU-meters' (type: boolean)
> 
> Although the number of elements named as 'Monitor Mixer Volume' differs
> depending on drivers in this group, it can be calculated by macros
> defined by each driver (= (BX_NUM - BX_ANALOG_IN) * BX_ANALOG_IN). Each
> of the elements has one member for value and has dimension information
> with 2 levels (= BX_ANALOG_IN * (BX_NUM - BX_ANALOG_IN)). For these
> elements, userspace applications are expected to handle the dimension
> information so that all of the elements construct a matrix where the
> number of rows and columns are represented by the dimension information.
> 
> The same way is applied to elements named as 'VMixer Volume'. The number
> of these elements can also be calculated by macros defined by each
> drivers (= PX_ANALOG_IN * BX_ANALOG_IN). Each of the element has one
> member for value and has dimension information with 2 levels
> (= BX_ANALOG_IN * PX_ANALOG_IN). All of the elements construct a matrix
> with the dimension information.
> 
> An element named as 'VU-meters' gets a different way in a point of
> dimension information. The element includes 96 members for value. The
> element has dimension information with 3 levels (= 3 or 2 * 16 * 2). For
> this element, userspace applications are expected to handle the dimension
> information so that all of the members for value construct a matrix
> where the number of rows and columns are represented by the dimension
> information. This is different from the way for the former.
> 
> As a summary, the drivers were not designed to produce a consistent way to
> parse the dimension information. This makes it hard for general userspace
> applications such as amixer to parse the information by a consistent way,
> and actually no userspace applications except for 'echomixer' utilize the
> dimension information. Additionally, no drivers excluding this group use
> the information.
> 
> The reverted commit was written based on the latter way. A commit
> 860c1994a70a ('ALSA: control: add dimension validator for userspace
> elements') is written based on the latter way, too. The patch should be
> reconsider too in the same time to re-define a consistent way to parse the
> dimension information.
> 
> Reported-by: Mark Hills <mark at xwax.org>
> Reported-by: S. Christian Collins <s.chriscollins at gmail.com>
> Fixes: 275353bb684e ('ALSA: echoaudio: purge contradictions between dimension matrix members and total number of members')
> Cc: <stable at vger.kernel.org> # v4.8+
> Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>

Applied now.  Thanks.


Takashi


More information about the Alsa-devel mailing list