CVE-2023-52835

perf/core: Bail out early if the request AUX area is out of bound

published May 21, 2024

CVSS
—
EPSS
0%
Percentile
15.9
In the wild
Unconfirmed
What it is

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

perf/core: Bail out early if the request AUX area is out of bound

When perf-record with a large AUX area, e.g 4GB, it fails with:

#perf record -C 0 -m ,4G -e arm_spe_0// -- sleep 1

failed to mmap with 12 (Cannot allocate memory)

and it reveals a WARNING with __alloc_pages():

------------[ cut here ]------------

WARNING: CPU: 44 PID: 17573 at mm/page_alloc.c:5568 __alloc_pages+0x1ec/0x248

Call trace:

__alloc_pages+0x1ec/0x248

__kmalloc_large_node+0xc0/0x1f8

__kmalloc_node+0x134/0x1e8

rb_alloc_aux+0xe0/0x298

perf_mmap+0x440/0x660

mmap_region+0x308/0x8a8

do_mmap+0x3c0/0x528

vm_mmap_pgoff+0xf4/0x1b8

ksys_mmap_pgoff+0x18c/0x218

__arm64_sys_mmap+0x38/0x58

invoke_syscall+0x50/0x128

el0_svc_common.constprop.0+0x58/0x188

do_el0_svc+0x34/0x50

el0_svc+0x34/0x108

el0t_64_sync_handler+0xb8/0xc0

el0t_64_sync+0x1a4/0x1a8

'rb->aux_pages' allocated by kcalloc() is a pointer array which is used to

maintains AUX trace pages. The allocated page for this array is physically

contiguous (and virtually contiguous) with an order of 0..MAX_ORDER. If the

size of pointer array crosses the limitation set by MAX_ORDER, it reveals a

WARNING.

So bail out early with -ENOMEM if the request AUX area is out of bound,

e.g.:

#perf record -C 0 -m ,4G -e arm_spe_0// -- sleep 1

failed to mmap with 12 (Cannot allocate memory)

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00253 · 15.9th percentile
Published
2024-05-21T15:31Z
EPSS history
Timeline
  • 21 MAY 15:31Z
    perf/core: Bail out early if the request AUX area is out of bound
    cvelistv5