Messages in this thread | | | Date | Sun, 27 Mar 2022 07:22:27 -0700 | Subject | Re: [PATCH] device: fix missing check on list iterator | From | Guenter Roeck <> |
| |
On 3/26/22 23:59, Xiaomeng Tong wrote: > On Sat, 26 Mar 2022 22:38:05 -0700, Guenter Roeck <linux@roeck-us.net> wrote: >>> @@ -103,11 +103,16 @@ nvkm_control_mthd_pstate_attr(struct nvkm_control *ctrl, void *data, u32 size) >>> return -EINVAL; >>> >>> if (args->v0.state != NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT) { >>> - list_for_each_entry(pstate, &clk->states, head) { >>> - if (i++ == args->v0.state) >>> + list_for_each_entry(iter, &clk->states, head) { >>> + if (i++ == args->v0.state) { >>> + pstate = iter; >> >> Is iter and the assignment really necessary ? Unless I am missing something, >> list_for_each_entry() always assigns pos (pstate/iter), even if the list is >> empty. If nothing is found, pstate would be NULL at the end, so > > the pstate will not be NULL at the end! so the assignment is necessary! > #define list_for_each_entry(pos, head, member) \ > for (pos = __container_of((head)->next, pos, member); \ > &pos->member != (head); \ > pos = __container_of(pos->member.next, pos, member)) >
Uuh, yes, you are correct. Sorry for the noise.
Guenter
| |