[PATCH] staging: greybus: audio: do not use iterator after list loop
From: Rahul Rao
Date: Wed Oct 07 2026 - 05:20:41 EST
Using the list iterator variable outside the loop breaks iterator scope
semantics and can result in invalid memory access if the loop completes
without finding a match.
Introduce a dedicated iterator variable 'iter' for traversing
codec->module_list and assign it to 'module' only upon finding a match.
Signed-off-by: Rahul Rao <shreeramrahul94@xxxxxxxxx>
---
drivers/staging/greybus/audio_codec.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/greybus/audio_codec.c b/drivers/staging/greybus/audio_codec.c
index 6daa4e706792..f4c3090684bf 100644
--- a/drivers/staging/greybus/audio_codec.c
+++ b/drivers/staging/greybus/audio_codec.c
@@ -395,7 +395,7 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream,
int ret;
u8 sig_bits, channels;
u32 format, rate;
- struct gbaudio_module_info *module;
+ struct gbaudio_module_info *module = NULL, *iter;
struct gbaudio_data_connection *data;
struct gb_bundle *bundle;
struct gbaudio_codec_info *codec = dev_get_drvdata(dai->dev);
@@ -437,10 +437,12 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream,
format = GB_AUDIO_PCM_FMT_S16_LE;
/* find the data connection */
- list_for_each_entry(module, &codec->module_list, list) {
- data = find_data(module, dai->id);
- if (data)
+ list_for_each_entry(iter, &codec->module_list, list) {
+ data = find_data(iter, dai->id);
+ if (data) {
+ module = iter;
break;
+ }
}
if (!data) {
--
2.43.0