From e4d45ed5e88b8262067566b6276d4bfe0c9b56de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Date: Mon, 6 Apr 2009 15:12:55 -0700 Subject: [PATCH] --- yaml --- r: 143643 b: refs/heads/master c: 4ddfc911e39a01f95ad9765d3b9e6f43e14eeff4 h: refs/heads/master i: 143641: 1e7074352914d9d1ca36bc6a69f8027f7e089a1c 143639: 4b9e3bdd62ed22d546067d7a71a96c56668e4d86 v: v3 --- [refs] | 2 +- trunk/drivers/staging/android/binder.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 77afceb56c84..286ea224ae8a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 85e0b0cbbfc17e7f7baa9e76f9a937249108fc52 +refs/heads/master: 4ddfc911e39a01f95ad9765d3b9e6f43e14eeff4 diff --git a/trunk/drivers/staging/android/binder.c b/trunk/drivers/staging/android/binder.c index 39871da7ef91..761f5d6a9cf2 100644 --- a/trunk/drivers/staging/android/binder.c +++ b/trunk/drivers/staging/android/binder.c @@ -2694,6 +2694,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) } vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE; + if (proc->buffer) { + ret = -EBUSY; + failure_string = "already mapped"; + goto err_already_mapped; + } + area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); if (area == NULL) { ret = -ENOMEM; @@ -2741,10 +2747,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma) err_alloc_small_buf_failed: kfree(proc->pages); + proc->pages = NULL; err_alloc_pages_failed: vfree(proc->buffer); + proc->buffer = NULL; err_get_vm_area_failed: - mutex_unlock(&binder_lock); +err_already_mapped: err_bad_arg: printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret); return ret;