| From 38468a5a4c95f5debd6b64ecd35f9447fded43c7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 10 Nov 2020 15:28:25 +1300 |
| Subject: of/address: Fix of_node memory leak in of_dma_is_coherent |
| |
| From: Evan Nimmo <evan.nimmo@alliedtelesis.co.nz> |
| |
| [ Upstream commit a5bea04fcc0b3c0aec71ee1fd58fd4ff7ee36177 ] |
| |
| Commit dabf6b36b83a ("of: Add OF_DMA_DEFAULT_COHERENT & select it on |
| powerpc") added a check to of_dma_is_coherent which returns early |
| if OF_DMA_DEFAULT_COHERENT is enabled. This results in the of_node_put() |
| being skipped causing a memory leak. Moved the of_node_get() below this |
| check so we now we only get the node if OF_DMA_DEFAULT_COHERENT is not |
| enabled. |
| |
| Fixes: dabf6b36b83a ("of: Add OF_DMA_DEFAULT_COHERENT & select it on powerpc") |
| Signed-off-by: Evan Nimmo <evan.nimmo@alliedtelesis.co.nz> |
| Link: https://lore.kernel.org/r/20201110022825.30895-1-evan.nimmo@alliedtelesis.co.nz |
| Signed-off-by: Rob Herring <robh@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/of/address.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/of/address.c b/drivers/of/address.c |
| index 37619bb2c97ad..d188eacbd3b80 100644 |
| --- a/drivers/of/address.c |
| +++ b/drivers/of/address.c |
| @@ -901,11 +901,13 @@ EXPORT_SYMBOL_GPL(of_dma_get_range); |
| */ |
| bool of_dma_is_coherent(struct device_node *np) |
| { |
| - struct device_node *node = of_node_get(np); |
| + struct device_node *node; |
| |
| if (IS_ENABLED(CONFIG_OF_DMA_DEFAULT_COHERENT)) |
| return true; |
| |
| + node = of_node_get(np); |
| + |
| while (node) { |
| if (of_property_read_bool(node, "dma-coherent")) { |
| of_node_put(node); |
| -- |
| 2.27.0 |
| |