Messages in this thread Patch in this message | | | Date | Tue, 24 Nov 2009 09:06:11 -0600 | From | steiner@sgi ... | Subject | [Patch 14/29] GRU - Check for valid vma |
| |
From: Jack Steiner <steiner@sgi.com>
Fix bug caused by failure to allocate a GRU gts structure. The old code failed to handle the case where the vma was invalid.
Signed-off-by: Jack Steiner <steiner@sgi.com>
--- drivers/misc/sgi-gru/grufault.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
Index: linux/drivers/misc/sgi-gru/grufault.c =================================================================== --- linux.orig/drivers/misc/sgi-gru/grufault.c 2009-11-20 09:32:31.000000000 -0600 +++ linux/drivers/misc/sgi-gru/grufault.c 2009-11-20 09:32:33.000000000 -0600 @@ -90,19 +90,22 @@ static struct gru_thread_state *gru_allo { struct mm_struct *mm = current->mm; struct vm_area_struct *vma; - struct gru_thread_state *gts = NULL; + struct gru_thread_state *gts = ERR_PTR(-EINVAL); down_write(&mm->mmap_sem); vma = gru_find_vma(vaddr); - if (vma) - gts = gru_alloc_thread_state(vma, TSID(vaddr, vma)); - if (!IS_ERR(gts)) { - mutex_lock(>s->ts_ctxlock); - downgrade_write(&mm->mmap_sem); - } else { - up_write(&mm->mmap_sem); - } + if (!vma) + goto err; + gts = gru_alloc_thread_state(vma, TSID(vaddr, vma)); + if (IS_ERR(gts)) + goto err; + mutex_lock(>s->ts_ctxlock); + downgrade_write(&mm->mmap_sem); + return gts; + +err: + up_write(&mm->mmap_sem); return gts; }
| |