mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-13 19:04:11 -04:00
x86/vdso: Fix latent bug in vclock_pages calculation
The vclock pages are *after* the non-vclock pages. Currently there are both
two vclock and two non-vclock pages so the existing logic works by
accident. As soon as the number of pages changes it will break however.
This will be the case with the introduction of the generic vDSO data
storage.
Use a macro to keep the calculation understandable and in sync between
the linker script and mapping code.
Fixes: e93d2521b2 ("x86/vdso: Split virtual clock pages into dedicated mapping")
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250204-vdso-store-rng-v3-1-13a4669dfc8c@linutronix.de
This commit is contained in:
committed by
Thomas Gleixner
parent
a64dcfb451
commit
3ef32d90cd
@@ -24,7 +24,7 @@ SECTIONS
|
||||
|
||||
timens_page = vvar_start + PAGE_SIZE;
|
||||
|
||||
vclock_pages = vvar_start + VDSO_NR_VCLOCK_PAGES * PAGE_SIZE;
|
||||
vclock_pages = VDSO_VCLOCK_PAGES_START(vvar_start);
|
||||
pvclock_page = vclock_pages + VDSO_PAGE_PVCLOCK_OFFSET * PAGE_SIZE;
|
||||
hvclock_page = vclock_pages + VDSO_PAGE_HVCLOCK_OFFSET * PAGE_SIZE;
|
||||
|
||||
|
||||
@@ -290,7 +290,7 @@ static int map_vdso(const struct vdso_image *image, unsigned long addr)
|
||||
}
|
||||
|
||||
vma = _install_special_mapping(mm,
|
||||
addr + (__VVAR_PAGES - VDSO_NR_VCLOCK_PAGES) * PAGE_SIZE,
|
||||
VDSO_VCLOCK_PAGES_START(addr),
|
||||
VDSO_NR_VCLOCK_PAGES * PAGE_SIZE,
|
||||
VM_READ|VM_MAYREAD|VM_IO|VM_DONTDUMP|
|
||||
VM_PFNMAP,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define __VVAR_PAGES 4
|
||||
|
||||
#define VDSO_NR_VCLOCK_PAGES 2
|
||||
#define VDSO_VCLOCK_PAGES_START(_b) ((_b) + (__VVAR_PAGES - VDSO_NR_VCLOCK_PAGES) * PAGE_SIZE)
|
||||
#define VDSO_PAGE_PVCLOCK_OFFSET 0
|
||||
#define VDSO_PAGE_HVCLOCK_OFFSET 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user