aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/android/binder.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c
index 39871da7ef91..761f5d6a9cf2 100644
--- a/drivers/staging/android/binder.c
+++ b/drivers/staging/android/binder.c
@@ -2694,6 +2694,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2694 } 2694 }
2695 vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE; 2695 vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE;
2696 2696
2697 if (proc->buffer) {
2698 ret = -EBUSY;
2699 failure_string = "already mapped";
2700 goto err_already_mapped;
2701 }
2702
2697 area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP); 2703 area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
2698 if (area == NULL) { 2704 if (area == NULL) {
2699 ret = -ENOMEM; 2705 ret = -ENOMEM;
@@ -2741,10 +2747,12 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
2741 2747
2742err_alloc_small_buf_failed: 2748err_alloc_small_buf_failed:
2743 kfree(proc->pages); 2749 kfree(proc->pages);
2750 proc->pages = NULL;
2744err_alloc_pages_failed: 2751err_alloc_pages_failed:
2745 vfree(proc->buffer); 2752 vfree(proc->buffer);
2753 proc->buffer = NULL;
2746err_get_vm_area_failed: 2754err_get_vm_area_failed:
2747 mutex_unlock(&binder_lock); 2755err_already_mapped:
2748err_bad_arg: 2756err_bad_arg:
2749 printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret); 2757 printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
2750 return ret; 2758 return ret;