summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorHATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>2013-07-03 10:19:11 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2013-07-09 15:24:42 +1000
commit4803918ba5498fe58a9b093553298df1d5365e4e (patch)
tree95f71fa1f85201b8e571ef746deb8f59058836e8 /fs
parent1f733051765d1804a5bd67d03da43605c6139ca2 (diff)
vmcore: disable mmap_vmcore() if CONFIG_MMU is not defined
From Arnd's report of a link-time build error in vmcore.c, it turned out that mmap_vmcore() work overlooked no-MMU configuraiton. In the current design, it's impossible to implement mmap_vmcore() for no-MMU configuration since MMU is essential in order to map physically non-contiguous objects (ELF header, ELF note segment and memory regions in the 1st kernel pointed to by PT_LOAD entries) into virtually contiguous user-space in ELF layout. Hence, this patch disables mmap_vmcore() if CONFIG_MMU is not defined, returning -ENOSYS. Another change is to fix the build error by using vmalloc_user() instead of calling vzalloc() and find_vm_area() in order, by which we no longer need to call find_vm_area() in vmcore.c that has no counterpart on non-MMU configuration. Also, on no-MMU configuration, because we don't export buffer for ELF note segment to user-space, we use vzalloc() to allocate the buffer. Therefore, we use differnet functions to allocate the buffer for ELF note segment. To avoid code duplication, introduce a helper alloc_elfnotes_buf(). Signed-off-by: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Reported-by: Arnd Bergmann <arnd@arndb.de> Cc: Atsushi Kumagai <kumagai-atsushi@mxc.nes.nec.co.jp> Cc: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Lisa Mitchell <lisa.mitchell@hp.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/proc/vmcore.c18
1 files changed, 0 insertions, 18 deletions
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 62da5eeb3102..28503172f2e4 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -462,7 +462,6 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz,
Elf64_Ehdr *ehdr_ptr;
Elf64_Phdr phdr;
u64 phdr_sz = 0, note_off;
- struct vm_struct *vm;
ehdr_ptr = (Elf64_Ehdr *)elfptr;
@@ -479,14 +478,6 @@ static int __init merge_note_headers_elf64(char *elfptr, size_t *elfsz,
if (!*notes_buf)
return -ENOMEM;
- /*
- * Allow users to remap ELF note segment buffer on vmalloc memory using
- * remap_vmalloc_range.()
- */
- vm = find_vm_area(*notes_buf);
- BUG_ON(!vm);
- vm->flags |= VM_USERMAP;
-
rc = copy_notes_elf64(ehdr_ptr, *notes_buf);
if (rc < 0)
return rc;
@@ -650,7 +641,6 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz,
Elf32_Ehdr *ehdr_ptr;
Elf32_Phdr phdr;
u64 phdr_sz = 0, note_off;
- struct vm_struct *vm;
ehdr_ptr = (Elf32_Ehdr *)elfptr;
@@ -667,14 +657,6 @@ static int __init merge_note_headers_elf32(char *elfptr, size_t *elfsz,
if (!*notes_buf)
return -ENOMEM;
- /*
- * Allow users to remap ELF note segment buffer on vmalloc memory using
- * remap_vmalloc_range()
- */
- vm = find_vm_area(*notes_buf);
- BUG_ON(!vm);
- vm->flags |= VM_USERMAP;
-
rc = copy_notes_elf32(ehdr_ptr, *notes_buf);
if (rc < 0)
return rc;