Message ID | 20221207065922.2086368-1-linmq006@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] drm/msm/dpu: Fix memory leak in msm_mdss_parse_data_bus_icc_path | expand |
Hi, On Tue, Dec 6, 2022 at 10:59 PM Miaoqian Lin <linmq006@gmail.com> wrote: > > of_icc_get() alloc resources for path1, we should release it when not > need anymore. Early return when IS_ERR_OR_NULL(path0) may leak path1. > Defer getting path1 to fix this. > > Fixes: b9364eed9232 ("drm/msm/dpu: Move min BW request and full BW disable back to mdss") > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> > --- > changes in v2: > - move getting path1 after error check for path0. > --- > drivers/gpu/drm/msm/msm_mdss.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) Reviewed-by: Douglas Anderson <dianders@chromium.org>
On 12/6/2022 10:59 PM, Miaoqian Lin wrote: > of_icc_get() alloc resources for path1, we should release it when not > need anymore. Early return when IS_ERR_OR_NULL(path0) may leak path1. > Defer getting path1 to fix this. > > Fixes: b9364eed9232 ("drm/msm/dpu: Move min BW request and full BW disable back to mdss") > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> > --- > changes in v2: > - move getting path1 after error check for path0. > --- > drivers/gpu/drm/msm/msm_mdss.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c > index e13c5c12b775..3b8d6991b04e 100644 > --- a/drivers/gpu/drm/msm/msm_mdss.c > +++ b/drivers/gpu/drm/msm/msm_mdss.c > @@ -46,15 +46,17 @@ struct msm_mdss { > static int msm_mdss_parse_data_bus_icc_path(struct device *dev, > struct msm_mdss *msm_mdss) > { > - struct icc_path *path0 = of_icc_get(dev, "mdp0-mem"); > - struct icc_path *path1 = of_icc_get(dev, "mdp1-mem"); > + struct icc_path *path0; > + struct icc_path *path1; > > + path0 = of_icc_get(dev, "mdp0-mem"); > if (IS_ERR_OR_NULL(path0)) > return PTR_ERR_OR_ZERO(path0); > > msm_mdss->path[0] = path0; > msm_mdss->num_paths = 1; > > + path1 = of_icc_get(dev, "mdp1-mem"); > if (!IS_ERR_OR_NULL(path1)) { > msm_mdss->path[1] = path1; > msm_mdss->num_paths++;
diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c index e13c5c12b775..3b8d6991b04e 100644 --- a/drivers/gpu/drm/msm/msm_mdss.c +++ b/drivers/gpu/drm/msm/msm_mdss.c @@ -46,15 +46,17 @@ struct msm_mdss { static int msm_mdss_parse_data_bus_icc_path(struct device *dev, struct msm_mdss *msm_mdss) { - struct icc_path *path0 = of_icc_get(dev, "mdp0-mem"); - struct icc_path *path1 = of_icc_get(dev, "mdp1-mem"); + struct icc_path *path0; + struct icc_path *path1; + path0 = of_icc_get(dev, "mdp0-mem"); if (IS_ERR_OR_NULL(path0)) return PTR_ERR_OR_ZERO(path0); msm_mdss->path[0] = path0; msm_mdss->num_paths = 1; + path1 = of_icc_get(dev, "mdp1-mem"); if (!IS_ERR_OR_NULL(path1)) { msm_mdss->path[1] = path1; msm_mdss->num_paths++;
of_icc_get() alloc resources for path1, we should release it when not need anymore. Early return when IS_ERR_OR_NULL(path0) may leak path1. Defer getting path1 to fix this. Fixes: b9364eed9232 ("drm/msm/dpu: Move min BW request and full BW disable back to mdss") Signed-off-by: Miaoqian Lin <linmq006@gmail.com> --- changes in v2: - move getting path1 after error check for path0. --- drivers/gpu/drm/msm/msm_mdss.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)