lkml.org 
[lkml]   [2002]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: Linux 2.4.19pre1-ac1
    Date
    Hi Alan!

    > > Will try this now, sounds possible - but does patch really use shared
    > > memory? I will try to narrow it down a bit. There also were some changes
    > > to mm/memory.c between 2.4.18-rc2-ac2 and 2.4.18-ac1. Also a possibility?
    >
    > Could be - as far as I can tell they are also in vanilla 2.4.18 (the
    > ptrace ones)

    The changes I see here between them do not seem to be related to ptrace. But
    I think I already found one possible glitch by manual inspection there. Both
    kernels are compiling just now so I can test later.

    diff -u -r linux-2.4.18-rc2-ac2/mm/memory.c linux-2.4.18-ac1/mm/memory.c
    --- linux-2.4.18-rc2-ac2/mm/memory.c Thu Feb 28 01:01:51 2002
    +++ linux-2.4.18-ac1/mm/memory.c Thu Feb 28 00:54:09 2002
    @@ -180,7 +180,7 @@
    pgd_t * src_pgd, * dst_pgd;
    unsigned long address = vma->vm_start;
    unsigned long end = vma->vm_end;
    - unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_WRITE)) ==
    VM_WRITE;
    + unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_MAYWRITE)) ==
    VM_MAYWRITE;

    src_pgd = pgd_offset(src, address)-1;
    dst_pgd = pgd_offset(dst, address)-1;
    @@ -250,7 +250,7 @@
    goto cont_copy_pte_range;

    /* If it's a COW mapping, write protect it
    both in the parent and the child */
    - if (cow) {
    + if (cow && pte_write(pte)) {
    ptep_set_wrprotect(src_pte);
    pte = *src_pte;
    }
    @@ -460,21 +460,24 @@
    int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned
    long start,
    int len, int write, int force, struct page **pages, struct
    vm_area_struct **vmas)
    {
    - int i = 0;
    + int i;
    + unsigned int flags;
    +
    + /*
    + * Require read or write permissions.
    + * If 'force' is set, we only require the "MAY" flags.
    + */
    + flags = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
    + flags &= force ? (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
    + i = 0;

    do {
    struct vm_area_struct * vma;

    vma = find_extend_vma(mm, start);

    - if ( !vma ||
    - (pages && vma->vm_flags & VM_IO) ||
    - (!force &&
    - ((write && (!(vma->vm_flags & VM_WRITE))) ||
    - (!write && (!(vma->vm_flags & VM_READ))) ) )) {
    - if (i) return i;
    - return -EFAULT;
    - }
    + if ( !vma || (pages && vma->vm_flags & VM_IO) || !(flags &
    vma->vm_flags) )
    + return i ? : -EFAULT;
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <- This looks somewhat bogus,
    shouldn't it be "return i ? i : -EFAULT;" instead?

    Greetings,
    Andreas
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:24    [W:0.030 / U:89.688 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site