Make sure that tm_mday and tm_mon are within the expected
range. Upper layers such as rtc_calc_weekday() will use
them as lookup keys for arrays and this can cause out of
bounds memory accesses.

Signed-off-by: Richard Weinberger <rich...@nod.at>
---
 fs/fat/fat.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 2dd9d4e72d..f9096e8932 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -1253,8 +1253,9 @@ out:
  */
 static void __maybe_unused fat2rtc(u16 date, u16 time, struct rtc_time *tm)
 {
-       tm->tm_mday = date & 0x1f;
-       tm->tm_mon = (date & 0x1e0) >> 5;
+       tm->tm_mday = max(1, date & 0x1f);
+       tm->tm_mon = clamp((date & 0x1e0) >> 5, 1, 12);
+
        tm->tm_year = (date >> 9) + 1980;
 
        tm->tm_sec = (time & 0x1f) << 1;
-- 
2.35.3

Reply via email to