Messages in this thread | | | Date | Mon, 20 Aug 2012 19:51:10 +0000 | From | Christoph Lameter <> | Subject | Re: [PATCH 5/5] mempolicy: fix a memory corruption by refcount imbalance in alloc_pages_vma() |
| |
On Mon, 20 Aug 2012, Mel Gorman wrote:
> diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index 45f9825..82e872f 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -1545,15 +1545,28 @@ struct mempolicy *get_vma_policy(struct task_struct *task, > struct vm_area_struct *vma, unsigned long addr) > { > struct mempolicy *pol = task->mempolicy; > + int got_ref;
New variable. Need to set it to zero?
> > if (vma) { > if (vma->vm_ops && vma->vm_ops->get_policy) { > struct mempolicy *vpol = vma->vm_ops->get_policy(vma, > addr); > - if (vpol) > + if (vpol) { > pol = vpol; > - } else if (vma->vm_policy) > + got_ref = 1;
Set the new variable. But it was not initialzed before. So now its 1 or undefined?
> + } > + } else if (vma->vm_policy) { > pol = vma->vm_policy; > + > + /* > + * shmem_alloc_page() passes MPOL_F_SHARED policy with > + * a pseudo vma whose vma->vm_ops=NULL. Take a reference > + * count on these policies which will be dropped by > + * mpol_cond_put() later > + */ > + if (mpol_needs_cond_ref(pol)) > + mpol_get(pol); > + } > } > if (!pol) > pol = &default_policy; >
I do not see any use of got_ref. Can we get rid of the variable?
| |