All of lore.kernel.org
 help / color / mirror / Atom feed
From: <wen.yang99@zte.com.cn>
To: <qiang.zhao@nxp.com>
Cc: wang.yi59@zte.com.cn, zhong.weidong@zte.com.cn,
	linux-kernel@vger.kernel.org, leoyang.li@nxp.com,
	julia.lawall@lip6.fr, linuxppc-dev@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re:RE: [PATCH] soc/fsl/qe: fix err handling of ucc_of_parse_tdm
Date: Tue, 25 Dec 2018 10:53:06 +0800 (CST)	[thread overview]
Message-ID: <201812251053063773660@zte.com.cn> (raw)
In-Reply-To: <VI1PR04MB3247C250649F9CB3490D83A491B40@VI1PR04MB3247.eurprd04.prod.outlook.com>


[-- Attachment #1.1: Type: text/plain, Size: 5421 bytes --]

Hi Qiang,  
Thank you, we'll send a new version to fix this.

Best regards,
  Wen

------------------Original Mail------------------
Sender: QiangZhao <qiang.zhao@nxp.com>
To: wang yi10129963;
CC: zhong weidong10001088;lkml <linux-kernel@vger.kernel.org>julia.lawall@lip6.fr <julia.lawall@lip6.fr>linuxppc-dev <linuxppc-dev@lists.ozlabs.org>wen yang10156314;moderatedlist:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE <linux-arm-kernel@lists.infradead.org>Leo Li <leoyang.li@nxp.com>
Date: 2018/12/25 09:58
Subject: RE: [PATCH] soc/fsl/qe: fix err handling of ucc_of_parse_tdm
Hi Wen,

Will you send another version to resolve the issue described in the comments?

BR
Qiang

> -----Original Message-----
> From: Li Yang <leoyang.li@nxp.com>
> Sent: 2018年12月6日 4:10
> To: wang.yi59@zte.com.cn
> Cc: Qiang Zhao <qiang.zhao@nxp.com>; zhong.weidong@zte.com.cn; lkml
> <linux-kernel@vger.kernel.org>; julia.lawall@lip6.fr; linuxppc-dev
> <linuxppc-dev@lists.ozlabs.org>; wen.yang99@zte.com.cn; moderated
> list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
> <linux-arm-kernel@lists.infradead.org>
> Subject: Re: [PATCH] soc/fsl/qe: fix err handling of ucc_of_parse_tdm
>
> On Thu, Nov 22, 2018 at 2:42 PM Yi Wang <wang.yi59@zte.com.cn> wrote:
> >
> > From: Wen Yang <wen.yang99@zte.com.cn>
> >
> > Currently there are 2 problems with the ucc_of_parse_tdm function:
> > 1,a possible null pointer dereference in ucc_of_parse_tdm, detected by
> > the semantic patch deref_null.cocci, with the following warning:
> > drivers/soc/fsl/qe/qe_tdm.c:177:21-24: ERROR: pdev is NULL but
> dereferenced.
> > 2,dev gets modified, so in any case that devm_iounmap() will fail even
> > when the new pdev is valid, because the iomap was done with a different
> pdev.
> > This patch fixes them.
>
> While we are at this, I think this logic need more serious fixing.  I see there is
> no driver bind with the "fsl,t1040-qe-si" or "fsl,t1040-qe-siram" device.  So
> allocating resources using devm_*() with these devices won't provide a
> cleanup path for these resources when the caller fails.  I think we should
> probably allocate resource under device of caller (e.g. ucc-hdlc), so that when
> caller probe fails or is removed it will trigger the cleanup.
>
> >
> > Suggested-by: Christophe LEROY <christophe.leroy@c-s.fr>
> > Signed-off-by: Wen Yang <wen.yang99@zte.com.cn>
> > CC: Julia Lawall <julia.lawall@lip6.fr>
> > CC: Zhao Qiang <qiang.zhao@nxp.com>
> > ---
> >  drivers/soc/fsl/qe/qe_tdm.c | 20 ++++++++++----------
> >  1 file changed, 10 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/soc/fsl/qe/qe_tdm.c b/drivers/soc/fsl/qe/qe_tdm.c
> > index f78c346..9a29f0b 100644
> > --- a/drivers/soc/fsl/qe/qe_tdm.c
> > +++ b/drivers/soc/fsl/qe/qe_tdm.c
> > @@ -47,7 +47,7 @@ int ucc_of_parse_tdm(struct device_node *np, struct
> ucc_tdm *utdm,
> >         struct resource *res;
> >         struct device_node *np2;
> >         static int siram_init_flag;
> > -       struct platform_device *pdev;
> > +       struct platform_device *pdev_si, *pdev_siram;
> >
> >         sprop = of_get_property(np, "fsl,rx-sync-clock", NULL);
> >         if (sprop) {
> > @@ -129,16 +129,16 @@ int ucc_of_parse_tdm(struct device_node *np,
> struct ucc_tdm *utdm,
> >         if (!np2)
> >                 return -EINVAL;
> >
> > -       pdev = of_find_device_by_node(np2);
> > -       if (!pdev) {
> > +       pdev_si = of_find_device_by_node(np2);
> > +       if (!pdev_si) {
> >                 pr_err("%pOFn: failed to lookup pdev\n", np2);
> >                 of_node_put(np2);
> >                 return -EINVAL;
> >         }
> >
> >         of_node_put(np2);
> > -       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > -       utdm->si_regs = devm_ioremap_resource(&pdev->dev, res);
> > +       res = platform_get_resource(pdev_si, IORESOURCE_MEM, 0);
> > +       utdm->si_regs = devm_ioremap_resource(&pdev_si->dev, res);
> >         if (IS_ERR(utdm->si_regs)) {
> >                 ret = PTR_ERR(utdm->si_regs);
> >                 goto err_miss_siram_property; @@ -150,8 +150,8 @@
> int
> > ucc_of_parse_tdm(struct device_node *np, struct ucc_tdm *utdm,
> >                 goto err_miss_siram_property;
> >         }
> >
> > -       pdev = of_find_device_by_node(np2);
> > -       if (!pdev) {
> > +       pdev_siram = of_find_device_by_node(np2);
> > +       if (!pdev_siram) {
> >                 ret = -EINVAL;
> >                 pr_err("%pOFn: failed to lookup pdev\n", np2);
> >                 of_node_put(np2);
> > @@ -159,8 +159,8 @@ int ucc_of_parse_tdm(struct device_node *np, struct
> ucc_tdm *utdm,
> >         }
> >
> >         of_node_put(np2);
> > -       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > -       utdm->siram = devm_ioremap_resource(&pdev->dev, res);
> > +       res = platform_get_resource(pdev_siram, IORESOURCE_MEM, 0);
> > +       utdm->siram = devm_ioremap_resource(&pdev_siram->dev, res);
> >         if (IS_ERR(utdm->siram)) {
> >                 ret = PTR_ERR(utdm->siram);
> >                 goto err_miss_siram_property; @@ -174,7 +174,7 @@
> int
> > ucc_of_parse_tdm(struct device_node *np, struct ucc_tdm *utdm,
> >         return ret;
> >
> >  err_miss_siram_property:
> > -       devm_iounmap(&pdev->dev, utdm->si_regs);
> > +       devm_iounmap(&pdev_si->dev, utdm->si_regs);
> >         return ret;
> >  }
> >  EXPORT_SYMBOL(ucc_of_parse_tdm);
> > --
> > 2.9.5
> >

      reply	other threads:[~2018-12-25  2:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-22  6:49 [PATCH] soc/fsl/qe: fix err handling of ucc_of_parse_tdm Yi Wang
2018-11-22  6:49 ` Yi Wang
2018-11-22  6:49 ` Yi Wang
2018-12-05 20:09 ` Li Yang
2018-12-05 20:09   ` Li Yang
2018-12-05 20:09   ` Li Yang
2018-12-25  1:58   ` Qiang Zhao
2018-12-25  1:58     ` Qiang Zhao
2018-12-25  1:58     ` Qiang Zhao
2018-12-25  2:53     ` wen.yang99 [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201812251053063773660@zte.com.cn \
    --to=wen.yang99@zte.com.cn \
    --cc=julia.lawall@lip6.fr \
    --cc=leoyang.li@nxp.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=qiang.zhao@nxp.com \
    --cc=wang.yi59@zte.com.cn \
    --cc=zhong.weidong@zte.com.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.