diff options
Diffstat (limited to 'arch/arm/kernel/vdso.c')
-rw-r--r-- | arch/arm/kernel/vdso.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c index a4d6dc0f2427..f4dd7f9663c1 100644 --- a/arch/arm/kernel/vdso.c +++ b/arch/arm/kernel/vdso.c | |||
@@ -39,6 +39,8 @@ | |||
39 | 39 | ||
40 | static struct page **vdso_text_pagelist; | 40 | static struct page **vdso_text_pagelist; |
41 | 41 | ||
42 | extern char vdso_start[], vdso_end[]; | ||
43 | |||
42 | /* Total number of pages needed for the data and text portions of the VDSO. */ | 44 | /* Total number of pages needed for the data and text portions of the VDSO. */ |
43 | unsigned int vdso_total_pages __ro_after_init; | 45 | unsigned int vdso_total_pages __ro_after_init; |
44 | 46 | ||
@@ -197,13 +199,13 @@ static int __init vdso_init(void) | |||
197 | unsigned int text_pages; | 199 | unsigned int text_pages; |
198 | int i; | 200 | int i; |
199 | 201 | ||
200 | if (memcmp(&vdso_start, "\177ELF", 4)) { | 202 | if (memcmp(vdso_start, "\177ELF", 4)) { |
201 | pr_err("VDSO is not a valid ELF object!\n"); | 203 | pr_err("VDSO is not a valid ELF object!\n"); |
202 | return -ENOEXEC; | 204 | return -ENOEXEC; |
203 | } | 205 | } |
204 | 206 | ||
205 | text_pages = (&vdso_end - &vdso_start) >> PAGE_SHIFT; | 207 | text_pages = (vdso_end - vdso_start) >> PAGE_SHIFT; |
206 | pr_debug("vdso: %i text pages at base %p\n", text_pages, &vdso_start); | 208 | pr_debug("vdso: %i text pages at base %p\n", text_pages, vdso_start); |
207 | 209 | ||
208 | /* Allocate the VDSO text pagelist */ | 210 | /* Allocate the VDSO text pagelist */ |
209 | vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *), | 211 | vdso_text_pagelist = kcalloc(text_pages, sizeof(struct page *), |
@@ -218,7 +220,7 @@ static int __init vdso_init(void) | |||
218 | for (i = 0; i < text_pages; i++) { | 220 | for (i = 0; i < text_pages; i++) { |
219 | struct page *page; | 221 | struct page *page; |
220 | 222 | ||
221 | page = virt_to_page(&vdso_start + i * PAGE_SIZE); | 223 | page = virt_to_page(vdso_start + i * PAGE_SIZE); |
222 | vdso_text_pagelist[i] = page; | 224 | vdso_text_pagelist[i] = page; |
223 | } | 225 | } |
224 | 226 | ||
@@ -229,7 +231,7 @@ static int __init vdso_init(void) | |||
229 | 231 | ||
230 | cntvct_ok = cntvct_functional(); | 232 | cntvct_ok = cntvct_functional(); |
231 | 233 | ||
232 | patch_vdso(&vdso_start); | 234 | patch_vdso(vdso_start); |
233 | 235 | ||
234 | return 0; | 236 | return 0; |
235 | } | 237 | } |