- Handle negative second values properly when converting a timespec64 to nanoseconds.
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmE9wH4ACgkQEsHwGGHe VUrkwA//XwHq/jIVzzKL7WWa/jSChA7PCzG4EXramarhl9FeFoq9VaPZs7OyQaKz w5dhYx7kZVAX6+qaZ/LBSyQApY+32vLK0HAXM8Nfi5Yg2ukDg1yG11IRgECTO3/9 lQZ5rD2Po5MGYSSEiiSZE76dA03yTTzKWoTbT/24iNRemYfgOYffN26qnxaZDU9+ eEbGaobmAtCN8T371I0gMKsdh4X/z/JaVdwNruI0LO7wuziMkyKlqsqlLCM90U2K bSsPU+brMJkflMM4iE8kAfC+HFsmBlMcgrp0z5FLIqZSlsYwJYrM0OZOwQFAwm/A oVp4BZGT4VeIIS5m/TtH6gt2XqZUMCdQmxUyY1rOIu3yhy39XMipUmDD0e73J5d3 Pfim+4If/U/yaQoG82Qrn0jCYen4soYf2QLeb9DkEw9ETwQFUZQ1KKLYuMCgEy91 CEn1znjCuiCJEbrXlR4z1hB2G3i2VGd2j9/M/2X4VX+cMsEfO/N+XwM9Gi9XjlJo CEVfT/XXvvEjN0E/9CCflmO/g3zhH17EhQut1dF3tRcYM8JzssQvNwVu/SeFey3+ ++umcD+qVZTFtfiNjB/SH60UF1ghp8saoK5l4bOPdRCmfQGiwZdoDdbOakHP1uGr ULxpccGlWcS5aIDEgsQb9sebQPmldeiRakct2QUGkG7xpfqIM3k= =3QGx -----END PGP SIGNATURE----- Merge tag 'timers_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull timer fix from Borislav Petkov: - Handle negative second values properly when converting a timespec64 to nanoseconds. * tag 'timers_urgent_for_v5.15_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: time: Handle negative seconds correctly in timespec64_to_ns()
This commit is contained in:
Коммит
7bf3142625
|
@ -25,7 +25,9 @@ struct itimerspec64 {
|
|||
#define TIME64_MIN (-TIME64_MAX - 1)
|
||||
|
||||
#define KTIME_MAX ((s64)~((u64)1 << 63))
|
||||
#define KTIME_MIN (-KTIME_MAX - 1)
|
||||
#define KTIME_SEC_MAX (KTIME_MAX / NSEC_PER_SEC)
|
||||
#define KTIME_SEC_MIN (KTIME_MIN / NSEC_PER_SEC)
|
||||
|
||||
/*
|
||||
* Limits for settimeofday():
|
||||
|
@ -124,10 +126,13 @@ static inline bool timespec64_valid_settod(const struct timespec64 *ts)
|
|||
*/
|
||||
static inline s64 timespec64_to_ns(const struct timespec64 *ts)
|
||||
{
|
||||
/* Prevent multiplication overflow */
|
||||
if ((unsigned long long)ts->tv_sec >= KTIME_SEC_MAX)
|
||||
/* Prevent multiplication overflow / underflow */
|
||||
if (ts->tv_sec >= KTIME_SEC_MAX)
|
||||
return KTIME_MAX;
|
||||
|
||||
if (ts->tv_sec <= KTIME_SEC_MIN)
|
||||
return KTIME_MIN;
|
||||
|
||||
return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче