| From 93b10c46755d28d2a36e3b5d6265c7db5ad9ce30 Mon Sep 17 00:00:00 2001 |
| From: Wen Yang <wen.yang99@zte.com.cn> |
| Date: Thu, 4 Apr 2019 00:04:11 +0800 |
| Subject: drm/msm: a5xx: fix possible object reference leak |
| |
| [ Upstream commit 6cd5235c3135ea84b32469ea51b2aae384eda8af ] |
| |
| The call to of_get_child_by_name returns a node pointer with refcount |
| incremented thus it must be explicitly decremented after the last |
| usage. |
| |
| Detected by coccinelle with the following warnings: |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:57:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 47, but without a corresponding object release within this function. |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:66:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 47, but without a corresponding object release within this function. |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:118:1-7: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 47, but without a corresponding object release within this function. |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:57:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 51, but without a corresponding object release within this function. |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:66:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 51, but without a corresponding object release within this function. |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c:118:1-7: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 51, but without a corresponding object release within this function. |
| |
| Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> |
| Cc: Rob Clark <robdclark@gmail.com> |
| Cc: Sean Paul <sean@poorly.run> |
| Cc: David Airlie <airlied@linux.ie> |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: Jordan Crouse <jcrouse@codeaurora.org> |
| Cc: Mamta Shukla <mamtashukla555@gmail.com> |
| Cc: Thomas Zimmermann <tzimmermann@suse.de> |
| Cc: Sharat Masetty <smasetty@codeaurora.org> |
| Cc: linux-arm-msm@vger.kernel.org |
| Cc: dri-devel@lists.freedesktop.org |
| Cc: freedreno@lists.freedesktop.org |
| Cc: linux-kernel@vger.kernel.org (open list) |
| Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org> |
| Signed-off-by: Rob Clark <robdclark@gmail.com> |
| Signed-off-by: Rob Clark <robdclark@chromium.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c |
| index d5f5e56422f57..270da14cba673 100644 |
| --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c |
| +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c |
| @@ -34,7 +34,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname) |
| { |
| struct device *dev = &gpu->pdev->dev; |
| const struct firmware *fw; |
| - struct device_node *np; |
| + struct device_node *np, *mem_np; |
| struct resource r; |
| phys_addr_t mem_phys; |
| ssize_t mem_size; |
| @@ -48,11 +48,13 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname) |
| if (!np) |
| return -ENODEV; |
| |
| - np = of_parse_phandle(np, "memory-region", 0); |
| - if (!np) |
| + mem_np = of_parse_phandle(np, "memory-region", 0); |
| + of_node_put(np); |
| + if (!mem_np) |
| return -EINVAL; |
| |
| - ret = of_address_to_resource(np, 0, &r); |
| + ret = of_address_to_resource(mem_np, 0, &r); |
| + of_node_put(mem_np); |
| if (ret) |
| return ret; |
| |
| -- |
| 2.20.1 |
| |