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: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
8923a16686
commit
97bbb54e4f
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue