diff options
-rw-r--r-- | drivers/staging/android/binder.c | 10 |
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 | ||
2742 | err_alloc_small_buf_failed: | 2748 | err_alloc_small_buf_failed: |
2743 | kfree(proc->pages); | 2749 | kfree(proc->pages); |
2750 | proc->pages = NULL; | ||
2744 | err_alloc_pages_failed: | 2751 | err_alloc_pages_failed: |
2745 | vfree(proc->buffer); | 2752 | vfree(proc->buffer); |
2753 | proc->buffer = NULL; | ||
2746 | err_get_vm_area_failed: | 2754 | err_get_vm_area_failed: |
2747 | mutex_unlock(&binder_lock); | 2755 | err_already_mapped: |
2748 | err_bad_arg: | 2756 | err_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; |