• Mike Waychison's avatar
    rtc: Initialized rtc_time->tm_isdst · a7402deb
    Mike Waychison authored
    Even though the Linux kernel does not use the tm_isdst field, it is
    exposed as part of the ABI.  This field can accidentally be left
    initialized, which is why we currently memset buffers returned to
    userland in rtc_read_time.
    
    There is a case however where the field can return garbage from the
    stack though when using the RTC_ALM_READ ioctl on the rtc device.  This
    ioctl invokes rtc_read_alarm, which is careful to memset the rtc_wkalrm
    buffer that is copied to userland, but it then uses a struct copy to
    assign to alarm->time given the return value from rtc_ktime_to_tm().
    
    rtc_ktime_to_tm() is implemented by calling rtc_time_to_tm using a
    derivative seconds counds from ktime, but rtc_time_to_tm does not assign
    a value to ->tm_isdst.  This results in garbage from rtc_ktime_to_tm()'s
    frame ending up being copied out to userland as part of the returned
    rtc_wkalrm.
    
    Fix this by initializing rtc_time->tm_isdst to 0 in rtc_time_to_tm.
    Signed-off-by: default avatarMike Waychison <mikew@google.com>
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    a7402deb
rtc-lib.c 3.31 KB