patch "staging: greybus: audio: fix uninitialized value issue" added to staging-linus
Subsystems (4)
This is a note to let you know that I've just added the patch titled
staging: greybus: audio: fix uninitialized value issue
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 1dffeb8b8b4c261c45416d53c75ea51e6ece1770 Mon Sep 17 00:00:00 2001
From: Vaibhav Agarwal <[email protected]>
Date: Fri, 14 Aug 2020 18:03:15 +0530
Subject: staging: greybus: audio: fix uninitialized value issue
The current implementation for gbcodec_mixer_dapm_ctl_put() uses uninitialized gbvalue for comparison with updated value. This was found using static analysis with coverity.
Uninitialized scalar variable (UNINIT)
11. uninit_use: Using uninitialized value
gbvalue.value.integer_value[0].
460 if (gbvalue.value.integer_value[0] != val) {
This patch fixes the issue with fetching the gbvalue before using it for
comparision.
--- drivers/staging/greybus/audio_topology.c | 29 ++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-)
drivers/staging/greybus/audio_topology.c +15 -14
@@ -456,6 +456,15 @@ static int gbcodec_mixer_dapm_ctl_put(struct snd_kcontrol *kcontrol, val = ucontrol->value.integer.value[0 ] & mask; connect = !!val; + ret =gb_pm_runtime_get_sync (bundle); +if (ret) +return ret; + + ret =gb_audio_gb_get_control (module->mgmt_connection, data->ctl_id, +GB_AUDIO_INVALID_INDEX , &gbvalue); +if (ret) + goto exit; +/* update ucontrol */ if (gbvalue.value.integer_value[0 ] != val) {for (wi =0 ; wi < wlist->num_widgets; wi++) {
@@ -466,25 +475,17 @@ static int gbcodec_mixer_dapm_ctl_put(struct snd_kcontrol *kcontrol, gbvalue.value.integer_value[0 ] =cpu_to_le32 (ucontrol->value.integer.value[0 ]); - ret =gb_pm_runtime_get_sync (bundle); -if (ret) -return ret; - ret =gb_audio_gb_set_control (module->mgmt_connection, data->ctl_id,GB_AUDIO_INVALID_INDEX , &gbvalue); - -gb_pm_runtime_put_autosuspend (bundle); - -if (ret) { -dev_err_ratelimited (codec_dev, -"%d:Error in %s for %s\n" , ret, - __func__, kcontrol->id.name); -return ret; - } } -return 0 ; +exit: +gb_pm_runtime_put_autosuspend (bundle); +if (ret) +dev_err_ratelimited (codec_dev,"%d:Error in %s for %s\n" , ret, + __func__, kcontrol->id.name); +return ret; }#define SOC_DAPM_MIXER_GB (xname, kcount, data) \
Signature · 1 line
2.28.0