media: i2c: tvp5150: Add of_node_put() before goto
authorNishka Dasgupta <nishkadg.linux@gmail.com>
Tue, 9 Jul 2019 17:26:40 +0000 (14:26 -0300)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Tue, 13 Aug 2019 14:50:04 +0000 (11:50 -0300)
Each iteration of for_each_available_child_of_node puts the previous
node, but in the case of a goto from the middle of the loop, there is
no put, thus causing a memory leak. Hence add an of_node_put before the
goto in four places.
Issue found with Coccinelle.

Signed-off-by: Nishka Dasgupta <nishkadg.linux@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/i2c/tvp5150.c

index eaddd977ba40edaebcfce2c3f79cc4e7d7c2ea3d..dffe357e9f7ad173215231dfacafb7247a557bdc 100644 (file)
@@ -1636,11 +1636,13 @@ static int tvp5150_parse_dt(struct tvp5150 *decoder, struct device_node *np)
                        dev_err(decoder->sd.dev,
                                 "missing type property in node %pOFn\n",
                                 child);
+                       of_node_put(child);
                        goto err_connector;
                }
 
                if (input_type >= TVP5150_INPUT_NUM) {
                        ret = -EINVAL;
+                       of_node_put(child);
                        goto err_connector;
                }
 
@@ -1651,6 +1653,7 @@ static int tvp5150_parse_dt(struct tvp5150 *decoder, struct device_node *np)
                        dev_err(decoder->sd.dev,
                                 "input %s with same type already exists\n",
                                 input->name);
+                       of_node_put(child);
                        ret = -EINVAL;
                        goto err_connector;
                }
@@ -1672,6 +1675,7 @@ static int tvp5150_parse_dt(struct tvp5150 *decoder, struct device_node *np)
                        dev_err(decoder->sd.dev,
                                 "missing label property in node %pOFn\n",
                                 child);
+                       of_node_put(child);
                        goto err_connector;
                }