From 4bfb1c87937e103f04ec63d9b985b58a65cdd198 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Thu, 19 Apr 2018 12:50:49 +0000 Subject: chpass: reject change/expiry dates beyond y2106 The pwd.db and spwd.db files store the change and expire dates as unsigned 32-bit ints, which overflow in 2106. Reject larger values for now, until the introduction of a v5 password database. i386 has 32-bit time_t and so dates beyond y2038 are already rejected by mktime. PR: 227589 Reviewed by: lidl MFC after: 1 week Sponsored by: The FreeBSD Foundation --- chpass/util.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/chpass/util.c b/chpass/util.c index bfece1d..6b10b68 100644 --- a/chpass/util.c +++ b/chpass/util.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -136,6 +137,17 @@ bad: return (1); lt->tm_isdst = -1; if ((tval = mktime(lt)) < 0) return (1); +#ifndef __i386__ + /* + * PR227589: The pwd.db and spwd.db files store the change and expire + * dates as unsigned 32-bit ints which overflow in 2106, so larger + * values must be rejected until the introduction of a v5 password + * database. i386 has 32-bit time_t and so dates beyond y2038 are + * already rejected by mktime above. + */ + if (tval > UINT32_MAX) + return (1); +#endif *store = tval; return (0); } -- cgit v1.2.3-56-ge451