2020-01-06 20:39:00

by Tony Lindgren

[permalink] [raw]
Subject: [PATCH] clocksource: timer-ti-dm: Fix regression

Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
platform_get_irq") caused a regression where we now try to access
uninitialized data for timer:

drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
uninitialized in this function [-Wmaybe-uninitialized]

On boot we now get:

Unable to handle kernel NULL pointer dereference at virtual address
00000004
...
(omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
(platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
(really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)

Let's fix the issue by moving platform_get_irq to happen after timer has
been allocated.

Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
Cc: Yangtao Li <[email protected]>
Signed-off-by: Tony Lindgren <[email protected]>
---

I did not notice simlar issue with other patches in the series, but
please do double check Yangtao.

---
drivers/clocksource/timer-ti-dm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c
--- a/drivers/clocksource/timer-ti-dm.c
+++ b/drivers/clocksource/timer-ti-dm.c
@@ -795,14 +795,14 @@ static int omap_dm_timer_probe(struct platform_device *pdev)
return -ENODEV;
}

- timer->irq = platform_get_irq(pdev, 0);
- if (timer->irq < 0)
- return timer->irq;
-
timer = devm_kzalloc(dev, sizeof(*timer), GFP_KERNEL);
if (!timer)
return -ENOMEM;

+ timer->irq = platform_get_irq(pdev, 0);
+ if (timer->irq < 0)
+ return timer->irq;
+
timer->fclk = ERR_PTR(-ENODEV);
timer->io_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(timer->io_base))
--
2.24.1


2020-01-06 21:08:43

by Olof Johansson

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression

On Mon, Jan 6, 2020 at 12:37 PM Tony Lindgren <[email protected]> wrote:
>
> Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
> platform_get_irq") caused a regression where we now try to access
> uninitialized data for timer:
>
> drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
> drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
> uninitialized in this function [-Wmaybe-uninitialized]
>
> On boot we now get:
>
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000004
> ...
> (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
> (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
> (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
>
> Let's fix the issue by moving platform_get_irq to happen after timer has
> been allocated.
>
> Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
> Cc: Yangtao Li <[email protected]>
> Signed-off-by: Tony Lindgren <[email protected]>

Acked-by: Olof Johansson <[email protected]>

> ---
>
> I did not notice simlar issue with other patches in the series, but
> please do double check Yangtao.

Yeah, this even seems to be caught at build (but our builds have been
so noisy with warnings lately that they're hard to spot):

/build/drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
/build/drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may
be used uninitialized in this function [-Wmaybe-uninitialized]
798 | timer->irq = platform_get_irq(pdev, 0);
| ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~


-Olof

2020-01-07 19:16:35

by Frank Lee

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression

On Tue, Jan 7, 2020 at 5:07 AM Olof Johansson <[email protected]> wrote:
>
> On Mon, Jan 6, 2020 at 12:37 PM Tony Lindgren <[email protected]> wrote:
> >
> > Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
> > platform_get_irq") caused a regression where we now try to access
> > uninitialized data for timer:
> >
> > drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
> > drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
> > uninitialized in this function [-Wmaybe-uninitialized]
> >
> > On boot we now get:
> >
> > Unable to handle kernel NULL pointer dereference at virtual address
> > 00000004
> > ...
> > (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
> > (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
> > (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
> >
> > Let's fix the issue by moving platform_get_irq to happen after timer has
> > been allocated.
> >
> > Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
> > Cc: Yangtao Li <[email protected]>
> > Signed-off-by: Tony Lindgren <[email protected]>
>
> Acked-by: Olof Johansson <[email protected]>

Acked-by: Yangtao Li <[email protected]>

I am sorry. I will pay attention next time.

>
> > ---
> >
> > I did not notice simlar issue with other patches in the series, but
> > please do double check Yangtao.
>
> Yeah, this even seems to be caught at build (but our builds have been
> so noisy with warnings lately that they're hard to spot):
>
> /build/drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
> /build/drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may
> be used uninitialized in this function [-Wmaybe-uninitialized]
> 798 | timer->irq = platform_get_irq(pdev, 0);
> | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> -Olof

2020-01-09 12:42:13

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression

On 06/01/2020 21:37, Tony Lindgren wrote:
> Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
> platform_get_irq") caused a regression where we now try to access
> uninitialized data for timer:
>
> drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
> drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
> uninitialized in this function [-Wmaybe-uninitialized]
>
> On boot we now get:
>
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000004
> ...
> (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
> (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
> (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
>
> Let's fix the issue by moving platform_get_irq to happen after timer has
> been allocated.
>
> Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
> Cc: Yangtao Li <[email protected]>
> Signed-off-by: Tony Lindgren <[email protected]>
> ---

Applied, thanks.



--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2020-01-11 06:30:43

by Naresh Kamboju

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression

On Tue, 7 Jan 2020 at 02:07, Tony Lindgren <[email protected]> wrote:
>
> Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
> platform_get_irq") caused a regression where we now try to access
> uninitialized data for timer:
>
> drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
> drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
> uninitialized in this function [-Wmaybe-uninitialized]
>
> On boot we now get:
>
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000004
> ...
> (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
> (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
> (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
>
> Let's fix the issue by moving platform_get_irq to happen after timer has
> been allocated.
>
> Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")

Thanks for fixing this issue.
I have noticed arm BeagleBoard-X15 boot failed on linux next tree
(5.5.0-rc5-next-20200110).

[ 6.157822] 8<--- cut here ---
[ 6.160911] Unable to handle kernel NULL pointer dereference at
virtual address 00000004
[ 6.169120] pgd = 25d83e32
[ 6.171903] [00000004] *pgd=80000080204003, *pmd=00000000
[ 6.177358] Internal error: Oops: a06 [#1] SMP ARM
[ 6.182179] Modules linked in:
[ 6.185260] CPU: 0 PID: 1 Comm: swapper/0 Not tainted
5.5.0-rc5-next-20200110 #1
[ 6.192694] Hardware name: Generic DRA74X (Flattened Device Tree)
[ 6.198832] PC is at omap_dm_timer_probe+0x48/0x310

- Naresh

2020-01-16 05:11:19

by Keerthy

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression



On 11/01/20 11:58 am, Naresh Kamboju wrote:
> On Tue, 7 Jan 2020 at 02:07, Tony Lindgren <[email protected]> wrote:
>>
>> Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
>> platform_get_irq") caused a regression where we now try to access
>> uninitialized data for timer:
>>
>> drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
>> drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
>> uninitialized in this function [-Wmaybe-uninitialized]
>>
>> On boot we now get:
>>
>> Unable to handle kernel NULL pointer dereference at virtual address
>> 00000004
>> ...
>> (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
>> (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
>> (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
>>
>> Let's fix the issue by moving platform_get_irq to happen after timer has
>> been allocated.
>>
>> Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
>
> Thanks for fixing this issue.
> I have noticed arm BeagleBoard-X15 boot failed on linux next tree
> (5.5.0-rc5-next-20200110).
>
> [ 6.157822] 8<--- cut here ---
> [ 6.160911] Unable to handle kernel NULL pointer dereference at
> virtual address 00000004
> [ 6.169120] pgd = 25d83e32
> [ 6.171903] [00000004] *pgd=80000080204003, *pmd=00000000
> [ 6.177358] Internal error: Oops: a06 [#1] SMP ARM
> [ 6.182179] Modules linked in:
> [ 6.185260] CPU: 0 PID: 1 Comm: swapper/0 Not tainted
> 5.5.0-rc5-next-20200110 #1
> [ 6.192694] Hardware name: Generic DRA74X (Flattened Device Tree)
> [ 6.198832] PC is at omap_dm_timer_probe+0x48/0x310

Tony/Daniel,

This is still not in linux-next. Any idea when this will be pushed to
linux-next branch?

- Keerthy
>
> - Naresh
>

2020-01-16 13:35:21

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH] clocksource: timer-ti-dm: Fix regression

On 16/01/2020 04:46, Keerthy wrote:
>
>
> On 11/01/20 11:58 am, Naresh Kamboju wrote:
>> On Tue, 7 Jan 2020 at 02:07, Tony Lindgren <[email protected]> wrote:
>>>
>>> Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm:
>>> Switch to
>>> platform_get_irq") caused a regression where we now try to access
>>> uninitialized data for timer:
>>>
>>> drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
>>> drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
>>> uninitialized in this function [-Wmaybe-uninitialized]
>>>
>>> On boot we now get:
>>>
>>> Unable to handle kernel NULL pointer dereference at virtual address
>>> 00000004
>>> ...
>>> (omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
>>> (platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
>>> (really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)
>>>
>>> Let's fix the issue by moving platform_get_irq to happen after timer has
>>> been allocated.
>>>
>>> Fixes: 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
>>> platform_get_irq")
>>
>> Thanks for fixing this issue.
>> I have noticed arm BeagleBoard-X15 boot failed on linux next tree
>> (5.5.0-rc5-next-20200110).
>>
>> [    6.157822] 8<--- cut here ---
>> [    6.160911] Unable to handle kernel NULL pointer dereference at
>> virtual address 00000004
>> [    6.169120] pgd = 25d83e32
>> [    6.171903] [00000004] *pgd=80000080204003, *pmd=00000000
>> [    6.177358] Internal error: Oops: a06 [#1] SMP ARM
>> [    6.182179] Modules linked in:
>> [    6.185260] CPU: 0 PID: 1 Comm: swapper/0 Not tainted
>> 5.5.0-rc5-next-20200110 #1
>> [    6.192694] Hardware name: Generic DRA74X (Flattened Device Tree)
>> [    6.198832] PC is at omap_dm_timer_probe+0x48/0x310
>
> Tony/Daniel,
>
> This is still not in linux-next. Any idea when this will be pushed to
> linux-next branch?

It should be actually.


--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2020-01-17 01:04:14

by tip-bot2 for Jacob Pan

[permalink] [raw]
Subject: [tip: timers/core] clocksource/drivers/timer-ti-dm: Fix uninitialized pointer access

The following commit has been merged into the timers/core branch of tip:

Commit-ID: 4341067cfc20582195f47383cf059589b2641465
Gitweb: https://git.kernel.org/tip/4341067cfc20582195f47383cf059589b2641465
Author: Tony Lindgren <[email protected]>
AuthorDate: Mon, 06 Jan 2020 12:37:00 -08:00
Committer: Daniel Lezcano <[email protected]>
CommitterDate: Thu, 16 Jan 2020 19:09:02 +01:00

clocksource/drivers/timer-ti-dm: Fix uninitialized pointer access

Clean-up commit 8c82723414d5 ("clocksource/drivers/timer-ti-dm: Switch to
platform_get_irq") caused a regression where we now try to access
uninitialized data for timer:

drivers/clocksource/timer-ti-dm.c: In function 'omap_dm_timer_probe':
drivers/clocksource/timer-ti-dm.c:798:13: warning: 'timer' may be used
uninitialized in this function [-Wmaybe-uninitialized]

On boot we now get:

Unable to handle kernel NULL pointer dereference at virtual address
00000004
...
(omap_dm_timer_probe) from [<c061ac7c>] (platform_drv_probe+0x48/0x98)
(platform_drv_probe) from [<c0618c04>] (really_probe+0x1dc/0x348)
(really_probe) from [<c0618ef4>] (driver_probe_device+0x5c/0x160)

Let's fix the issue by moving platform_get_irq to happen after timer has
been allocated.

Fixes: bc83caddf17b ("clocksource/drivers/timer-ti-dm: Switch to platform_get_irq")
Cc: Yangtao Li <[email protected]>
Signed-off-by: Tony Lindgren <[email protected]>
Acked-by: Olof Johansson <[email protected]>
Acked-by: Yangtao Li <[email protected]>
Signed-off-by: Daniel Lezcano <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
---
drivers/clocksource/timer-ti-dm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c
index bd16efb..269a994 100644
--- a/drivers/clocksource/timer-ti-dm.c
+++ b/drivers/clocksource/timer-ti-dm.c
@@ -795,14 +795,14 @@ static int omap_dm_timer_probe(struct platform_device *pdev)
return -ENODEV;
}

- timer->irq = platform_get_irq(pdev, 0);
- if (timer->irq < 0)
- return timer->irq;
-
timer = devm_kzalloc(dev, sizeof(*timer), GFP_KERNEL);
if (!timer)
return -ENOMEM;

+ timer->irq = platform_get_irq(pdev, 0);
+ if (timer->irq < 0)
+ return timer->irq;
+
timer->fclk = ERR_PTR(-ENODEV);
timer->io_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(timer->io_base))