Hi Dan
> Hello Kuninori Morimoto,
>
> Commit c3a15c92a67b ("ASoC: audio-graph-card2: add Codec2Codec
> support") from Oct 12, 2021 (linux-next), leads to the following
> Smatch static checker warning:
>
> sound/soc/generic/audio-graph-card2.c:1206 graph_count_c2c()
> warn: already decremented on line 1206 'lnk->kobj.kref.refcount.refs.counter'
>
> sound/soc/generic/audio-graph-card2.c
> 1194 static int graph_count_c2c(struct simple_util_priv *priv,
> 1195 struct device_node *lnk,
> 1196 struct link_info *li)
> 1197 {
> 1198 struct device_node *ports = of_get_parent(lnk);
> 1199 struct device_node *port0 = lnk;
> 1200 struct device_node *port1 = of_get_next_child(ports, lnk);
> ^^^
>
> This calls of_node_put() on lnk.
>
> 1201 struct device_node *ep0 = port_to_endpoint(port0);
> 1202 struct device_node *ep1 = port_to_endpoint(port1);
> 1203 struct device_node *codec0 = of_graph_get_remote_port(ep0);
> 1204 struct device_node *codec1 = of_graph_get_remote_port(ep1);
> 1205
> --> 1206 of_node_get(lnk);
>
> So this of_node_get() undoes the put. But if the reference count
> dropped to zero then this would be a use afer free.
Thank you for pointing it.
This "lnk" is used as "port0", and of_node_get(lnk) was for it,
but this function doesn't call of_node_put(port0).
So yes, indeed this of_node_get() is not needed.
Let's remove it.
Thank you for your help !!
Best regards
---
Renesas Electronics
Ph.D. Kuninori Morimoto
[Index of Archives]
[Pulseaudio]
[Linux Audio Users]
[ALSA Devel]
[Fedora Desktop]
[Fedora SELinux]
[Big List of Linux Books]
[Yosemite News]
[KDE Users]