2007-06-29 05:03:18

by ye janboe

[permalink] [raw]
Subject: is this a bug of elf_core_dump

I found there are codes like following in elf_core_dump
for (addr = vma->vm_start;
addr < vma->vm_end;
addr += PAGE_SIZE) {
struct page *page;
struct vm_area_struct *vma;

if (get_user_pages(current, current->mm, addr, 1, 0, 1,
&page, &vma) <= 0) {
DUMP_SEEK(PAGE_SIZE);
} else {


does get_user_pages directly use page variable which is not
initialized is a bug?

thanks

Janboe


2007-06-29 05:33:51

by Kyle McMartin

[permalink] [raw]
Subject: Re: is this a bug of elf_core_dump

On Fri, Jun 29, 2007 at 01:03:06PM +0800, ye janboe wrote:
> if (get_user_pages(current, current->mm, addr, 1, 0,
> 1,
> &page, &vma) <= 0) {
> DUMP_SEEK(PAGE_SIZE);
> } else {
>
>
> does get_user_pages directly use page variable which is not
> initialized is a bug?
>

Why not look at mm/memory.c::get_user_pages and look at how it uses the
**pages argument? The fact that it is passing in the address of a
pointer to a struct page, along with the function name should be a big
hint as to what it is doing...

<spoiler>
more or less it is looking up the struct page pointer for the user address
passed in and returning it to the calling function via &page...
</spoiler>

Chees,
Kyle M