From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Yang Yingliang <yangyingliang@huawei.com>
Cc: <linux-kernel@vger.kernel.org>, <linux-i3c@lists.infradead.org>,
<alexandre.belloni@bootlin.com>
Subject: Re: [PATCH -next] i3c: master: svc: drop free_irq of devm_request_irq allocated irq
Date: Thu, 27 May 2021 16:40:58 +0200 [thread overview]
Message-ID: <20210527164058.3c9145b2@xps13> (raw)
In-Reply-To: <7052d19a-54cb-d634-f195-dbd8ef37f1e7@huawei.com>
Hi Yang,
Yang Yingliang <yangyingliang@huawei.com> wrote on Thu, 27 May 2021
21:49:53 +0800:
> Hi,
>
> On 2021/5/27 18:01, Miquel Raynal wrote:
> > Hi Yang,
> >
> > Yang Yingliang <yangyingliang@huawei.com> wrote on Tue, 18 May 2021
> > 21:11:27 +0800:
> >
> >> irq allocated with devm_request_irq should not be freed using
> >> free_irq, because doing so causes a dangling pointer, and a
> >> subsequent double free.
> >>
> >> Reported-by: Hulk Robot <hulkci@huawei.com>
> >> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> >> ---
> >> drivers/i3c/master/svc-i3c-master.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
> >> index 1f6ba4221817..761c9c468357 100644
> >> --- a/drivers/i3c/master/svc-i3c-master.c
> >> +++ b/drivers/i3c/master/svc-i3c-master.c
> >> @@ -1448,7 +1448,7 @@ static int svc_i3c_master_remove(struct platform_device *pdev)
> >> if (ret)
> >> return ret;
> >> >> - free_irq(master->irq, master);
> >> + devm_free_irq(&pdev->dev, master->irq, master);
> > Wouldn't removing this call the right solution? If it's a device
> > managed resource, it won't probably be needed to free it explicitly in
> > the remove path.
> Some drivers would expect to free irq itself,
I don't get it. Drivers do not expect anything, they should just comply
with the API. If robots complain because a device managed resource is
being freed without the device managed helper, this does not mean that
the resource should explicitly be freed, it just means that *if* it
must be explicitly freed, the wrong helper is being used.
> I am not sure if it's ok to remove the free_irq() in i3c,
What is the link with I3C? Sorry I might be missing something but
master->irq is a driver variable, I don't get the link with the I3C
framework and why it would interfere.
> I just keep the original logic here and avoid double free.
I don't think it is sane. Calling devm_free_irq() maybe is the right
solution - I don't feel like it is - but your certainly can't hide
behind a 'I just want the robots to be happy' justification. Hiding
bugs on purpose is not something that I personally appreciate much.
Thanks,
Miquèl
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Yang Yingliang <yangyingliang@huawei.com>
Cc: <linux-kernel@vger.kernel.org>, <linux-i3c@lists.infradead.org>,
<alexandre.belloni@bootlin.com>
Subject: Re: [PATCH -next] i3c: master: svc: drop free_irq of devm_request_irq allocated irq
Date: Thu, 27 May 2021 16:40:58 +0200 [thread overview]
Message-ID: <20210527164058.3c9145b2@xps13> (raw)
In-Reply-To: <7052d19a-54cb-d634-f195-dbd8ef37f1e7@huawei.com>
Hi Yang,
Yang Yingliang <yangyingliang@huawei.com> wrote on Thu, 27 May 2021
21:49:53 +0800:
> Hi,
>
> On 2021/5/27 18:01, Miquel Raynal wrote:
> > Hi Yang,
> >
> > Yang Yingliang <yangyingliang@huawei.com> wrote on Tue, 18 May 2021
> > 21:11:27 +0800:
> >
> >> irq allocated with devm_request_irq should not be freed using
> >> free_irq, because doing so causes a dangling pointer, and a
> >> subsequent double free.
> >>
> >> Reported-by: Hulk Robot <hulkci@huawei.com>
> >> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> >> ---
> >> drivers/i3c/master/svc-i3c-master.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c
> >> index 1f6ba4221817..761c9c468357 100644
> >> --- a/drivers/i3c/master/svc-i3c-master.c
> >> +++ b/drivers/i3c/master/svc-i3c-master.c
> >> @@ -1448,7 +1448,7 @@ static int svc_i3c_master_remove(struct platform_device *pdev)
> >> if (ret)
> >> return ret;
> >> >> - free_irq(master->irq, master);
> >> + devm_free_irq(&pdev->dev, master->irq, master);
> > Wouldn't removing this call the right solution? If it's a device
> > managed resource, it won't probably be needed to free it explicitly in
> > the remove path.
> Some drivers would expect to free irq itself,
I don't get it. Drivers do not expect anything, they should just comply
with the API. If robots complain because a device managed resource is
being freed without the device managed helper, this does not mean that
the resource should explicitly be freed, it just means that *if* it
must be explicitly freed, the wrong helper is being used.
> I am not sure if it's ok to remove the free_irq() in i3c,
What is the link with I3C? Sorry I might be missing something but
master->irq is a driver variable, I don't get the link with the I3C
framework and why it would interfere.
> I just keep the original logic here and avoid double free.
I don't think it is sane. Calling devm_free_irq() maybe is the right
solution - I don't feel like it is - but your certainly can't hide
behind a 'I just want the robots to be happy' justification. Hiding
bugs on purpose is not something that I personally appreciate much.
Thanks,
Miquèl
next prev parent reply other threads:[~2021-05-27 15:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-18 13:11 [PATCH -next] i3c: master: svc: drop free_irq of devm_request_irq allocated irq Yang Yingliang
2021-05-18 13:11 ` Yang Yingliang
2021-05-27 10:01 ` Miquel Raynal
2021-05-27 10:01 ` Miquel Raynal
2021-05-27 13:49 ` Yang Yingliang
2021-05-27 13:49 ` Yang Yingliang
2021-05-27 14:40 ` Miquel Raynal [this message]
2021-05-27 14:40 ` Miquel Raynal
2021-05-28 1:43 ` Yang Yingliang
2021-05-28 1:43 ` Yang Yingliang
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=20210527164058.3c9145b2@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=alexandre.belloni@bootlin.com \
--cc=linux-i3c@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=yangyingliang@huawei.com \
/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.