CVE-2024-57874

arm64: ptrace: fix partial SETREGSET for NT_ARM_TAGGED_ADDR_CTRL

Medium · published January 11, 2025

CVSS v3.1
6.1
EPSS
0%
Percentile
10.3
In the wild
Unconfirmed
What it is

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

arm64: ptrace: fix partial SETREGSET for NT_ARM_TAGGED_ADDR_CTRL

Currently tagged_addr_ctrl_set() doesn't initialize the temporary 'ctrl'

variable, and a SETREGSET call with a length of zero will leave this

uninitialized. Consequently tagged_addr_ctrl_set() will consume an

arbitrary value, potentially leaking up to 64 bits of memory from the

kernel stack. The read is limited to a specific slot on the stack, and

the issue does not provide a write mechanism.

As set_tagged_addr_ctrl() only accepts values where bits [63:4] zero and

rejects other values, a partial SETREGSET attempt will randomly succeed

or fail depending on the value of the uninitialized value, and the

exposure is significantly limited.

Fix this by initializing the temporary value before copying the regset

from userspace, as for other regsets (e.g. NT_PRSTATUS, NT_PRFPREG,

NT_ARM_SYSTEM_CALL). In the case of a zero-length write, the existing

value of the tagged address ctrl will be retained.

The NT_ARM_TAGGED_ADDR_CTRL regset is only visible in the

user_aarch64_view used by a native AArch64 task to manipulate another

native AArch64 task. As get_tagged_addr_ctrl() only returns an error

value when called for a compat task, tagged_addr_ctrl_get() and

tagged_addr_ctrl_set() should never observe an error value from

get_tagged_addr_ctrl(). Add a WARN_ON_ONCE() to both to indicate that

such an error would be unexpected, and error handlnig is not missing in

either case.

The record
Technical detail
CVSS v3.1
6.1 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00207 · 10.3th percentile
Published
2025-01-11T14:47Z
EPSS history
Timeline
  • 11 JAN 14:47Z
    arm64: ptrace: fix partial SETREGSET for NT_ARM_TAGGED_ADDR_CTRL
    cvelistv5