lkml.org 
[lkml]   [2009]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH]Fix: 32bit binary has 64bit address of stack vma
    From
    From: Ying Han <yinghan@google.com>

    Fix 32bit binary get 64bit stack vma offset.

    32bit binary running on 64bit system, the /proc/pid/maps shows for the
    vma represents stack get a 64bit adress:
    ff96c000-ff981000 rwxp 7ffffffea000 00:00 0 [stack]

    Signed-off-by: Ying Han <yinghan@google.com>

    fs/exec.c | 5 +-

    diff --git a/fs/exec.c b/fs/exec.c
    index 4e834f1..8c3eff4 100644
    --- a/fs/exec.c
    +++ b/fs/exec.c
    @@ -517,6 +517,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, uns
    unsigned long length = old_end - old_start;
    unsigned long new_start = old_start - shift;
    unsigned long new_end = old_end - shift;
    + unsigned long new_pgoff = new_start >> PAGE_SHIFT;
    struct mmu_gather *tlb;

    BUG_ON(new_start > new_end);
    @@ -531,7 +532,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, uns
    /*
    * cover the whole range: [new_start, old_end)
    */
    - vma_adjust(vma, new_start, old_end, vma->vm_pgoff, NULL);
    + vma_adjust(vma, new_start, old_end, new_pgoff, NULL);

    /*
    * move the page tables downwards, on failure we rely on
    @@ -564,7 +565,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, uns
    /*
    * shrink the vma to just the new range.
    */
    - vma_adjust(vma, new_start, new_end, vma->vm_pgoff, NULL);
    + vma_adjust(vma, new_start, new_end, new_pgoff, NULL);

    return 0;
    }

    \
     
     \ /
      Last update: 2009-01-06 00:41    [W:3.000 / U:1.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site