]> git.baikalelectronics.ru Git - kernel.git/commit
netfilter: xt_time: use time64_t
authorArnd Bergmann <arnd@arndb.de>
Fri, 8 Nov 2019 20:34:28 +0000 (21:34 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 15 Nov 2019 22:44:45 +0000 (23:44 +0100)
commit9ec650357fe85d10b1ed0698e71fa42a6ee55e4c
tree90aa85f03539f685e6c38ce09f2a99a72437ab84
parentfca62be7d4985217af42df5cfdd7ecd5ecfb8eba
netfilter: xt_time: use time64_t

The current xt_time driver suffers from the y2038 overflow on 32-bit
architectures, when the time of day calculations break.

Also, on both 32-bit and 64-bit architectures, there is a problem with
info->date_start/stop, which is part of the user ABI and overflows in
in 2106.

Fix the first issue by using time64_t and explicit calls to div_u64()
and div_u64_rem(), and document the seconds issue.

The explicit 64-bit division is unfortunately slower on 32-bit
architectures, but doing it as unsigned lets us use the optimized
division-through-multiplication path in most configurations.  This should
be fine, as the code already does not allow any negative time of day
values.

Using u32 seconds values consistently would probably also work and
be a little more efficient, but that doesn't feel right as it would
propagate the y2106 overflow to more place rather than fewer.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/xt_time.c