* [PATCH] Staging: iio: trigger: Use devm functions
@ 2016-09-18 21:16 Bhumika Goyal
2016-09-19 5:44 ` [Outreachy kernel] " Alison Schofield
0 siblings, 1 reply; 6+ messages in thread
From: Bhumika Goyal @ 2016-09-18 21:16 UTC (permalink / raw)
To: outreachy-kernel, jic23, knaack.h, lars, pmeerw, gregkh; +Cc: Bhumika Goyal
Use managed resource functions devm_iio_trigger_alloc and
devm_request_irq instead of iio_trigger_alloc and request_irq.
Remove corresponding calls to free_irq in the probe and remove
functions. Drop the now unnecessary goto labels and replace various
gotos with direct returns.
request_irq replacement done using coccinelle.
@platform@
identifier p, probefn, removefn;
@@
struct platform_driver p = {
.probe = probefn,
.remove = removefn,
};
@prb@
identifier platform.probefn, pdev;
expression list E;
expression e;
@@
probefn(struct platform_device *pdev, ...) {
<+...
- e = request_irq(E);
+ e = devm_request_irq(&pdev->dev,E);
...
?-free_irq(...);
...+>
}
@rem depends on prb@
identifier platform.removefn;
expression e;
@@
removefn(...) {
<...
- free_irq(...);
...>
}
Signed-off-by: Bhumika Goyal <bhumirks@gmail.com>
---
drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
index 38dca69..ea4845c 100644
--- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
+++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
@@ -200,7 +200,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
st->timer_num = ret;
st->t = &iio_bfin_timer_code[st->timer_num];
- st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
+ st->trig = devm_iio_trigger_alloc(&pdev->dev, "bfintmr%d",
+ st->timer_num);
if (!st->trig)
return -ENOMEM;
@@ -211,8 +212,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
if (ret)
goto out;
- ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
- 0, st->trig->name, st);
+ ret = devm_request_irq(&pdev->dev, st->irq, iio_bfin_tmr_trigger_isr,
+ 0, st->trig->name, st);
if (ret) {
dev_err(&pdev->dev,
"request IRQ-%d failed", st->irq);
@@ -229,7 +230,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
ret = peripheral_request(st->t->pin, st->trig->name);
if (ret)
- goto out_free_irq;
+ return ret;
val = (unsigned long long)get_sclk() * pdata->duty_ns;
do_div(val, NSEC_PER_SEC);
@@ -255,8 +256,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, st);
return 0;
-out_free_irq:
- free_irq(st->irq, st);
+
out1:
iio_trigger_unregister(st->trig);
out:
@@ -271,7 +271,6 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev)
disable_gptimers(st->t->bit);
if (st->output_enable)
peripheral_free(st->t->pin);
- free_irq(st->irq, st);
iio_trigger_unregister(st->trig);
iio_trigger_put(st->trig);
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Outreachy kernel] [PATCH] Staging: iio: trigger: Use devm functions
2016-09-18 21:16 [PATCH] Staging: iio: trigger: Use devm functions Bhumika Goyal
@ 2016-09-19 5:44 ` Alison Schofield
2016-09-19 5:53 ` Bhumika Goyal
0 siblings, 1 reply; 6+ messages in thread
From: Alison Schofield @ 2016-09-19 5:44 UTC (permalink / raw)
To: Bhumika Goyal; +Cc: outreachy-kernel, jic23, knaack.h, lars, pmeerw, gregkh
On Mon, Sep 19, 2016 at 02:46:50AM +0530, Bhumika Goyal wrote:
> Use managed resource functions devm_iio_trigger_alloc and
> devm_request_irq instead of iio_trigger_alloc and request_irq.
> Remove corresponding calls to free_irq in the probe and remove
> functions. Drop the now unnecessary goto labels and replace various
> gotos with direct returns.
> request_irq replacement done using coccinelle.
Hi Bhumika,
Thanks for the patch. This seems like it's worthy of 2 separate
patches.
Also, I'm a bit confused with why I don't see an iio_trigger_free
that is going away, when you switch to the devm_iio_trigger_alloc
functions, but I realize there isn't one there to remove. hmm???
alisons
>
> @platform@
> identifier p, probefn, removefn;
> @@
> struct platform_driver p = {
> .probe = probefn,
> .remove = removefn,
> };
>
> @prb@
> identifier platform.probefn, pdev;
> expression list E;
> expression e;
>
> @@
> probefn(struct platform_device *pdev, ...) {
> <+...
> - e = request_irq(E);
> + e = devm_request_irq(&pdev->dev,E);
> ...
> ?-free_irq(...);
> ...+>
> }
>
> @rem depends on prb@
> identifier platform.removefn;
> expression e;
> @@
> removefn(...) {
> <...
> - free_irq(...);
> ...>
> }
>
> Signed-off-by: Bhumika Goyal <bhumirks@gmail.com>
> ---
> drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> index 38dca69..ea4845c 100644
> --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> @@ -200,7 +200,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> st->timer_num = ret;
> st->t = &iio_bfin_timer_code[st->timer_num];
>
> - st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
> + st->trig = devm_iio_trigger_alloc(&pdev->dev, "bfintmr%d",
> + st->timer_num);
> if (!st->trig)
> return -ENOMEM;
>
> @@ -211,8 +212,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> if (ret)
> goto out;
>
> - ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
> - 0, st->trig->name, st);
> + ret = devm_request_irq(&pdev->dev, st->irq, iio_bfin_tmr_trigger_isr,
> + 0, st->trig->name, st);
> if (ret) {
> dev_err(&pdev->dev,
> "request IRQ-%d failed", st->irq);
> @@ -229,7 +230,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
>
> ret = peripheral_request(st->t->pin, st->trig->name);
> if (ret)
> - goto out_free_irq;
> + return ret;
>
> val = (unsigned long long)get_sclk() * pdata->duty_ns;
> do_div(val, NSEC_PER_SEC);
> @@ -255,8 +256,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> platform_set_drvdata(pdev, st);
>
> return 0;
> -out_free_irq:
> - free_irq(st->irq, st);
> +
> out1:
> iio_trigger_unregister(st->trig);
> out:
> @@ -271,7 +271,6 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev)
> disable_gptimers(st->t->bit);
> if (st->output_enable)
> peripheral_free(st->t->pin);
> - free_irq(st->irq, st);
> iio_trigger_unregister(st->trig);
> iio_trigger_put(st->trig);
>
> --
> 1.9.1
>
> --
> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@googlegroups.com.
> To post to this group, send email to outreachy-kernel@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/1474233410-6932-1-git-send-email-bhumirks%40gmail.com.
> For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Outreachy kernel] [PATCH] Staging: iio: trigger: Use devm functions
2016-09-19 5:44 ` [Outreachy kernel] " Alison Schofield
@ 2016-09-19 5:53 ` Bhumika Goyal
2016-09-19 9:21 ` Julia Lawall
0 siblings, 1 reply; 6+ messages in thread
From: Bhumika Goyal @ 2016-09-19 5:53 UTC (permalink / raw)
To: Alison Schofield
Cc: outreachy-kernel, jic23, knaack.h, Lars-Peter Clausen,
Peter Meerwald-Stadler, gregkh
On Mon, Sep 19, 2016 at 11:14 AM, Alison Schofield <amsfield22@gmail.com> wrote:
> On Mon, Sep 19, 2016 at 02:46:50AM +0530, Bhumika Goyal wrote:
>> Use managed resource functions devm_iio_trigger_alloc and
>> devm_request_irq instead of iio_trigger_alloc and request_irq.
>> Remove corresponding calls to free_irq in the probe and remove
>> functions. Drop the now unnecessary goto labels and replace various
>> gotos with direct returns.
>> request_irq replacement done using coccinelle.
>
> Hi Bhumika,
> Thanks for the patch. This seems like it's worthy of 2 separate
> patches.
>
> Also, I'm a bit confused with why I don't see an iio_trigger_free
> that is going away, when you switch to the devm_iio_trigger_alloc
> functions, but I realize there isn't one there to remove. hmm???
>
> alisons
>
Hey Alison,
Ok, I will separate this in two patches. I will do
devm_iio_trigger_alloc in patch 1 and devm_request_irq in patch 2 as
devm_request_irq requires all previous memory allocations to be devms.
Regarding iio_trigger_free I didn't find any in either of the two
functions(probe and remove).
Thanks for the input.
Thanks,
Bhumika
>
>
>>
>> @platform@
>> identifier p, probefn, removefn;
>> @@
>> struct platform_driver p = {
>> .probe = probefn,
>> .remove = removefn,
>> };
>>
>> @prb@
>> identifier platform.probefn, pdev;
>> expression list E;
>> expression e;
>>
>> @@
>> probefn(struct platform_device *pdev, ...) {
>> <+...
>> - e = request_irq(E);
>> + e = devm_request_irq(&pdev->dev,E);
>> ...
>> ?-free_irq(...);
>> ...+>
>> }
>>
>> @rem depends on prb@
>> identifier platform.removefn;
>> expression e;
>> @@
>> removefn(...) {
>> <...
>> - free_irq(...);
>> ...>
>> }
>>
>> Signed-off-by: Bhumika Goyal <bhumirks@gmail.com>
>> ---
>> drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 13 ++++++-------
>> 1 file changed, 6 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
>> index 38dca69..ea4845c 100644
>> --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
>> +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
>> @@ -200,7 +200,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
>> st->timer_num = ret;
>> st->t = &iio_bfin_timer_code[st->timer_num];
>>
>> - st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
>> + st->trig = devm_iio_trigger_alloc(&pdev->dev, "bfintmr%d",
>> + st->timer_num);
>> if (!st->trig)
>> return -ENOMEM;
>>
>> @@ -211,8 +212,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
>> if (ret)
>> goto out;
>>
>> - ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
>> - 0, st->trig->name, st);
>> + ret = devm_request_irq(&pdev->dev, st->irq, iio_bfin_tmr_trigger_isr,
>> + 0, st->trig->name, st);
>> if (ret) {
>> dev_err(&pdev->dev,
>> "request IRQ-%d failed", st->irq);
>> @@ -229,7 +230,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
>>
>> ret = peripheral_request(st->t->pin, st->trig->name);
>> if (ret)
>> - goto out_free_irq;
>> + return ret;
>>
>> val = (unsigned long long)get_sclk() * pdata->duty_ns;
>> do_div(val, NSEC_PER_SEC);
>> @@ -255,8 +256,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
>> platform_set_drvdata(pdev, st);
>>
>> return 0;
>> -out_free_irq:
>> - free_irq(st->irq, st);
>> +
>> out1:
>> iio_trigger_unregister(st->trig);
>> out:
>> @@ -271,7 +271,6 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev)
>> disable_gptimers(st->t->bit);
>> if (st->output_enable)
>> peripheral_free(st->t->pin);
>> - free_irq(st->irq, st);
>> iio_trigger_unregister(st->trig);
>> iio_trigger_put(st->trig);
>>
>> --
>> 1.9.1
>>
>> --
>> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@googlegroups.com.
>> To post to this group, send email to outreachy-kernel@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/1474233410-6932-1-git-send-email-bhumirks%40gmail.com.
>> For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Outreachy kernel] [PATCH] Staging: iio: trigger: Use devm functions
2016-09-19 5:53 ` Bhumika Goyal
@ 2016-09-19 9:21 ` Julia Lawall
[not found] ` <fc36bfeb-abae-f8ad-aca0-161cd6743137@kernel.org>
0 siblings, 1 reply; 6+ messages in thread
From: Julia Lawall @ 2016-09-19 9:21 UTC (permalink / raw)
To: Bhumika Goyal
Cc: Alison Schofield, outreachy-kernel, jic23, knaack.h,
Lars-Peter Clausen, Peter Meerwald-Stadler, gregkh
On Mon, 19 Sep 2016, Bhumika Goyal wrote:
> On Mon, Sep 19, 2016 at 11:14 AM, Alison Schofield <amsfield22@gmail.com> wrote:
> > On Mon, Sep 19, 2016 at 02:46:50AM +0530, Bhumika Goyal wrote:
> >> Use managed resource functions devm_iio_trigger_alloc and
> >> devm_request_irq instead of iio_trigger_alloc and request_irq.
> >> Remove corresponding calls to free_irq in the probe and remove
> >> functions. Drop the now unnecessary goto labels and replace various
> >> gotos with direct returns.
> >> request_irq replacement done using coccinelle.
> >
> > Hi Bhumika,
> > Thanks for the patch. This seems like it's worthy of 2 separate
> > patches.
> >
> > Also, I'm a bit confused with why I don't see an iio_trigger_free
> > that is going away, when you switch to the devm_iio_trigger_alloc
> > functions, but I realize there isn't one there to remove. hmm???
> >
> > alisons
> >
>
> Hey Alison,
> Ok, I will separate this in two patches. I will do
> devm_iio_trigger_alloc in patch 1 and devm_request_irq in patch 2 as
> devm_request_irq requires all previous memory allocations to be devms.
> Regarding iio_trigger_free I didn't find any in either of the two
> functions(probe and remove).
> Thanks for the input.
I think that normally people devmify everything at once.
I dimly recollect that iio_trigger_unregister does the free. Check
whether this is the case, and whether it is devm safe.
julia
>
> Thanks,
> Bhumika
> >
> >
> >>
> >> @platform@
> >> identifier p, probefn, removefn;
> >> @@
> >> struct platform_driver p = {
> >> .probe = probefn,
> >> .remove = removefn,
> >> };
> >>
> >> @prb@
> >> identifier platform.probefn, pdev;
> >> expression list E;
> >> expression e;
> >>
> >> @@
> >> probefn(struct platform_device *pdev, ...) {
> >> <+...
> >> - e = request_irq(E);
> >> + e = devm_request_irq(&pdev->dev,E);
> >> ...
> >> ?-free_irq(...);
> >> ...+>
> >> }
> >>
> >> @rem depends on prb@
> >> identifier platform.removefn;
> >> expression e;
> >> @@
> >> removefn(...) {
> >> <...
> >> - free_irq(...);
> >> ...>
> >> }
> >>
> >> Signed-off-by: Bhumika Goyal <bhumirks@gmail.com>
> >> ---
> >> drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 13 ++++++-------
> >> 1 file changed, 6 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> >> index 38dca69..ea4845c 100644
> >> --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> >> +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> >> @@ -200,7 +200,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> >> st->timer_num = ret;
> >> st->t = &iio_bfin_timer_code[st->timer_num];
> >>
> >> - st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
> >> + st->trig = devm_iio_trigger_alloc(&pdev->dev, "bfintmr%d",
> >> + st->timer_num);
> >> if (!st->trig)
> >> return -ENOMEM;
> >>
> >> @@ -211,8 +212,8 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> >> if (ret)
> >> goto out;
> >>
> >> - ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
> >> - 0, st->trig->name, st);
> >> + ret = devm_request_irq(&pdev->dev, st->irq, iio_bfin_tmr_trigger_isr,
> >> + 0, st->trig->name, st);
> >> if (ret) {
> >> dev_err(&pdev->dev,
> >> "request IRQ-%d failed", st->irq);
> >> @@ -229,7 +230,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> >>
> >> ret = peripheral_request(st->t->pin, st->trig->name);
> >> if (ret)
> >> - goto out_free_irq;
> >> + return ret;
> >>
> >> val = (unsigned long long)get_sclk() * pdata->duty_ns;
> >> do_div(val, NSEC_PER_SEC);
> >> @@ -255,8 +256,7 @@ static int iio_bfin_tmr_trigger_probe(struct platform_device *pdev)
> >> platform_set_drvdata(pdev, st);
> >>
> >> return 0;
> >> -out_free_irq:
> >> - free_irq(st->irq, st);
> >> +
> >> out1:
> >> iio_trigger_unregister(st->trig);
> >> out:
> >> @@ -271,7 +271,6 @@ static int iio_bfin_tmr_trigger_remove(struct platform_device *pdev)
> >> disable_gptimers(st->t->bit);
> >> if (st->output_enable)
> >> peripheral_free(st->t->pin);
> >> - free_irq(st->irq, st);
> >> iio_trigger_unregister(st->trig);
> >> iio_trigger_put(st->trig);
> >>
> >> --
> >> 1.9.1
> >>
> >> --
> >> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> >> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@googlegroups.com.
> >> To post to this group, send email to outreachy-kernel@googlegroups.com.
> >> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/1474233410-6932-1-git-send-email-bhumirks%40gmail.com.
> >> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to outreachy-kernel+unsubscribe@googlegroups.com.
> To post to this group, send email to outreachy-kernel@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/CAOH%2B1jFsWGDVcifqDU0_9MPw%3DuEXQ%2Bu0E8dg0hkimx%2BeJbWq1Q%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Outreachy kernel] [PATCH] Staging: iio: trigger: Use devm functions
[not found] ` <b02b84c9-0575-d10d-6b43-d95d167a2429@metafoo.de>
@ 2016-10-14 19:27 ` Alison Schofield
2016-10-15 8:12 ` Bhumika Goyal
0 siblings, 1 reply; 6+ messages in thread
From: Alison Schofield @ 2016-10-14 19:27 UTC (permalink / raw)
To: Bhumika Goyal
Cc: Jonathan Cameron, Lars-Peter Clausen, Julia Lawall,
outreachy-kernel, knaack.h, Peter Meerwald-Stadler, gregkh,
Hennerich, Michael
On Mon, Sep 19, 2016 at 10:06:08PM +0200, Lars-Peter Clausen wrote:
> On 09/19/2016 09:29 PM, Jonathan Cameron wrote:
> > On 19/09/16 10:21, Julia Lawall wrote:
> >>
> >>
> >> On Mon, 19 Sep 2016, Bhumika Goyal wrote:
> >>
> >>> On Mon, Sep 19, 2016 at 11:14 AM, Alison Schofield <amsfield22@gmail.com> wrote:
> >>>> On Mon, Sep 19, 2016 at 02:46:50AM +0530, Bhumika Goyal wrote:
> >>>>> Use managed resource functions devm_iio_trigger_alloc and
> >>>>> devm_request_irq instead of iio_trigger_alloc and request_irq.
> >>>>> Remove corresponding calls to free_irq in the probe and remove
> >>>>> functions. Drop the now unnecessary goto labels and replace various
> >>>>> gotos with direct returns.
> >>>>> request_irq replacement done using coccinelle.
> >>>>
> >>>> Hi Bhumika,
> >>>> Thanks for the patch. This seems like it's worthy of 2 separate
> >>>> patches.
> >>>>
> >>>> Also, I'm a bit confused with why I don't see an iio_trigger_free
> >>>> that is going away, when you switch to the devm_iio_trigger_alloc
> >>>> functions, but I realize there isn't one there to remove. hmm???
> >>>>
> >>>> alisons
> >>>>
> >>>
> >>> Hey Alison,
> >>> Ok, I will separate this in two patches. I will do
> >>> devm_iio_trigger_alloc in patch 1 and devm_request_irq in patch 2 as
> >>> devm_request_irq requires all previous memory allocations to be devms.
> >>> Regarding iio_trigger_free I didn't find any in either of the two
> >>> functions(probe and remove).
> >>> Thanks for the input.
> >>
> >> I think that normally people devmify everything at once.
> > I would as well. It is 'kind of' one change...
> >>
> >> I dimly recollect that iio_trigger_unregister does the free. Check
> >> whether this is the case, and whether it is devm safe.
> > Given it's referenced on the next line I certainly hope it doesn't ;)
> > There are quite a few reasons this one is in staging!
>
> For some reason this driver uses iio_trigger_put() instead of
> iio_trigger_free(). Which is wrong, since iio_trigger_put() does an
> additional module_put() which would release a reference we've never gained.
> So the first fix should be to replace iio_trigger_put() with
> iio_trigger_free() (which is a patch for stable) and then switch to the devm
> version and remove the iio_trigger_free() (which is a patch for next).
>
> This does not seem to be the only driver that gets this wrong,
> iio-trig-sysfs and iio-trig-interrupt are also affected. These would make a
> good target for further patches.
>
> Bonus points if you can present a proof-of-concept that exploits this bug to
> run arbitrary code with kernel privileges.
>
> There seems to be another bug regarding trigger reference counting in
> iio_trigger_write_current(). The reference to the trigger should be acquired
> in iio_trigger_find_by_name() while holding mutex. Otherwise we risk that
> the trigger is already freed before we grab the reference later in
> iio_trigger_write_current(). That's another opportunity for sending a good
> patch and also some opportunity for bonus points.
>
Hi Bhumika,
I have interest in working this issue. Let me know if it's ok for
me to run with.
Thanks!
alisons
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Outreachy kernel] [PATCH] Staging: iio: trigger: Use devm functions
2016-10-14 19:27 ` Alison Schofield
@ 2016-10-15 8:12 ` Bhumika Goyal
0 siblings, 0 replies; 6+ messages in thread
From: Bhumika Goyal @ 2016-10-15 8:12 UTC (permalink / raw)
To: Alison Schofield
Cc: Jonathan Cameron, Lars-Peter Clausen, Julia Lawall,
outreachy-kernel, knaack.h, Peter Meerwald-Stadler, gregkh,
Hennerich, Michael
On Sat, Oct 15, 2016 at 12:57 AM, Alison Schofield <amsfield22@gmail.com> wrote:
> On Mon, Sep 19, 2016 at 10:06:08PM +0200, Lars-Peter Clausen wrote:
>> On 09/19/2016 09:29 PM, Jonathan Cameron wrote:
>> > On 19/09/16 10:21, Julia Lawall wrote:
>> >>
>> >>
>> >> On Mon, 19 Sep 2016, Bhumika Goyal wrote:
>> >>
>> >>> On Mon, Sep 19, 2016 at 11:14 AM, Alison Schofield <amsfield22@gmail.com> wrote:
>> >>>> On Mon, Sep 19, 2016 at 02:46:50AM +0530, Bhumika Goyal wrote:
>> >>>>> Use managed resource functions devm_iio_trigger_alloc and
>> >>>>> devm_request_irq instead of iio_trigger_alloc and request_irq.
>> >>>>> Remove corresponding calls to free_irq in the probe and remove
>> >>>>> functions. Drop the now unnecessary goto labels and replace various
>> >>>>> gotos with direct returns.
>> >>>>> request_irq replacement done using coccinelle.
>> >>>>
>> >>>> Hi Bhumika,
>> >>>> Thanks for the patch. This seems like it's worthy of 2 separate
>> >>>> patches.
>> >>>>
>> >>>> Also, I'm a bit confused with why I don't see an iio_trigger_free
>> >>>> that is going away, when you switch to the devm_iio_trigger_alloc
>> >>>> functions, but I realize there isn't one there to remove. hmm???
>> >>>>
>> >>>> alisons
>> >>>>
>> >>>
>> >>> Hey Alison,
>> >>> Ok, I will separate this in two patches. I will do
>> >>> devm_iio_trigger_alloc in patch 1 and devm_request_irq in patch 2 as
>> >>> devm_request_irq requires all previous memory allocations to be devms.
>> >>> Regarding iio_trigger_free I didn't find any in either of the two
>> >>> functions(probe and remove).
>> >>> Thanks for the input.
>> >>
>> >> I think that normally people devmify everything at once.
>> > I would as well. It is 'kind of' one change...
>> >>
>> >> I dimly recollect that iio_trigger_unregister does the free. Check
>> >> whether this is the case, and whether it is devm safe.
>> > Given it's referenced on the next line I certainly hope it doesn't ;)
>> > There are quite a few reasons this one is in staging!
>>
>> For some reason this driver uses iio_trigger_put() instead of
>> iio_trigger_free(). Which is wrong, since iio_trigger_put() does an
>> additional module_put() which would release a reference we've never gained.
>> So the first fix should be to replace iio_trigger_put() with
>> iio_trigger_free() (which is a patch for stable) and then switch to the devm
>> version and remove the iio_trigger_free() (which is a patch for next).
>>
>> This does not seem to be the only driver that gets this wrong,
>> iio-trig-sysfs and iio-trig-interrupt are also affected. These would make a
>> good target for further patches.
>>
>> Bonus points if you can present a proof-of-concept that exploits this bug to
>> run arbitrary code with kernel privileges.
>>
>> There seems to be another bug regarding trigger reference counting in
>> iio_trigger_write_current(). The reference to the trigger should be acquired
>> in iio_trigger_find_by_name() while holding mutex. Otherwise we risk that
>> the trigger is already freed before we grab the reference later in
>> iio_trigger_write_current(). That's another opportunity for sending a good
>> patch and also some opportunity for bonus points.
>>
>
> Hi Bhumika,
> I have interest in working this issue. Let me know if it's ok for
> me to run with.
> Thanks!
Hey Alison,
You can surely go ahead with this issue :)
Thanks,
Bhumika
> alisons
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-10-15 8:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-18 21:16 [PATCH] Staging: iio: trigger: Use devm functions Bhumika Goyal
2016-09-19 5:44 ` [Outreachy kernel] " Alison Schofield
2016-09-19 5:53 ` Bhumika Goyal
2016-09-19 9:21 ` Julia Lawall
[not found] ` <fc36bfeb-abae-f8ad-aca0-161cd6743137@kernel.org>
[not found] ` <b02b84c9-0575-d10d-6b43-d95d167a2429@metafoo.de>
2016-10-14 19:27 ` Alison Schofield
2016-10-15 8:12 ` Bhumika Goyal
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.