Message ID | 20241008164707.203792-1-colin.i.king@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [next] ASoC: rt-sdw-common: Fix bit-wise or'ing of values into uninitialized variable ret | expand |
On Tue, Oct 08, 2024 at 05:47:07PM +0100, Colin Ian King wrote: > There are a handful of bit-wise or'ing of values into the uninitialized > variable ret resulting in garbage results. Fix this by ininitializing > ret to zero. I'm very disappinted in the compiler for not noticing this :(
On Tue, Oct 08, 2024 at 06:04:08PM +0100, Mark Brown wrote: > On Tue, Oct 08, 2024 at 05:47:07PM +0100, Colin Ian King wrote: > > There are a handful of bit-wise or'ing of values into the uninitialized > > variable ret resulting in garbage results. Fix this by ininitializing > > ret to zero. > > I'm very disappinted in the compiler for not noticing this :( We disabled GCC's uninitialized variable check years ago before we enabled -Werror. Clang does catch this. CC sound/soc/codecs/rt-sdw-common.o sound/soc/codecs/rt-sdw-common.c:119:3: warning: variable 'ret' is uninitialized when used here [-Wuninitialized] ret |= SND_JACK_BTN_2; ^~~ sound/soc/codecs/rt-sdw-common.c:111:9: note: initialize the variable 'ret' to silence this warning int ret; ^ = 0 regards, dan carpenter
> -----Original Message----- > From: Mark Brown <broonie@kernel.org> > Sent: Wednesday, October 9, 2024 1:04 AM > To: Colin Ian King <colin.i.king@gmail.com> > Cc: Oder Chiou <oder_chiou@realtek.com>; Liam Girdwood > <lgirdwood@gmail.com>; Jaroslav Kysela <perex@perex.cz>; Takashi Iwai > <tiwai@suse.com>; Jack Yu <jack.yu@realtek.com>; > linux-sound@vger.kernel.org; kernel-janitors@vger.kernel.org; > linux-kernel@vger.kernel.org > Subject: Re: [PATCH][next] ASoC: rt-sdw-common: Fix bit-wise or'ing of values > into uninitialized variable ret > > On Tue, Oct 08, 2024 at 05:47:07PM +0100, Colin Ian King wrote: > > There are a handful of bit-wise or'ing of values into the > > uninitialized variable ret resulting in garbage results. Fix this by > > ininitializing ret to zero. > > I'm very disappinted in the compiler for not noticing this :( I'm sorry for such mistake. I've sent a patch to fix this yesterday, please refer attachment. Fix issue of warning messages caused by some variables. Signed-off-by: Jack Yu <jack.yu@realtek.com> --- sound/soc/codecs/rt-sdw-common.c | 2 +- sound/soc/codecs/rt721-sdca.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sound/soc/codecs/rt-sdw-common.c b/sound/soc/codecs/rt-sdw-common.c index 9ed0e9855699..a422da6cf702 100644 --- a/sound/soc/codecs/rt-sdw-common.c +++ b/sound/soc/codecs/rt-sdw-common.c @@ -108,7 +108,7 @@ EXPORT_SYMBOL_GPL(rt_sdca_index_update_bits); int rt_sdca_btn_type(unsigned char *buffer) { u8 btn_type = 0; - int ret; + int ret = 0; btn_type |= buffer[0] & 0xf; btn_type |= (buffer[0] >> 4) & 0xf; diff --git a/sound/soc/codecs/rt721-sdca.c b/sound/soc/codecs/rt721-sdca.c index 36056cb7a3ca..201cb667c8c1 100644 --- a/sound/soc/codecs/rt721-sdca.c +++ b/sound/soc/codecs/rt721-sdca.c @@ -30,7 +30,7 @@ static void rt721_sdca_jack_detect_handler(struct work_struct *work) { struct rt721_sdca_priv *rt721 = container_of(work, struct rt721_sdca_priv, jack_detect_work.work); - int btn_type = 0, ret; + int btn_type = 0; if (!rt721->hs_jack) return; @@ -42,7 +42,7 @@ static void rt721_sdca_jack_detect_handler(struct work_struct *work) if (rt721->scp_sdca_stat1 & SDW_SCP_SDCA_INT_SDCA_6) { rt721->jack_type = rt_sdca_headset_detect(rt721->regmap, RT721_SDCA_ENT_GE49); - if (ret < 0) + if (rt721->jack_type < 0) return; }
diff --git a/sound/soc/codecs/rt-sdw-common.c b/sound/soc/codecs/rt-sdw-common.c index 9ed0e9855699..a422da6cf702 100644 --- a/sound/soc/codecs/rt-sdw-common.c +++ b/sound/soc/codecs/rt-sdw-common.c @@ -101,21 +101,21 @@ EXPORT_SYMBOL_GPL(rt_sdca_index_update_bits); * rt_sdca_btn_type - Decision of button type. * * @buffer: UMP message buffer. * * A button type will be returned regarding to buffer, * it returns zero if buffer cannot be recognized. */ int rt_sdca_btn_type(unsigned char *buffer) { u8 btn_type = 0; - int ret; + int ret = 0; btn_type |= buffer[0] & 0xf; btn_type |= (buffer[0] >> 4) & 0xf; btn_type |= buffer[1] & 0xf; btn_type |= (buffer[1] >> 4) & 0xf; if (btn_type & BIT(0)) ret |= SND_JACK_BTN_2; if (btn_type & BIT(1)) ret |= SND_JACK_BTN_3;
There are a handful of bit-wise or'ing of values into the uninitialized variable ret resulting in garbage results. Fix this by ininitializing ret to zero. Fixes: bbca8e7050e0 ("ASoC: rt-sdw-common: Common functions for Realtek soundwire driver") Signed-off-by: Colin Ian King <colin.i.king@gmail.com> --- sound/soc/codecs/rt-sdw-common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)