CVE-2021-47221

mm/slub: actually fix freelist pointer vs redzoning

published May 21, 2024

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

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

mm/slub: actually fix freelist pointer vs redzoning

It turns out that SLUB redzoning ("slub_debug=Z") checks from

s->object_size rather than from s->inuse (which is normally bumped to

make room for the freelist pointer), so a cache created with an object

size less than 24 would have the freelist pointer written beyond

s->object_size, causing the redzone to be corrupted by the freelist

pointer. This was very visible with "slub_debug=ZF":

BUG test (Tainted: G B ): Right Redzone overwritten

-----------------------------------------------------------------------------

INFO: 0xffff957ead1c05de-0xffff957ead1c05df @offset=1502. First byte 0x1a instead of 0xbb

INFO: Slab 0xffffef3950b47000 objects=170 used=170 fp=0x0000000000000000 flags=0x8000000000000200

INFO: Object 0xffff957ead1c05d8 @offset=1496 fp=0xffff957ead1c0620

Redzone (____ptrval____): bb bb bb bb bb bb bb bb ........

Object (____ptrval____): 00 00 00 00 00 f6 f4 a5 ........

Redzone (____ptrval____): 40 1d e8 1a aa @....

Padding (____ptrval____): 00 00 00 00 00 00 00 00 ........

Adjust the offset to stay within s->object_size.

(Note that no caches of in this size range are known to exist in the

kernel currently.)

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00222 · 12.1th percentile
Published
2024-05-21T14:19Z
EPSS history
Timeline
  • 21 MAY 14:19Z
    mm/slub: actually fix freelist pointer vs redzoning
    cvelistv5