On 21/03/2023 16:16, Dan Carpenter wrote:
On Tue, Mar 21, 2023 at 03:49:19PM +0200, Peter Ujfalusi wrote:
The patch adding the bytes control support moved the error check outside of the list_for_each_entry() which will cause issues when we will have support for multiple controls per widgets.
Even now it causes an issue. We're exiting the list_for_each_entry() without hitting a break statement so the scontrol points to somewhere in the middle of the sdev instead of to a valid scontrol entry.
The scontrol->comp_id will be some garbage value.
I'm not sure what you see ret = 0; list_for_each_entry(scontrol, &sdev->kcontrol_list, list) { if (scontrol->comp_id == swidget->comp_id) { switch (scontrol->info_type) { ... }
if (ret < 0) { /* scontrol is still valid and not changed */ dev_err(); return ret; } } }
I think this is correct, I could have the ret check one level up, but no point of doing it if scontrol->comp_id != swidget->comp_id