CVE-2024-50195CWE-754

CVE-2024-50195

High · published November 8, 2024

CVSS v3.1
7.1
EPSS
0%
Percentile
13.5
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

posix-clock: Fix missing timespec64 check in pc_clock_settime()

As Andrew pointed out, it will make sense that the PTP core

checked timespec64 struct's tv_sec and tv_nsec range before calling

ptp->info->settime64().

As the man manual of clock_settime() said, if tp.tv_sec is negative or

tp.tv_nsec is outside the range [0..999,999,999], it should return EINVAL,

which include dynamic clocks which handles PTP clock, and the condition is

consistent with timespec64_valid(). As Thomas suggested, timespec64_valid()

only check the timespec is valid, but not ensure that the time is

in a valid range, so check it ahead using timespec64_valid_strict()

in pc_clock_settime() and return -EINVAL if not valid.

There are some drivers that use tp->tv_sec and tp->tv_nsec directly to

write registers without validity checks and assume that the higher layer

has checked it, which is dangerous and will benefit from this, such as

hclge_ptp_settime(), igb_ptp_settime_i210(), _rcar_gen4_ptp_settime(),

and some drivers can remove the checks of itself.

The record
Technical detail
CVSS v3.1
7.1 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00234 · 13.5th percentile
Weakness
CWE-754 · Improper Check for Unusual or Exceptional Conditions
Published
2024-11-08T11:15Z
Affected products (10)
ProductVersionsFixed in
linux/linux_kernel≥ 2.6.39, < 4.19.3234.19.323
linux/linux_kernel≥ 4.20, < 5.4.2855.4.285
linux/linux_kernel≥ 5.5, < 5.10.2285.10.228
linux/linux_kernel≥ 5.11, < 5.15.1695.15.169
linux/linux_kernel≥ 5.16, < 6.1.1146.1.114
linux/linux_kernel≥ 6.2, < 6.6.586.6.58
linux/linux_kernel≥ 6.7, < 6.11.56.11.5
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (10)
EPSS history
Timeline
  • 08 NOV 05:54Z
    posix-clock: Fix missing timespec64 check in pc_clock_settime()
    cvelistv5