CVE-2026-53288
Beschrijving NL
In de Linux kernel is de volgende kwetsbaarheid verholpen:
arm64: Reserveer een extra pagina voor vroege kerneltoewijzing
Het laatste deel van [data, end) segment kan overlopen naar de volgende pagina van
init_pg_end[1] dat is de gap-pagina vóór early_init_stack[2]:
[1]
crash_arm64_v9.0.1> vtop ffffffed00601000
VIRTUEEL FYSIEK
ffffffed00601000 83401000
PAGINAGIDS: ffffffecffd62000 PGD:
ffffffecffd62da0 => 10000000833fb003
PMD: ffffff80033fb018 => 1 0000000833fe003
PTE: ffffff80033fe008 => 68000083401f03
PAGINA: 83401000
PTE FYSIEKE VLAGGEN
68000083401f03 83401000 (GELDIG|GEDEELD|AF|NG|PXN|UXN)
PAGINA FYSIEKE TOEWIJZING INDEX CNT-VLAGGEN
fffffffec00d0040 83401000 0 0 1 4000 gereserveerd
[2]
ffffffed002c8000 (r) __pi__gegevens
ffffffed0054e000 (d) __pi___bss_start
ffffffed005f5000 (b) __pi_init_pg_dir
ffffffed005fe000 (b) __pi_init_pg_END
ffffffed005ff000 (B) early_init _stack
ffffffed00608000 (b) __pi__end
Voor 4K-pagina's kan de vroege kerneltoewijzing 2 MB blokvermeldingen gebruiken, maar de
kernelsegmenten zijn slechts 64KB uitgelijnd. Segmentgrenzen die vallen
binnen een blok van 2MB vereisen daarom een PTE-tabel, zodat verschillende
attributen kunnen aan weerszijden van de grens worden toegepast. KERNEL_SEGMENT_COUNT telt nog steeds correct de vijf permanente kernels
VMA's geregistreerd door declare_kernel_vmas (). Echter, aangezien commit
5973a62efa34 ("arm64: map [_text, _stext) virtueel adresbereik
niet-uitvoerbaar+alleen-lezen"), brengt de vroege mapper ook [_text, _stext) in kaart
los van [_stext, _etext). Dit voegt nog een vroege opsplitsing toe
en kan een pagina met meer paginatabellen vereisen dan de bestaande
VROEG_SEGMENT_EXTRA_PAGINA'S emissiereserves. Verhoog de vergoeding voor vroege toewijzing van 4K-pagina's met één pagina om dat te dekken
extra splitsing. [catalin.marinas@arm.com: herschreef een deel van het commit-log]
[catalin.marinas@arm.com: breidde de codecommentaar uit]
Origineel (Engels) tonen
In the Linux kernel, the following vulnerability has been resolved:
arm64: Reserve an extra page for early kernel mapping
The final part of [data, end) segment may overflow into the next page of
init_pg_end[1] which is the gap page before early_init_stack[2]:
[1]
crash_arm64_v9.0.1> vtop ffffffed00601000
VIRTUAL PHYSICAL
ffffffed00601000 83401000
PAGE DIRECTORY: ffffffecffd62000
PGD: ffffffecffd62da0 => 10000000833fb003
PMD: ffffff80033fb018 => 10000000833fe003
PTE: ffffff80033fe008 => 68000083401f03
PAGE: 83401000
PTE PHYSICAL FLAGS
68000083401f03 83401000 (VALID|SHARED|AF|NG|PXN|UXN)
PAGE PHYSICAL MAPPING INDEX CNT FLAGS
fffffffec00d0040 83401000 0 0 1 4000 reserved
[2]
ffffffed002c8000 (r) __pi__data
ffffffed0054e000 (d) __pi___bss_start
ffffffed005f5000 (b) __pi_init_pg_dir
ffffffed005fe000 (b) __pi_init_pg_end
ffffffed005ff000 (B) early_init_stack
ffffffed00608000 (b) __pi__end
For 4K pages, the early kernel mapping may use 2MB block entries but the
kernel segments are only 64KB aligned. Segment boundaries that fall
within a 2MB block therefore require a PTE table so that different
attributes can be applied on either side of the boundary.
KERNEL_SEGMENT_COUNT still correctly counts the five permanent kernel
VMAs registered by declare_kernel_vmas(). However, since commit
5973a62efa34 ("arm64: map [_text, _stext) virtual address range
non-executable+read-only"), the early mapper also maps [_text, _stext)
separately from [_stext, _etext). This adds one more early-only split
and can require one more page-table page than the existing
EARLY_SEGMENT_EXTRA_PAGES allowance reserves.
Increase the 4K-page early mapping allowance by one page to cover that
additional split.
[catalin.marinas@arm.com: rewrote part of the commit log]
[catalin.marinas@arm.com: expanded the code comment]