diff options
-rw-r--r-- | fs/proc/vmcore.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 9b9270eb0599..1082492e02fc 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c | |||
@@ -369,6 +369,7 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, | |||
369 | Elf64_Ehdr *ehdr_ptr; | 369 | Elf64_Ehdr *ehdr_ptr; |
370 | Elf64_Phdr phdr; | 370 | Elf64_Phdr phdr; |
371 | u64 phdr_sz = 0, note_off; | 371 | u64 phdr_sz = 0, note_off; |
372 | struct vm_struct *vm; | ||
372 | 373 | ||
373 | ehdr_ptr = (Elf64_Ehdr *)elfptr; | 374 | ehdr_ptr = (Elf64_Ehdr *)elfptr; |
374 | 375 | ||
@@ -385,6 +386,14 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz, | |||
385 | if (!*notes_buf) | 386 | if (!*notes_buf) |
386 | return -ENOMEM; | 387 | return -ENOMEM; |
387 | 388 | ||
389 | /* | ||
390 | * Allow users to remap ELF note segment buffer on vmalloc memory using | ||
391 | * remap_vmalloc_range.() | ||
392 | */ | ||
393 | vm = find_vm_area(*notes_buf); | ||
394 | BUG_ON(!vm); | ||
395 | vm->flags |= VM_USERMAP; | ||
396 | |||
388 | rc = copy_notes_elf64(ehdr_ptr, *notes_buf); | 397 | rc = copy_notes_elf64(ehdr_ptr, *notes_buf); |
389 | if (rc < 0) | 398 | if (rc < 0) |
390 | return rc; | 399 | return rc; |
@@ -548,6 +557,7 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, | |||
548 | Elf32_Ehdr *ehdr_ptr; | 557 | Elf32_Ehdr *ehdr_ptr; |
549 | Elf32_Phdr phdr; | 558 | Elf32_Phdr phdr; |
550 | u64 phdr_sz = 0, note_off; | 559 | u64 phdr_sz = 0, note_off; |
560 | struct vm_struct *vm; | ||
551 | 561 | ||
552 | ehdr_ptr = (Elf32_Ehdr *)elfptr; | 562 | ehdr_ptr = (Elf32_Ehdr *)elfptr; |
553 | 563 | ||
@@ -564,6 +574,14 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz, | |||
564 | if (!*notes_buf) | 574 | if (!*notes_buf) |
565 | return -ENOMEM; | 575 | return -ENOMEM; |
566 | 576 | ||
577 | /* | ||
578 | * Allow users to remap ELF note segment buffer on vmalloc memory using | ||
579 | * remap_vmalloc_range() | ||
580 | */ | ||
581 | vm = find_vm_area(*notes_buf); | ||
582 | BUG_ON(!vm); | ||
583 | vm->flags |= VM_USERMAP; | ||
584 | |||
567 | rc = copy_notes_elf32(ehdr_ptr, *notes_buf); | 585 | rc = copy_notes_elf32(ehdr_ptr, *notes_buf); |
568 | if (rc < 0) | 586 | if (rc < 0) |
569 | return rc; | 587 | return rc; |