--- a/sys/kern/subr_fattime.c 2026-06-29 12:51:19.000000000 +0000 +++ b/sys/kern/subr_fattime.c 2026-09-04 04:46:18.427316158 +0000 @@ -80,6 +80,7 @@ #define YEAR 365 /* Length of normal year */ #define LYC (4 * YEAR + 1) /* Length of 4 year leap-year cycle */ #define T1980 (10 * 365 + 2) /* Days from 1970 to 1980 */ +#define T2107 ((2108 - 1980) * YEAR + 31 - 1) /* Days 1980 to 2107-12-31 */ /* End of month is N days from start of (normal) year */ #define JAN 31 @@ -162,6 +163,13 @@ t2 -= T1980; /* + * Impossible date (FAT cannot represent + * anything past 2107-12-31): saturate. + */ + if (t2 > T2107) + t2 = T2107; + + /* * 2100 is not a leap year. * XXX: a 32 bit time_t can not get us here. */ @@ -248,7 +256,8 @@ /* Align with time_t epoch */ day += T1980; - tsp->tv_sec += DAY * day; + /* 64-bit time_t: keep the product from wrapping in 32 bits */ + tsp->tv_sec += (time_t)DAY * day; if (!utc) tsp->tv_sec += 0; // XXX utc_offset(); }