
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 richard@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;