aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Ian King2019-12-20 22:05:26 +0000
committerGreg Kroah-Hartman2020-01-14 15:37:41 +0100
commit704a940d551c9946bce3fdd661e00a6370c40522 (patch)
tree27e982aed465eff3502b9a44c2ed20fa66ca9ab1
parent845f081002eebd7a1216fc0a5ef2c862dc6d093e (diff)
thunderbolt: fix memory leak of object sw
In the case where the call tb_switch_exceeds_max_depth is true the error reurn path leaks memory in sw. Fix this by setting the return error code to -EADDRNOTAVAIL and returning via the error exit path err_free_sw_ports to free sw. sw has been kzalloc'd so the free of the NULL sw->ports is fine. Addresses-Coverity: ("Resource leak") Fixes: b04079837b20 ("thunderbolt: Add initial support for USB4") Signed-off-by: Colin Ian King <colin.king@canonical.com> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Link: https://lore.kernel.org/r/20191220220526.11307-1-colin.king@canonical.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/thunderbolt/switch.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index 3454e6154958..ad5479f21174 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -1885,8 +1885,10 @@ struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
sw->config.enabled = 0;
/* Make sure we do not exceed maximum topology limit */
- if (tb_switch_exceeds_max_depth(sw, depth))
- return ERR_PTR(-EADDRNOTAVAIL);
+ if (tb_switch_exceeds_max_depth(sw, depth)) {
+ ret = -EADDRNOTAVAIL;
+ goto err_free_sw_ports;
+ }
/* initialize ports */
sw->ports = kcalloc(sw->config.max_port_number + 1, sizeof(*sw->ports),