Commit 97bbb54e authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Will Deacon

arm64: vdso: avoid virt_to_page() translations on kernel symbols

The translation performed by virt_to_page() is only valid for linear
addresses, and kernel symbols are no longer in the linear mapping.
So perform the __pa() translation explicitly, which does the right
thing in either case, and only then translate to a struct page offset.
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 8923a166
...@@ -131,11 +131,11 @@ static int __init vdso_init(void) ...@@ -131,11 +131,11 @@ static int __init vdso_init(void)
return -ENOMEM; return -ENOMEM;
/* Grab the vDSO data page. */ /* Grab the vDSO data page. */
vdso_pagelist[0] = virt_to_page(vdso_data); vdso_pagelist[0] = pfn_to_page(PHYS_PFN(__pa(vdso_data)));
/* Grab the vDSO code pages. */ /* Grab the vDSO code pages. */
for (i = 0; i < vdso_pages; i++) for (i = 0; i < vdso_pages; i++)
vdso_pagelist[i + 1] = virt_to_page(&vdso_start + i * PAGE_SIZE); vdso_pagelist[i + 1] = pfn_to_page(PHYS_PFN(__pa(&vdso_start)) + i);
/* Populate the special mapping structures */ /* Populate the special mapping structures */
vdso_spec[0] = (struct vm_special_mapping) { vdso_spec[0] = (struct vm_special_mapping) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment