diff --git a/debian/changelog b/debian/changelog index 967630b2b..a86b2556b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,7 @@ linux-2.6 (3.1.6-2) UNRELEASED; urgency=low * net: Fix regressions that may result in a crash when using br_netfilter: - bridge: provide a mtu() method for fake_dst_ops - net: introduce DST_NOPEER dst flag + * rtc: Fix alarm rollover when day or month is out-of-range (Closes: #646429) [ Jonathan Nieder ] * prerm: Print an error message when aborting removal of the running diff --git a/debian/patches/bugfix/all/rtc-Fix-alarm-rollover-when-day-or-month-is-out-of-r.patch b/debian/patches/bugfix/all/rtc-Fix-alarm-rollover-when-day-or-month-is-out-of-r.patch new file mode 100644 index 000000000..ec6f80500 --- /dev/null +++ b/debian/patches/bugfix/all/rtc-Fix-alarm-rollover-when-day-or-month-is-out-of-r.patch @@ -0,0 +1,39 @@ +From: Ben Hutchings +Date: Thu, 29 Dec 2011 14:38:52 +0100 +Subject: [PATCH] rtc: Fix alarm rollover when day or month is out-of-range + +Commit f44f7f96a20af16f6f12e1c995576d6becf5f57b ('RTC: Initialize +kernel state from RTC') introduced a potential infinite loop. If an +alarm time contains a wildcard month and an invalid day (> 31), or a +wildcard year and an invalid month (>= 12), the loop searching for the +next matching date will never terminate. Treat the invalid values as +wildcards. + +References: http://bugs.debian.org/646429 +References: http://bugs.debian.org/653331 +Signed-off-by: Ben Hutchings +--- + drivers/rtc/interface.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c +index 3d9d2b9..f79ff34 100644 +--- a/drivers/rtc/interface.c ++++ b/drivers/rtc/interface.c +@@ -227,11 +227,11 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) + alarm->time.tm_hour = now.tm_hour; + + /* For simplicity, only support date rollover for now */ +- if (alarm->time.tm_mday == -1) { ++ if (alarm->time.tm_mday < 1 || alarm->time.tm_mday > 31) { + alarm->time.tm_mday = now.tm_mday; + missing = day; + } +- if (alarm->time.tm_mon == -1) { ++ if ((unsigned)alarm->time.tm_mon >= 12) { + alarm->time.tm_mon = now.tm_mon; + if (missing == none) + missing = month; +-- +1.7.7.3 + diff --git a/debian/patches/series/base b/debian/patches/series/base index f02d7ea00..a47e57497 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -91,3 +91,4 @@ + bugfix/all/drm-radeon-flush-read-cache-for-gtt-with-fence-on-r6.patch + bugfix/all/bridge-provide-a-mtu-method-for-fake_dst_ops.patch + bugfix/all/net-introduce-DST_NOPEER-dst-flag.patch ++ bugfix/all/rtc-Fix-alarm-rollover-when-day-or-month-is-out-of-r.patch