|
@@ -39,6 +39,8 @@
|
|
|
|
|
|
static struct page **vdso_text_pagelist;
|
|
|
|
|
|
+extern char vdso_start[], vdso_end[];
|
|
|
+
|
|
|
/* Total number of pages needed for the data and text portions of the VDSO. */
|
|
|
unsigned int vdso_total_pages __ro_after_init;
|
|
|
|
|
@@ -197,13 +199,13 @@ static int __init vdso_init(void)
|
|
|
unsigned int text_pages;
|
|
|
int i;
|
|
|
|
|
|
- if (memcmp(&vdso_start, "\177ELF", 4)) {
|
|
|
+ if (memcmp(vdso_start, "\177ELF", 4)) {
|
|
|
pr_err("VDSO is not a valid ELF object!\n");
|
|
|
return -ENOEXEC;
|
|
|
}
|
|
|
|
|
|
- text_pages = (&vdso_end - &vdso_start) >> PAGE_SHIFT;
|
|
|
- pr_debug("vdso: %i text pages at base %p\n", text_pages, &vdso_start);
|
|
|
+ text_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;
|
|
|
+ pr_debug("vdso: %i text pages at base %p\n", text_pages, vdso_start);
|
|
|
|
|
|
/* Allocate the VDSO text pagelist */
|
|
|
vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *),
|
|
@@ -218,7 +220,7 @@ static int __init vdso_init(void)
|
|
|
for (i = 0; i < text_pages; i++) {
|
|
|
struct page *page;
|
|
|
|
|
|
- page = virt_to_page(&vdso_start + i * PAGE_SIZE);
|
|
|
+ page = virt_to_page(vdso_start + i * PAGE_SIZE);
|
|
|
vdso_text_pagelist[i] = page;
|
|
|
}
|
|
|
|
|
@@ -229,7 +231,7 @@ static int __init vdso_init(void)
|
|
|
|
|
|
cntvct_ok = cntvct_functional();
|
|
|
|
|
|
- patch_vdso(&vdso_start);
|
|
|
+ patch_vdso(vdso_start);
|
|
|
|
|
|
return 0;
|
|
|
}
|