lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAD=FV=W2xBFxOgdOM2=RJMB56wi24UUYqdR8WE63KKhxRRwsZQ@mail.gmail.com>
Date:   Tue, 14 Jan 2020 19:40:13 -0800
From:   Doug Anderson <dianders@...omium.org>
To:     Stephen Boyd <swboyd@...omium.org>
Cc:     John Stultz <john.stultz@...aro.org>,
        Thomas Gleixner <tglx@...utronix.de>,
        Ravi Chandra Sadineni <ravisadineni@...omium.org>,
        LKML <linux-kernel@...r.kernel.org>,
        Stephen Boyd <sboyd@...nel.org>
Subject: Re: [PATCH 2/4] alarmtimer: Make alarmtimer platform device child of
 RTC device

Hi,

On Thu, Jan 9, 2020 at 7:59 AM Stephen Boyd <swboyd@...omium.org> wrote:
>
> The alarmtimer_suspend() function will fail if an RTC device is on a bus
> such as SPI or i2c and that RTC device registers and probes after
> alarmtimer_init() registers and probes the 'alarmtimer' platform device.
> This is because system wide suspend suspends devices in the reverse
> order of their probe. When alarmtimer_suspend() attempts to program the
> RTC for a wakeup it will try to program an RTC device on a bus that has
> already been suspended.
>
> Let's move the alarmtimer device registration to be when the RTC we use
> for wakeup is registered. Register the 'alarmtimer' platform device as a
> child of the RTC device too, so that we can be guaranteed that the RTC
> device won't be suspended when alarmtimer_suspend() is called.
>
> Reported-by: Douglas Anderson <dianders@...omium.org>
> Signed-off-by: Stephen Boyd <swboyd@...omium.org>
> ---
>  kernel/time/alarmtimer.c | 15 +++++----------
>  1 file changed, 5 insertions(+), 10 deletions(-)
>
> diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c
> index 4b11f0309eee..ccb6aea4f1d4 100644
> --- a/kernel/time/alarmtimer.c
> +++ b/kernel/time/alarmtimer.c
> @@ -88,6 +88,7 @@ static int alarmtimer_rtc_add_device(struct device *dev,
>         unsigned long flags;
>         struct rtc_device *rtc = to_rtc_device(dev);
>         struct wakeup_source *__ws;
> +       struct platform_device *pdev;
>         int ret = 0;
>
>         if (rtcdev)
> @@ -99,6 +100,7 @@ static int alarmtimer_rtc_add_device(struct device *dev,
>                 return -1;
>
>         __ws = wakeup_source_register(dev, "alarmtimer");
> +       pdev = platform_device_register_data(dev, "alarmtimer", -1, NULL, 0);

Don't you need to check for an error here?  If pdev is an error you'll
continue on your merry way.  Before your patch if you got an error
registering the device it would have caused probe to fail.

I guess you'd only want it to be an error if "rtcdev" is NULL?

Otherwise (though I'm no expert on this code), it looks sane to me.


-Doug

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ