forked from Minki/linux
rtc: da9063: avoid writing undefined data to rtc
driver did | static void da9063_tm_to_data(struct rtc_time *tm, u8 *data, | { | const struct da9063_compatible_rtc_regmap *config = rtc->config; | | data[RTC_SEC] &= ~config->rtc_count_sec_mask; | data[RTC_SEC] |= tm->tm_sec & config->rtc_count_sec_mask; | ... | } | ... | static int da9063_rtc_set_time(struct device *dev, struct rtc_time *tm) | { | ... | u8 data[RTC_DATA_LEN]; | int ret; | | da9063_tm_to_data(tm, data, rtc); which means that some bits of stack content (in 'data[]') was masked out and written to the RTC. Because da9063_tm_to_data() is used only by da9063_rtc_set_time() and da9063_rtc_set_alarm(), we can write fields directly. Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> Acked-by: Steve Twiss <stwiss.opensource@diasemi.com> Tested-by: Steve Twiss <stwiss.opensource@diasemi.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
This commit is contained in:
parent
4d833d6013
commit
2ad2c17480
@ -191,24 +191,13 @@ static void da9063_tm_to_data(struct rtc_time *tm, u8 *data,
|
|||||||
{
|
{
|
||||||
const struct da9063_compatible_rtc_regmap *config = rtc->config;
|
const struct da9063_compatible_rtc_regmap *config = rtc->config;
|
||||||
|
|
||||||
data[RTC_SEC] &= ~config->rtc_count_sec_mask;
|
data[RTC_SEC] = tm->tm_sec & config->rtc_count_sec_mask;
|
||||||
data[RTC_SEC] |= tm->tm_sec & config->rtc_count_sec_mask;
|
data[RTC_MIN] = tm->tm_min & config->rtc_count_min_mask;
|
||||||
|
data[RTC_HOUR] = tm->tm_hour & config->rtc_count_hour_mask;
|
||||||
data[RTC_MIN] &= ~config->rtc_count_min_mask;
|
data[RTC_DAY] = tm->tm_mday & config->rtc_count_day_mask;
|
||||||
data[RTC_MIN] |= tm->tm_min & config->rtc_count_min_mask;
|
data[RTC_MONTH] = MONTHS_TO_DA9063(tm->tm_mon) &
|
||||||
|
|
||||||
data[RTC_HOUR] &= ~config->rtc_count_hour_mask;
|
|
||||||
data[RTC_HOUR] |= tm->tm_hour & config->rtc_count_hour_mask;
|
|
||||||
|
|
||||||
data[RTC_DAY] &= ~config->rtc_count_day_mask;
|
|
||||||
data[RTC_DAY] |= tm->tm_mday & config->rtc_count_day_mask;
|
|
||||||
|
|
||||||
data[RTC_MONTH] &= ~config->rtc_count_month_mask;
|
|
||||||
data[RTC_MONTH] |= MONTHS_TO_DA9063(tm->tm_mon) &
|
|
||||||
config->rtc_count_month_mask;
|
config->rtc_count_month_mask;
|
||||||
|
data[RTC_YEAR] = YEARS_TO_DA9063(tm->tm_year) &
|
||||||
data[RTC_YEAR] &= ~config->rtc_count_year_mask;
|
|
||||||
data[RTC_YEAR] |= YEARS_TO_DA9063(tm->tm_year) &
|
|
||||||
config->rtc_count_year_mask;
|
config->rtc_count_year_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user